(QT)大华(海康)网络摄像头人脸采集和人脸识别SDK的二次开发

上篇文章接入了摄像头的登录和客流统计功能,这篇文章我们接入人脸采集功能。

上篇文章:使用QT对接大华网络摄像头SDK的示例程序(建议收藏)

本文Demo下载地址:https://download.csdn.net/download/u012534831/12585622

LLONG faceHnd;//智能事件句柄
void Widget::h_openface()
{
    if(FALSE == LoginHandle)
    {
        QMessageBox::about(NULL,laddr->text(),"未连接登录");
        return;
    }
    // 订阅智能事件上报
    faceHnd = CLIENT_RealLoadPictureEx(LoginHandle, 0, (DWORD)EVENT_IVS_ALL,TRUE, AnalyzerDataCallBack, (LDWORD)this, NULL);
    if(NULL == faceHnd)
    {
        printf("CLIENT_RealLoadPictureEx: failed! Error code %x.\n", CLIENT_GetLastError());
        return ;
    }
}

首先,我们要订阅人脸采集的事件,但是对于SDK来说只有一个接口CLIENT_RealLoadPictureEx,统称为智能事件,而其中第三个参数指定我们要订阅的事件,EVENT_IVS_ALL代表订阅所有的事件,
EVENT_IVS_FACEDETECT 是人脸检测事件,EVENT_IVS_FACERECOGNITION是人脸识别事件。

第四个参数是一个 bool 值,代表我们是否需要 SDK 回调的图片数据。没有图片的话可以节省带宽。

第五个参数是一个回调函数,里面包含了智能事件的数据信息。

第六个参数是用户数据,其实你可以传入当前类的指针,以方便在下面的回调函数中使用成员变量,比如我就传入了当前类 Widget

//智能事件上报回调函数
int CALLBACK Widget::AnalyzerDataCallBack(LLONG lAnalyzerHandle, DWORD dwAlarmType, void*
pAlarmInfo, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser, int nSequence, void *reserved)
{
    std::cout << "dwalarmtype:" <<dwAlarmType <<endl;
    Widget *w = static_cast<Widget*>((void*)dwUser);
    switch(dwAlarmType)
    {
    // 过滤出你想要的智能事件
    case EVENT_IVS_FACERECOGNITION: // 人脸识别事件
       {
		...
       }
    break;
    case EVENT_IVS_FACEDETECT: // 人脸检测事件
    {
       QPixmap map;
       map.loadFromData(pBuffer,dwBufSize);
       w->labelimage->setPixmap(map.scaled(QSize(200,200), Qt::KeepAspectRatio));
    }
    break;
    default:
    break;
    }
    return 0;
}

dwAlarmType是回调上来的事件类型,pBuffer 是回调的图片数据,dwBufSize是数据大小,因此我在这儿使用 Qpixmap ,将其显示到 label 上。

 CLIENT_StopLoadPic(faceHnd);

取消订阅。

你可能感兴趣的:(大华摄像头SDK,大华SDK,QT)