crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Проблемы с OpenCV
x-8973
  опции профиля:
сообщение 28.6.2013, 21:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 22.2.2013
Пользователь №: 3720

Спасибо сказали: 0 раз(а)




Репутация:   0  


Копаю проблему "компьютерного зрения". Имеется Raspberry Pi с Rspbian'ом на борту и подключенной веб-камерой. Задача: получить изображение с веб-камеры и сохранить его в виде файла на внешний носитель.
Во время копания наткнулся на библиотеку openCV, которую все расхваливали, так как кроссплатформенная, бесплатная и прочие плюшки. Решил поставить.
Как я 6 часов собирал ее из исходников, попутно поправляя всякие баги, отдельный разговор. Теперь же она тупо не хочет работать (хотя думается мне, что дело не в ней).
Итак. Написан в Qt следующий код:
main.cpp
#include <QCoreApplication>
#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    CvCapture* capture = cvCreateCameraCapture(0);
    if (capture == NULL)
    {
        printf("[e] CAM not found");
        return 0;
    }
    assert(capture);
    double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
    double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
    printf("[i] %.0f x %.0f\n", width, height);
    IplImage* frame = 0;
    cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);
    printf("[i] press Enter for capture image and Esc for quit\n\n");
    int counter = 0;
    char filename[512];
    while(true)
    {
        frame = cvQueryFrame(capture);
        cvShowImage("capture", frame);
        char c = cvWaitKey(33);
        if (c == 27)
        {
            break;
        }
        else if (c == 13)
        {
            sprintf(filename, "Image%d.jpg", counter);
            printf("[i] capture... %s\n", filename);
            cvSaveImage(filename, frame);
            counter++;
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("capture");
    }

    return 0;
}

testVideo.pro
#-------------------------------------------------
#
# Project created by QtCreator 2013-06-28T21:14:00
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = testVideo
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui

SOURCES += main.cpp

После сборки и запуска через консоль получаем следующее:
Цитата
VIDIOC_QUERYMENU: Недопустимый аргумент
VIDIOC_QUERYMENU: Недопустимый аргумент
VIDIOC_QUERYMENU: Недопустимый аргумент
[i] 640 x 480
[i] press Enter for capture image and Esc for quit

И все. Окно с изображением не открывается, по нажатию Enter в файл ничего не сохраняется, на Esc не реагирует вообще.
Поискав ошибку в интернетах, я нашел множество советов, начиная с указания другого параметра для функции cvCreateCameraCapture(), и заканчивая пересборкой ядра. Некоторые советы не сработали, некоторые не подходят. Вопрос к знатокам: кто работал с этой библиотекой под Linux вообще и под Raspbian в частности, и что еще можно сделать для того, чтобы оно заработало?
Пы.Сы. Попытался сделать чтение картинки из файла - работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 1.7.2013, 6:37
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


я не уверена, что Raspbian имеет необходимые для OpenCV версии библиотек. он вообще довольно урезанный, да и дебиан не так быстро обновляется. требования к OpenCV описаны у них в вики: http://opencv.willowgarage.com/wiki/Instal...%20%3a%20Debian
проверь для начала, что все твои библиотеки имеют минимальные требуемые версии.
проверь, что камера вообще живёт под твоим ядром и драйвер адекватно реагирует на её vid:pid.
P.S. как правило, если все требования соблюдены, то библиотеки собираются без проблем и без "исправления багов".

Сообщение отредактировал Iron Bug - 1.7.2013, 6:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
x-8973
  опции профиля:
сообщение 1.7.2013, 7:54
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 22.2.2013
Пользователь №: 3720

Спасибо сказали: 0 раз(а)




Репутация:   0  


Камера вообще работает - проверено установкой motion'а. Ошибки происходили при сборке версии 2.2.0, самая последняя версия собралась без проблем и намного быстрее, с тем же результатом. Библиотеки все стоят свежие, по крайней мере репозиторий перед их утановкой апгрейдил и апдейтил.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 1.7.2013, 9:07
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(x-8973 @ 1.7.2013, 10:54) *
Библиотеки все стоят свежие

вопрос не в свежести, а в соответствии версиям, указанным у разработчиков OpenCV. так как сам Дебиан серьёзно отстаёт от последних версий, как правило, а Распбиан отстаёт ещё и от Дебиана, то там могут быть несоответствия. но и более свежие версии тоже могут быть несовместимы. так что лучше ставить точно те версии, которые указаны у разработчиков библиотеки.
у меня дома есть Распбиан, но сильно проапгрейдженный и там есть косяки с новой версией ядра и некотыми драйверами. я пока не копала глубоко, но есть подозрение, что свежее ядро местами недопилено под Raspberry. так что не исключено, что проблема не в библиотеках, а в ядре.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 1.7.2013, 20:51
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


да, кстати: а что мешает использовать дебиановскую готовую библиотеку opencv? она всяко совместима с библиотеками и ядром и она в распбиане есть, я проверила.

P.S. тема вообще-то никаким образом к Qt не относится, её по идее надо перенести в раздел "другие библиотеки".

Сообщение отредактировал Iron Bug - 1.7.2013, 20:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.7.2013, 21:03
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Iron Bug @ 1.7.2013, 22:51) *
P.S. тема вообще-то никаким образом к Qt не относится, её по идее надо перенести в раздел "другие библиотеки".
да, пожалуй. (OpenCV ведь может быть использована и с другими GUI-библиотеками)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
x-8973
  опции профиля:
сообщение 2.7.2013, 7:28
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 22.2.2013
Пользователь №: 3720

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 1.7.2013, 23:51) *
она в распбиане есть, я проверила.

Тааак, с этого места поподробнее...
Будет очень весело, если сейчас окажется, что ее можно установить через apt-get.
И да. Я установил почти все библиотеки из списка, что приведен в вики (некоторых в репозитории не оказалось), после чего пересобрал opencv (без проблем вообще) и попробовал запустить проект. Если раньше программа могла использовать камеру, но не могла получить с нее изображение, то теперь она просто не может камеру найти.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 2.7.2013, 8:10
Сообщение #8


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(x-8973 @ 2.7.2013, 10:28) *
Будет очень весело, если сейчас окажется, что ее можно установить через apt-get.

дык, libopencv-dev, например :)
я по памяти пишу название, у меня тут линя нет под рукой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
x-8973
  опции профиля:
сообщение 5.7.2013, 11:21
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 22.2.2013
Пользователь №: 3720

Спасибо сказали: 0 раз(а)




Репутация:   0  


Все заработало после установки библиотек libopencv-highgui и libopencv-dev. Но вот только одна проблема - изображение в окне постоянно дергается и частично заливается разными цветами. Смахивает на воздействие каких-то помех на вебку. Видео записывается в ускоренном виде, причем чем меньший fps выставить в программе, тем ближе к норме будет скорость воспроизведения. Так вот, хотелось бы узнать, если кто в курсе, как избавиться от этих "помех", если это вообще помехи? Ну и с записью видео тоже разобраться не мешало бы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.7.2013, 11:46
Сообщение #10


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


по описанию это больше похоже на глюк декодера или OpenGL. в смысле, софтовой библиотеки. попробуй записывать картинки в файлы и посмотри - есть там глюк или нет. если нет - значит, это точно декодер.
кроме того, у Raspberry есть один косяк с графикой, и есть к нему патчик в настройках в raspi-config - что-то про графику, там написано, что если глюки с экраном, то включите опцию ххх (не помню название).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 1:24