安装 facedetect
May 17th, 2009
No comments
wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
- tar zvxf facedetect-1.0.0.tar.gz
- /usr/local/php5/phpize (php扩展到编译方式)
- ./configure --with-php-config=/usr/local/php5/bin/php-config
- make && make install
- vi /usr/local/php5/etc/php.ini
- extension=facedetect.so
重启apache
phpinfo 查看facedetect 模块是否加载。
测试例子
- <?php
- var_dump(face_count('./r/DSC01141.JPG', 'haarcascade_frontalface_alt.xml'));
- $photoimgArray=face_detect('./r/DSC01141.JPG', 'haarcascade_frontalface_alt.xml');
- ?>
附加说明:
php facedetect 就封装的2个函数(方法)
face_detect 和face_count
源码:
- static function_entry facedetect_functions[] = {
- PHP_FE(face_detect, NULL)
- PHP_FE(face_count, NULL)
- {NULL, NULL, NULL}
- };
- 核心源码:
- static void php_facedetect(INTERNAL_FUNCTION_PARAMETERS, int return_type)
- {
- char *file, *casc;
- long flen, clen;
- zval *array;
- CvHaarClassifierCascade* cascade;
- IplImage *img, *gray;
- CvMemStorage *storage;
- CvSeq *faces;
- CvRect *rect;
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &file, &flen, &casc, &clen) == FAILURE) {
- RETURN_NULL();
- }
- img = cvLoadImage(file, 1);
- if(!img) {
- RETURN_FALSE;
- }
- cascade = (CvHaarClassifierCascade*)cvLoad(casc, 0, 0, 0);
- if(!cascade) {
- RETURN_FALSE;
- }
- gray = cvCreateImage(cvSize(img->width, img->height), 8, 1);
- cvCvtColor(img, gray, CV_BGR2GRAY);
- cvEqualizeHist(gray, gray);
- storage = cvCreateMemStorage(0);
- faces = cvHaarDetectObjects(gray, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(0, 0));
- if(return_type) {
- array_init(return_value);
- if(faces && faces->total > 0) {
- int i;
- for(i = 0; i < faces->total; i++) {
- MAKE_STD_ZVAL(array);
- array_init(array);
- rect = (CvRect *)cvGetSeqElem(faces, i);
- add_assoc_long(array, "x", rect->x);
- add_assoc_long(array, "y", rect->y);
- add_assoc_long(array, "w", rect->width);
- add_assoc_long(array, "h", rect->height);
- add_next_index_zval(return_value, array);
- }
- }
- } else {
- RETVAL_LONG(faces ? faces->total : 0);
- }
- cvReleaseMemStorage(&storage);
- cvReleaseImage(&gray);
- cvReleaseImage(&img);
- }
