一个控制台程序的pro内容,功能:使用海康、大华、宇视的SDK进行车牌号获取开发,其包含了SDK外部库的添加。
pro文件内容:
QT -= gui
QT += xml core network serialport
CONFIG += c++14 console
DEFINES += KERNEL_LIBRARY QT_MESSAGELOGCONTEXT
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
cardetectorparams.cpp \
configparams.cpp \
dahuacameramanager.cpp \
dahuacamgetcarnumber.cpp \
hikoncameramanager.cpp \
hikoncamgetcarnumber.cpp \
main.cpp \
serviceCarNumberCaptureGlobal.cpp \
servicefun_dahua_sdkapi_getcarnumber.cpp \
servicefun_hikon_sdkapi_getcarnumber.cpp \
servicefun_udpnetwork_forcarnumber.cpp \
servicefun_uv_sdkapi_getcarnumber.cpp \
uvcameramanager.cpp \
uvcamgetcarnumber.cpp
TRANSLATIONS += \
DHCarNumCapConsole_zh_CN.ts
qnx: target.path = /tmp/$${
TARGET}/bin
else: unix:!android: target.path = /opt/$${
TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
cardetectorparams.h \
configparams.h \
dahuacameramanager.h \
dahuacamgetcarnumber.h \
hikoncameramanager.h \
hikoncamgetcarnumber.h \
kernel_global.h \
serviceCarNumberCaptureGlobal.h \
servicefun_dahua_sdkapi_getcarnumber.h \
servicefun_hikon_sdkapi_getcarnumber.h \
servicefun_udpnetwork_forcarnumber.h \
servicefun_uv_sdkapi_getcarnumber.h \
uvcameramanager.h \
uvcamgetcarnumber.h
#64位
#大华
LIBS += "D:/DHCarNumCapConsole/dhsdkwin64_is_v3.057/Lib/Win64/dhnetsdk.lib"
INCLUDEPATH += "D:/DHCarNumCapConsole/dhsdkwin64_is_v3.057/Include/Common"
DEPENDPATH += "D:/DHCarNumCapConsole/dhsdkwin64_is_v3.057/Include/Common"
#海康
LIBS += "D:/DHCarNumCapConsole/CH-HCNetSDKV6.1.9.48_build20230410_win64/Lib/HCNetSDK.lib"
INCLUDEPATH += "D:/DHCarNumCapConsole/CH-HCNetSDKV6.1.9.48_build20230410_win64/Include"
DEPENDPATH += "D:/DHCarNumCapConsole/CH-HCNetSDKV6.1.9.48_build20230410_win64/Include"
#宇视
LIBS += "D:/DHCarNumCapConsole/ITSSDK-B0303.164.2.0.220511_UV/dll/lib/NetDEVSDK.lib"
INCLUDEPATH += "D:/DHCarNumCapConsole/ITSSDK-B0303.164.2.0.220511_UV/dll/include"
DEPENDPATH += "D:/DHCarNumCapConsole/ITSSDK-B0303.164.2.0.220511_UV/dll/include"
DISTFILES += \
使用和开发说明.txt``
二、海康SDK绑定摄像头
bool HikonCamGetCarNumber::bindHkCamSDK(QString ip,QString username,QString password,int relationNumber,QString servicePort)
{
//接收到的是一个指令结构,是否过期在run()方法中已经进行了判断,过期的不会发过来,所以这里只需要把这个结构传给车牌号抓取程序即可
//此处调用海康抓取车牌号的程序,在回调函数中把获取到的车牌号按照方向车道,累加到road_car_number这结构中。等待run()方法中发送
//---------------------------------------
//初始化
BOOL result=NET_DVR_Init();
if(!result){
return false;
}
NET_DVR_SetLogToFile(3,(char *)std::string("../log").c_str(),false);
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
//---------------------------------------
//注册设备
//登录参数,包括设备地址、登录用户、密码等
LONG lUserID = -1; //初始化lUserID
NET_DVR_USER_LOGIN_INFO struLoginInfo = {
0};//创建一个数据结构对象并为每个属性赋初值为0
struLoginInfo.bUseAsynLogin = 0; //设置为同步登录方式
strcpy(struLoginInfo.sDeviceAddress,ip.toStdString().c_str()); //设置设备IP地址为192.168.2.184(大门口海康能够获取车牌号的摄像头的IP)
struLoginInfo.wPort = servicePort.toInt(); //设置服务端口默认值为8000
strcpy(struLoginInfo.sUserName, username.toStdString().c_str()); //设置:用户名
strcpy(struLoginInfo.sPassword, password.toStdString().c_str()); //设置:密码
//设备信息, 输出参数
NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {
0};//创建一个V40数据结构对象
lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);//登录注册并将设备信息存储在struDeviceInfoV40结构中
if (lUserID < 0)
{
//登录失败时提示错误信息
qDebug("HK Login fail!");
return false;
}else{
qDebug("HK Login success!");
}
//---------------------------------------
//报警布防
//设置报警回调函数
NET_DVR_SetDVRMessageCallBack_V31(MSesGCallback, NULL);
//启用布防
NET_DVR_SETUPALARM_PARAM struSetupParam={
0};//创建布防结构对象并初始化为0
struSetupParam.dwSize=sizeof(NET_DVR_SETUPALARM_PARAM);//根据NET_DVR_SETUPALARM_PARAM的大小来设置dwSize的值
struSetupParam.byLevel = 1; //布防优先级:0- 一等级(高),1- 二等级(中),2-多设备布防,即允许同一时间多个设备同时布防
struSetupParam.byAlarmInfoType = 1; //上传报警信息类型: 0- 老报警信息(NET_DVR_PLATE_RESULT), 1- 新报警信息(NET_ITS_PLATE_RESULT)
LONG lHandle = NET_DVR_SetupAlarmChan_V41(lUserID,&struSetupParam);//开始布防并设置回调函数
//如果lHandle<0则布防失败,然后出登出并清除
if (lHandle < 0)
{
qDebug("HK setAlarm fail");
NET_DVR_Logout(lUserID);
return false;
}
qDebug("HK Set Alarm Success!");
qDebug()<<"ip:"<<ip;
//---------------------------------------
//网络触发抓拍
NET_DVR_SNAPCFG struSnapCfg;
memset(&struSnapCfg, 0, sizeof(NET_DVR_SNAPCFG));
//结构体大小
struSnapCfg.dwSize = sizeof(NET_DVR_SNAPCFG);
//线圈抓拍次数,0-不抓拍,非0-连拍次数,目前最大5次
struSnapCfg.bySnapTimes = 0;
//抓拍等待时间,单位ms,取值范围[0,60000]
struSnapCfg.wSnapWaitTime = 1;//1000
//连拍间隔时间,单位ms,取值范围[67,60000]
struSnapCfg.wIntervalTime[0] = 67;//1000
struSnapCfg.wIntervalTime[1] = 67;//1000
//触发IO关联的车道号