openCV

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Добрый день!

Тема про openCV, установка, настройка и использование. Под использванием понимаю на первое время тривиальую задачу: координаты движущихся обьектов.

Прошу откликнуться людей, которым удалось таки запустить хотябы тестовые примеры.

В моем опыте все закончилось кучей ошибок в СИшке. То этого не найти, то того нет. Иначе вызывется кривая функция или не обьявленный метод. Целая куча... Ясно, что все упирается в грамотное подключение openCV к С++, прописать все инклуды и хедеры, все либы и магию.

Кто поборол все это?

 

P/s воможно, мою задачу можно решить другим путём, без openCV?

Всем спасибо за участие, тема интересна будет могим.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

P/s воможно, мою задачу можно решить другим путём, без openCV?

Имеется ввиду более легким =)

carduino.ru
Offline
Зарегистрирован: 06.12.2011

.c8r пишет:

P/s воможно, мою задачу можно решить другим путём, без openCV?

Всем спасибо за участие, тема интересна будет могим.

Я использовал для подобных задач Roborealm

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Как скрестить C++ 2008 и openCV без бубнов вроде cmake?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Можно не скрещивать, а просто настроить компорт на котором ардуино и отправлять на ему координаты и прочие выбранные данные. Или если хочется что то написать то можно законектится с программой через телнет

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Главная задача - определить на видеоряде/видеопотоке координаты движущихся обьектов.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Есть в программе детектор движения, дополнительно можно указать размер обьекта, его форму, цвет и т.д. 

Программа будет следить за обьектом и отправлять на ком порт его координаты

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Наверняка, это то что и нужно. Спасибо за ответ. А, программа работет с видео файлами на компьютере или можно захватить видео с вебки/платы захвата или файл из локальной сети?

 

UPD: увидал на забугорном сайте разработчика (?), вот это Multiple Image Sources (IEEE 1394 firewire, webcam, movie files, web images, etc.), главное - "картинки из веба", т.е. можно и видео, скорее всего?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Можно и с вебки, из файла  я только картинки пробывал

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Прога рабочая, пробовал на вебке, есть что интересного. Буду думать как применить, спасибо!

Diemon
Offline
Зарегистрирован: 18.11.2011

 на неделе как раз пробовал подключить opencv к visual c++ express. Не смог :( Ошибка, что не может открыть файл, который include. Т.к. дела раньше с visual не имел, то на этом собсно всё и застряло. Поэтому вопрос "как подключить" еще актуален.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

У меня ошибки в таком роде. Подключение С++ и openCV характерно для разных версий первого и второго. OpenCV старше 2.1 уже имеет на борту скомпилирование *.lib файлы для той же сишки, к примеру, а до 2.1 надо шаманить с makeром. Но всеравно нужно прописывать в сишке пути к openCV в "хедерах, инклудах, соурсах", к самому проекту тоже надо прописывать инклуды. Беда...

Но в этой связке, на мой взгляд, получится гибкое приложение, отвечающее именно на наши запросы.

 

За два дня мой самый интересный результат таков: проект скомпилировался, но ругался на использованные функции, типа cv::waitKey (вроде так), т.е. метод обьекта cv был не доступен, т.е. ничего хорошего.

Diemon
Offline
Зарегистрирован: 18.11.2011

 Опробовал RoboRealm - интересная програмулина! Так сказать opencv в обертке. Жаль что платная :(

Из неизвестного пока непонятно как открыть сотни файлов и проанализировать их. Открыл первый файл, записал координаты объекта с него в текстовый документ, открыл второй файл........... в "Open" выделяет только по одному.

Update: нашел , есть там такой "метод".  Потом вычислил значение переменной в каждом кадре, и записал их в txt файл. Блин, классная прога!)

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Поковырялся совсем немного в ней, где там творить подобные вещи?

Diemon
Offline
Зарегистрирован: 18.11.2011

 Да я сам только попробовал, как carduino.ru написал.

Общий смысл в том, что в окошке под рисунком\видео с камеры будет список действий, которые будут выполняться друг за другом, циклично.
img.alkad.org/images/94hjf.png

На моем скриншоте я:

открываю рисунки на диске D
делаю фильтр по синему цвету
нахожу центр синего предмета
Display variables -  просто показывает значение переменной на экране. 
высчитываю угол между центром экрана (это указано в свойстве) и центром синего предмета
сохраняю переменную в txt файл.

И это в цикле для каждого рисунка на диске.

 

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

И так, возвращаясь к теме. Где найти нормальный FAQ о том как подключить C++ к openCV?

Уточним, что версия последнего на данный момент "на сайте" это - 2.4.2.

Diemon
Offline
Зарегистрирован: 18.11.2011

 Ну, у меня сомпилился проект и запустился.

Visual Studio ставил отсюда: thepiratebay.se/torrent/5494777/Microsoft_Visual_Studio_2010_Ultimate_x86-TKiSO

Инструкция сдесь: jepsonsblog.blogspot.hu/2012/07/installation-guide-opencv-24-with.html Делал всё один в один.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Ура, товарищи!

OpenCV успешно скрещен с C++2010Express!

Шло туго, т.к. 2010 сишка закончилась, триал я имею ввиду. А 2008 еще позволяла работать, но никак не хотела подключать openCV. Только что зарегив 2010 сишку сайте микрософта, бесплатно, ес-но на лету подключил эти самые вещи.

Побрыкалась правда, пришлось в дерикторию проекта кидать либы, но результат есть. Можно двигаться дальше!

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Сишка продожает иметь мозги. Из тестового примера обнаружения лица имеем:

1>first.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall cv::CascadeClassifier::~CascadeClassifier(void)" (??1CascadeClassifier@cv@@UAE@XZ) referenced in function _main
1>first.obj : error LNK2019: unresolved external symbol "public: bool __thiscall cv::CascadeClassifier::load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?load@CascadeClassifier@cv@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main
1>first.obj : error LNK2019: unresolved external symbol "public: __thiscall cv::CascadeClassifier::CascadeClassifier(void)" (??0CascadeClassifier@cv@@QAE@XZ) referenced in function _main
1>C:\Users\c8r\documents\visual studio 2010\Projects\first\Debug\first.exe : fatal error LNK1120: 3 unresolved externals

как бороть?

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Как я и думал. Начав работу в матлабе я уже могу работать с полученым видеорядом. И это спустя 5 минут. Не неделя...5 минут.

 

UPD: низнай, какя там минута, 6ая или 8ая, но уже имеется тривиальное распознование движения. Поработать над фоном, и все готово.

Diemon
Offline
Зарегистрирован: 18.11.2011

скинь ссылочку на пример, попробую и я.

И можно поподробнее с матлабом? интересно, сам в матлабе часто работаю

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011
Diemon
Offline
Зарегистрирован: 18.11.2011

 Ну, Ваш код у меня скомпилился..... если перед ним еще прописать      #include "stdafx.h"

Правда созданный экзешник запускается с ошибкой

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

#include "stdafx.h" естественно прописываю. Мороки по сравнению с матлабом - тьма

А ошибка, возможно, из-за того, что таже сишка любит, когда нужные либы в папке проекта.

 

И про матлаб, еще 10 минут и обнаружение лиц готово. Запустил, открыл хелп, готово, идем дальше.

Diemon
Offline
Зарегистрирован: 18.11.2011

 Хм. у меня visual studio 2010. Настраивать опенсв по моей ссылке выше, больше ничего не делал. по вашей ссылке тупо скопировал код и нажал F5. больше ничего.

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

Значит, я проклят.

Diemon
Offline
Зарегистрирован: 18.11.2011

 Ан нет, я вас обманывал. Нормально скомпилился код и прога. Только что писать в ней я что-то не пойму. какой еще cascade?

cerr << "ERROR: Could not load classifier cascade" << endl;
cerr << "Usage: facedetect [--cascade=<cascade_path>]\n"
" [--nested-cascade[=nested_cascade_path]]\n"
" [--scale[=<image scale>\n"
" [filename|camera_index]\n" << endl ; 

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

На сегодня я забил =). Следующий подход завтра... ))

Diemon
Offline
Зарегистрирован: 18.11.2011

 Работает! Ну капец, я вам скажу запрос нужно, чтоб его запустить 

C:\Users\Diemon>"C:\Users\Diemon\Documents\Visual Studio 2010\Projects\OpenCVTest\Debug\OpenCVTest.exe" facedetect --cascade="C:\Users\Diemon\Documents\Visual Studio 2010\Projects\OpenCVTest\Debug\haarcascade_frontalface_alt.xml" C:\IMG_2820.JPG

Оно мне отвечает:

Processing 1 facedetect
Processing 2 --cascade=C:\Users\Diemon\Documents\Visual Studio 2010\Projects\OpenCVTest\Debug\haarcascade_frontalface_alt.xml
from which we have cascadeName= C:\Users\Diemon\Documents\Visual Studio 2010\Projects\OpenCVTest\Debug\haarcascade_frontalface_alt.xml
Processing 3 C:\IMG_2820.JPG
In image read
detection time = 1349.59 ms

Ну и собсно открывается картинка с распознанным лицом

http://www14.zippyshare.com/v/8545290/file.html  - exeшник

.c8r
.c8r аватар
Offline
Зарегистрирован: 15.11.2011

норм!