2013-12-07 4 views
2

Я пытаюсь выполнить обнаружение лиц на perl, и я узнал об OpenCV и модуле perl Image :: ObjectDetect на CPAN here и here. Я сделал чистую установку CentOS 6,5 (минимальной) на виртуальную машину, чтобы проверить это, а затем:install opencv for perl (centos)

yum -y update 
yum -y install perl cpan opencv 

Хорошо, и учитывая, что я никогда не пользователь CPAN раньше, я попробовал очевидный (после некоторого короткого гугла поиск)

perl -MCPAN -e shell 
[accept default] 
install Image::ObjectDetect 

, которые дали мне некоторые ошибки:

Package opencv was not found in the pkg-config search path. 
Perhaps you should add the directory containing `opencv.pc' 
to the PKG_CONFIG_PATH environment variable 
No package 'opencv' found 

После прибегая к помощи о том, что ошибки, я сделал:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 
mkdir /usr/local/lib/pkgconfig 
vi /usr/local/lib/pkgconfig/opencv.pc 

содержание файла:

prefix=/usr 
exec_prefix=${prefix} 
includedir=${prefix}/include 
libdir=${exec_prefix}/lib 

Name: opencv 
Description: The opencv library 
Version: 2.x.x 
Cflags: -I${includedir}/opencv -I${includedir}/opencv2 
Libs: -L${libdir} -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l 

После того как я побежал снова установить, я заметил, что я пропускал GCC:

/bin/sh: gcc: command not found 
yum -y install gcc 

Запуск теперь снова установить дает мне:

... 
Note (probably harmless): No library found for -lopencv_calib3d 
Note (probably harmless): No library found for -lopencv_imgproc 
Note (probably harmless): No library found for -lopencv_contrib 
Note (probably harmless): No library found for -lopencv_legacy 
Note (probably harmless): No library found for -l 
Writing Makefile for Image::ObjectDetect 
Could not read '/root/.cpan/build/Image-ObjectDetect-0.12-BsNNjF/META.yml'. Falling back to other methods to determine prerequisites 
cp lib/Image/ObjectDetect.pm blib/lib/Image/ObjectDetect.pm 
cp lib/Image/ObjectDetect.xs blib/lib/Image/ObjectDetect.xs 
/usr/bin/perl /usr/share/perl5/ExtUtils/xsubpp -typemap /usr/share/perl5/ExtUtils/typemap ObjectDetect.xs > ObjectDetect.xsc && mv ObjectDetect.xsc ObjectDetect.c 
gcc -c -I/usr/include/opencv -I/usr/include/opencv2 -Isrc -I/usr/include/opencv -I/usr/include/opencv2 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -DVERSION=\"0.12\" -DXS_VERSION=\"0.12\" -fPIC "-I/usr/lib/perl5/CORE" ObjectDetect.c 
In file included from ObjectDetect.xs:7: 
/usr/lib/perl5/CORE/cv.h:13: error: redefinition of ‘struct xpvcv’ 
/usr/lib/perl5/CORE/cv.h:94: error: conflicting types for ‘xpvcv_allocated’ 
/usr/lib/perl5/CORE/cv.h:94: note: previous declaration of ‘xpvcv_allocated’ was here 
ObjectDetect.xs:8:21: error: highgui.h: No such file or directory 
ObjectDetect.xs: In function ‘XS_Image__ObjectDetect_new’: 
ObjectDetect.xs:19: error: ‘CvHaarClassifierCascade’ undeclared (first use in this function) 
ObjectDetect.xs:19: error: (Each undeclared identifier is reported only once 
ObjectDetect.xs:19: error: for each function it appears in.) 
ObjectDetect.xs:19: error: ‘cascade’ undeclared (first use in this function) 
ObjectDetect.xs:22: warning: implicit declaration of function ‘cvLoad’ 
ObjectDetect.xs: In function ‘XS_Image__ObjectDetect_xs_detect’: 
ObjectDetect.xs:37: error: ‘IplImage’ undeclared (first use in this function) 
ObjectDetect.xs:37: error: ‘img’ undeclared (first use in this function) 
ObjectDetect.xs:37: error: ‘gray’ undeclared (first use in this function) 
ObjectDetect.xs:37: warning: left-hand operand of comma expression has no effect 
ObjectDetect.xs:39: error: ‘CvMemStorage’ undeclared (first use in this function) 
ObjectDetect.xs:39: error: ‘storage’ undeclared (first use in this function) 
ObjectDetect.xs:40: error: ‘CvHaarClassifierCascade’ undeclared (first use in this function) 
ObjectDetect.xs:40: error: ‘cascade’ undeclared (first use in this function) 
ObjectDetect.xs:41: error: ‘CvSeq’ undeclared (first use in this function) 
ObjectDetect.xs:41: error: ‘objects’ undeclared (first use in this function) 
ObjectDetect.xs:42: error: ‘CvRect’ undeclared (first use in this function) 
ObjectDetect.xs:42: error: ‘rect’ undeclared (first use in this function) 
ObjectDetect.xs:46: warning: implicit declaration of function ‘cvLoadImage’ 
ObjectDetect.xs:50: warning: implicit declaration of function ‘cvCreateImage’ 
ObjectDetect.xs:50: warning: implicit declaration of function ‘cvSize’ 
ObjectDetect.xs:51: warning: implicit declaration of function ‘cvCvtColor’ 
ObjectDetect.xs:51: error: ‘CV_BGR2GRAY’ undeclared (first use in this function) 
ObjectDetect.xs:52: warning: implicit declaration of function ‘cvEqualizeHist’ 
ObjectDetect.xs:54: warning: implicit declaration of function ‘cvCreateMemStorage’ 
ObjectDetect.xs:55: error: expected expression before ‘)’ token 
ObjectDetect.xs:56: warning: implicit declaration of function ‘cvHaarDetectObjects’ 
ObjectDetect.xs:58: error: ‘CV_HAAR_DO_CANNY_PRUNING’ undeclared (first use in this function) 
ObjectDetect.xs:65: error: expected expression before ‘)’ token 
ObjectDetect.xs:74: warning: implicit declaration of function ‘cvReleaseMemStorage’ 
ObjectDetect.xs:75: warning: implicit declaration of function ‘cvReleaseImage’ 
ObjectDetect.xs: In function ‘XS_Image__ObjectDetect_DESTROY’: 
ObjectDetect.xs:86: error: ‘CvHaarClassifierCascade’ undeclared (first use in this function) 
ObjectDetect.xs:86: error: ‘cascade’ undeclared (first use in this function) 
ObjectDetect.xs:88: error: expected expression before ‘)’ token 
ObjectDetect.xs:89: warning: implicit declaration of function ‘cvReleaseHaarClassifierCascade’ 
make: *** [ObjectDetect.o] Error 1 
JIRO/Image-ObjectDetect-0.12.tar.gz 
/usr/bin/make -- NOT OK 
Warning (usually harmless): 'YAML' not installed, will not store persistent state 
Running make test 
Can't test without successful make 
Running make install 
Make had returned bad status, install seems impossible 
Failed during this command: 
JIRO/Image-ObjectDetect-0.12.tar.gz   : make NO 

Любая помощь? Благодарю.

+0

В заключительной части вашей компиляции журнала вы получите сообщение об 'make'. Хотя вам может понадобиться использовать 'gmake' здесь, более вероятно, что' ObjectDetect.o' не был построен, поэтому тесты не могут выполняться.Вместо списка OpenCV, как я предлагаю ниже, вам может быть лучше просто отправить JIRO по электронной почте, чтобы увидеть, работает ли «Image :: ObjectDetect» с более новыми версиями OpenCV. –

+0

Некоторые связанные с этим приключения при создании объектов ObjectDetect описаны здесь: http://www.perlmonks.org/?node_id=1037892 Это может дать вам представление о том, как люди пытаются отлаживать проблемы с помощью модулей, которые используют C. –

ответ

2

Рад видеть, что кто-то использует OpenCV с Perl! Я надеюсь, что вы можете получить работу и показать нам некоторые интересные ВРУ и сценарии :-)

Вы, кажется, строить из источника и установка пакетов (с yum) - иногда это усложняет дело, когда речь идет о зависимостях. Например, у вас может быть версия OpenCV, которая слишком новая для модуля CPAN. Image :: ObjectDetect` довольно старый (последний выпуск был несколько лет назад http://metacpan.org/pod/Image::ObjectDetect), тогда как OpenCV активно развивается.

ПримечаниеЭтот линия:

ObjectDetect.xs:8:21: error: highgui.h: No such file or directory 

я наткнулся подобной ошибки компиляции приложений, которые зависят от OpenCV после недавнего обновления. Либо файлы заголовков отсутствовали; приложения Makefiles не знали, как их найти; или другие библиотеки разработки и заголовки в цепочке зависимостей также нуждаются в обновлении.

Возможно, вам удастся решить эту проблему, отправив в список разработки OpenCV, где сообщение об ошибке может выглядеть более знакомым.

См: http://groups.yahoo.com/neo/groups/OpenCV/info

Вы можете попробовать установить некоторые другие модули, чтобы увидеть, если это perl, XS, gcc или вашу версию OpenCV, которая в вине. Вот еще один модуль, который использует OpenCV:

https://github.com/shisful/Image-OpenCV

+0

Спасибо за ответ. Проблема, как вы упомянули, вероятно, связана с различиями версий между opencv и изображением :: obejctdetect. На данный момент я работал над этим, компилируя последнюю версию opencv и создавая небольшой скрипт python, который я вызываю с помощью perl. это беспорядочно, но это (почти) работает :) – jvilhena