OpenCV中文网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 安装 配置
楼主: Shiqi Yu

免费、高性能的人脸检测库

  [复制链接]
发表于 2015-5-22 08:51:55 | 显示全部楼层
#include "opencv2/objdetect.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/core/utility.hpp"
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <assert.h>  
#include <math.h>  
#include <float.h>  
#include <limits.h>  
#include <time.h>  
#include <ctype.h>

using namespace std;
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;

void detect_and_draw(IplImage* image);
const char* cascade_name =
"D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml";


int main()
{
        CvCapture* capture = 0;

        cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0);

        if (!cascade)
        {
                fprintf(stderr, "ERROR: Could not load classifier cascade/n");
                //fprintf( stderr,  
                //"Usage: facedetect --cascade=/"<cascade_path>"/[filename|camera_index]/n" );  
                return -1;
        }
        storage = cvCreateMemStorage(0);

        cvNamedWindow("result", 1);

        const char* filename = "C:/Users/Administrator/Desktop/sunny.jpg";
        IplImage* image = cvLoadImage(filename);

        if (image )
        {
                detect_and_draw(image);
                cvWaitKey(0);
                cvReleaseImage(&image);
        }

        cvDestroyWindow("result");
        cvWaitKey(0);
        return 0;
}

void detect_and_draw(IplImage* img)
{
        static CvScalar colors[] =
        {
                { 0, 0, 255 } ,
                { 0, 128, 255 } ,
                { 0, 255, 255 } ,
                { 0, 255, 0 },
                { 255, 128, 0 },
                 { 255, 255,0 } ,
                { 255, 0, 0  },
                { 255, 0, 255 }
        };

        double scale = 1.3;
        IplImage* gray = cvCreateImage(cvSize(img->width, img->height), 8, 1);
        IplImage* small_img = cvCreateImage(cvSize(cvRound(img->width / scale),
                cvRound(img->height / scale)),
                8, 1);
        int i;

        cvCvtColor(img, gray, CV_BGR2GRAY);
        cvResize(gray, small_img, CV_INTER_LINEAR);
        cvEqualizeHist(small_img, small_img);
        cvClearMemStorage(storage);

        //IplImage * img;
        //CvSeq* faces = cvHaarDetectObjects(img, cascade, storage,1.1, 2, 0,cvSize(30, 30));

        if (cascade)
        {
                double t = (double)cvGetTickCount();
                CvSeq* faces = cvHaarDetectObjects(small_img, cascade, storage,
                        1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
                        cvSize(30, 30));
                t = (double)cvGetTickCount() - t;
                printf("detection time = %gms/n", t / ((double)cvGetTickFrequency()*1000.));
                for (i = 0; i < (faces ? faces->total : 0); i++)
                {
                        CvRect* r = (CvRect*)cvGetSeqElem(faces, i);
                        CvPoint center;
                        int radius;
                        center.x = cvRound((r->x + r->width*0.5)*scale);
                        center.y = cvRound((r->y + r->height*0.5)*scale);
                        radius = cvRound((r->width + r->height)*0.25*scale);
                        cvCircle(img, center, radius, colors[i % 8], 3, 8, 0);
                }
        }

        cvShowImage("result", img);
        cvReleaseImage(&gray);
        cvReleaseImage(&small_img);
}

你可以帮我看看吗?这几天一直没解决这个问题,重复一样的错误
回复 支持 反对

使用道具 举报

发表于 2015-5-24 02:08:34 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

发表于 2015-5-26 21:31:56 | 显示全部楼层
于老师,我想问下在C#下该如何使用这个二进制LIB中的函数,麻烦您指导一下
回复 支持 反对

使用道具 举报

发表于 2015-5-30 16:16:26 | 显示全部楼层
各位老师,小弟在使用这个库的例程时候,碰上了错误       
error LNK1107: 文件无效或损坏: 无法在 0x2B0 处读取
是那个libfacedetect.dll的错误,求大家指教。
我使用的是vs2012,opencv2.4.10
回复 支持 反对

使用道具 举报

发表于 2015-6-1 19:39:02 | 显示全部楼层
谢谢分享,请问有python借口么?

回复 支持 反对

使用道具 举报

发表于 2015-6-9 08:51:08 | 显示全部楼层
于老师,您好!谢谢您提供的“免费、高性能的人脸检测库”,我在一些视频和图像中进行了测试,总体上相比于opencv haar+adaboost算法在正确率和时间上均有较大的提升,但对于一些较小尺寸以及一些侧面图像未能检测出,您个人网站上看到有一个基于lbp + gentle adaboost人脸检测的一点介绍信息,不知是否该人脸检测算法实现与之一致,请问该算法库是否可以开放源码或提供相关论文,以便进行后续优化。期待您的回复,谢谢!
回复 支持 反对

使用道具 举报

发表于 2015-6-9 23:48:45 | 显示全部楼层
非常感谢老师的分享! 老师能不能提供一下库的arm_linux_gcc编译版本呢?我们需要在嵌入式平台上用到,或者提供一下原.c文件,我自己编译一下。谢谢老师! 我的邮箱是835646050@qq.com如果可以的话能发给我一下吗?太感谢老师了!
回复 支持 反对

使用道具 举报

发表于 2015-6-10 22:26:42 | 显示全部楼层
学习一下!谢谢
回复 支持 反对

使用道具 举报

发表于 2015-6-12 14:45:12 | 显示全部楼层
于老师,请问您共享的代码有linux版本的吗?可不可以发我一份呢?邮箱 jq.wang@ia.ac.cn 谢谢您!
回复 支持 反对

使用道具 举报

发表于 2015-6-25 15:47:26 | 显示全部楼层
赞!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站  

GMT+8, 2019-10-21 10:55 , Processed in 0.044404 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表