Перейти к содержимому
Compvision.ru

DenisN03

Пользователи
  • Количество публикаций

    7
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем DenisN03


  1. Привет. Есть ли какие нибудь интересные проекты по созданию квадрокоптера с использованием Raspberry PI3 в качестве основной управляющей платы? Я нашел примеры только на Arduino, но хочется использовать именно Raspberry т.к. планируется установка камеры и обработка изображений в реальном времени. Интересуют проекты в которых используется машинное зрение для навигации квадрокоптера.


  2. Привет! Помогите подобрать модель и тип камеры для построения карты глубины. Планируется установка двух камер с разных сторон автомобиля и нужно чтобы камеры охватывали как можно большую область видимости. Пробовал работать с обычными вебкамерами, но у них маленький угол обзора (порядка 60 градусов), поэтому его не хватает. 


  3. Возникла необходимость подключить внешнюю usb камеру к android приложению и вывести изображение на экран смартфона. Кто нибудь занимался схожей задачей? Работаю в Android Studio 3. Проекты(https://github.com/openxc/android-webcam, https://github.com/theicfire/simplewebcam, https://github.com/saki4510t/UVCCamera) с github вылетают с ошибками.


  4.  Я нашел функцию которая обрабатывает результат, но она для языка С++. Можете подсказать как ее преобразовать в Java?

    static void colorizeSegmentation(const Mat &score, Mat &segm)
    {
        const int rows = score.size[2];
        const int cols = score.size[3];
        const int chns = score.size[1];

        Mat maxCl = Mat::zeros(rows, cols, CV_8UC1);
        Mat maxVal(rows, cols, CV_32FC1, score.data);
        for (int ch = 1; ch < chns; ch++)
        {
            for (int row = 0; row < rows; row++)
            {
                const float *ptrScore = score.ptr<float>(0, ch, row);
                uint8_t *ptrMaxCl = maxCl.ptr<uint8_t>(row);
                float *ptrMaxVal = maxVal.ptr<float>(row);
                for (int col = 0; col < cols; col++)
                {
                    if (ptrScore[col] > ptrMaxVal[col])
                    {
                        ptrMaxVal[col] = ptrScore[col];
                        ptrMaxCl[col] = (uchar)ch;
                    }
                }
            }
        }

        segm.create(rows, cols, CV_8UC3);
        for (int row = 0; row < rows; row++)
        {
            const uchar *ptrMaxCl = maxCl.ptr<uchar>(row);
            Vec3b *ptrSegm = segm.ptr<Vec3b>(row);
            for (int col = 0; col < cols; col++)
            {
                ptrSegm[col] = colors[ptrMaxCl[col]];
            }
        }
    }


  5. Создаю андроид программу которая с использованием opencv(dnn) загружает модель нейронной сети Enet и производит сегментацию входного изображения. Все идет гладко до обработки полученных результатов. На языке python обработка производится довольно просто - в цикле проходимся по матрице пикселей и в зависимости от значения присваиваем ему цвет. В java все не так: после работы возвращается объект типа Mat со следующими параметрами:

    res = Mat [ -1*-1*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x7f3e56fff160, dataAddr=0x7f3e44806000 ]
    res.total() = 1036800
    res.channels() = 1
    res.size() = 6x1
    res.dims() = 4
    res.cols() = -1
    res.rows() = -1
    

    Более того если все таки достать(http://answers.opencv.org/question/175676/javaandroid-access-4-dim-mat-planes/) значения пикселей из полученного результата то они не соответствуют ожиданиям. Т.е. каждому классу соответствует число например если 5 классов то возвращаются числа от 0 до 4(так работает на python). Здесь же мне возвращаются числа вида: -26.287221908569336, -14.588539123535156, -7.386473655700684, 1.4765703678131104, 15.550891876220703. 

    Кто нибудь знает как преодолеть данную проблему? Почему объект Mat возвращает не те значения?

×