环境: win10(10.0.16299.0)+ vs2017

sdk版本:CH-HCNetSDK_Win32_V5.3.2.15_build20171122https://download.csdn.net/download/cngwj/10307129(工程已包含sdk下载后可直接运行)

1、首先确认摄像头是否支持车辆检测

2、 启用事件抓图

3、配置sdk

下载sdk http://www.hikvision.com/cn/download_61.html

4、运行效果图

/************************************************************************

* Copyright(c) 2018

*

* File:报警布防_0.3.c

* Brief:调用海康威视sdk获取车牌号

* Version: 0.3

* Author: 一念无明

* Email:zhunmeng@live.com

* Date: 2018.02.26

* History:

2018.2.26 调用海康威视sdk获取车牌号

2018.3.7 获取设备系统时间

2018.3.12 保存车牌号到csv文件

2018.3.14对识别到的车牌号进行白名单比对

************************************************************************/

//-------------------------------------------------------------------------

//头文件

#include

#include

#include

#include

#include

#include "Windows.h"

#include "HCNetSDK.h"

#include

#include //getch()函数用

using namespace std;

//参数声明

int iNum = 0; //图片名称序号

LONG IUserID;//摄像机设备

LONG IHandle = -1;//报警布防/撤防;

NET_DVR_DEVICEINFO_V30 struDeviceInfo;//设备信息

char sDVRIP[20];//抓拍摄像机设备IP地址

short wDVRPort = 8000;//设备端口号

char sUserName[20];//登录的用户名

char sPassword[20];//用户密码

string carNum;//车牌号

string LineByLine;//逐行读取文件

//---------------------------------------------------------------------------------

//函数声明

void Init();//初始化

void Demo_SDK_Version(); //获取sdk版本

void Connect();//设置连接事件与重连时间

void Htime();//获取海康威视设备时间

bool Login(char *sDVRIP, short wDVRPort, char *sUserName, char *sPassword);//注册摄像机设备

void CALLBACK MSesGCallback(LONG ICommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void *pUser);//报警回调函数

void SetMessageCallBack();//设置报警回调函数

void Whitelist();//白名单比对

void Blacklist();//黑名单比对

void SetupAlarm();//报警布防

void CloseAlarm();//报警撤防

void OnExit(void);//退出

//---------------------------------------------------------------------------------------------------

//函数定义

//初始化

void Init()

{

//获取系统时间

SYSTEMTIME sys;

GetLocalTime(&sys);

cout << sys.wYear << "-" << sys.wMonth << "-" << sys.wDay << " " << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;

cout << "IP:";

cin >> sDVRIP; cout << endl;

cout << "用户名:";

cin >> sUserName; cout << endl;

cout << "密码:";

char c;

for (int i = 0; (c = _getch()) != '\r'; i++) {

sPassword[i] = c;

putchar('*');

}

cout << endl;

NET_DVR_Init();//初始化

Demo_SDK_Version();//获取 SDK 的版本号和 build 信息

}

//设置连接事件与重连时间

void Connect()

{

NET_DVR_SetConnectTime(2000, 1);

NET_DVR_SetReconnect(10000, true);

}

//获取海康威视设备时间

void Htime() {

bool iRet;

DWORD dwReturnLen;

NET_DVR_TIME struParams = { 0 };

iRet = NET_DVR_GetDVRConfig(IUserID, NET_DVR_GET_TIMECFG, 1, \

&struParams, sizeof(NET_DVR_TIME), &dwReturnLen);

if (!iRet)

{

printf("NET_DVR_GetDVRConfig NET_DVR_GET_TIMECFG error.\n");

NET_DVR_Logout(IUserID);

NET_DVR_Cleanup();

}

printf("%d年%d月%d日%d:%d:%d\n", struParams.dwYear, struParams.dwMonth, struParams.dwDay, struParams.dwHour, struParams.dwMinute, struParams.dwSecond);

}

//注册摄像机设备

bool Login(char *sDVRIP, short wDVRPort, char *sUserName, char *sPassword)

{

IUserID = NET_DVR_Login_V30(sDVRIP, wDVRPort, sUserName, sPassword, &struDeviceInfo);

if (IUserID < 0)

{

std::cout << "Login Failed! Error number:" << NET_DVR_GetLastError() << std::endl;

NET_DVR_Cleanup();

return false;

}

else

{

std::cout << "Login Successfully!" << std::endl;

return true;

}

}

//Demo_SDK_Version()海康威视sdk版本获取函数

void Demo_SDK_Version()

{

unsigned int uiVersion = NET_DVR_GetSDKBuildVersion();

char strTemp[1024] = { 0 };

sprintf_s(strTemp, "HCNetSDK V%d.%d.%d.%d\n", \

(0xff000000 & uiVersion) >> 24, \

(0x00ff0000 & uiVersion) >> 16, \

(0x0000ff00 & uiVersion) >> 8, \

(0x000000ff & uiVersion));

printf(strTemp);

}

//定义异常消息回调函数

void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)

{

char tempbuf[256] = { 0 };

switch (dwType)

{

case EXCEPTION_RECONNECT: //预览时重连

printf("----------reconnect--------%d\n", time(NULL));

break;

default:

break;

}

}

//报警回调函数

void CALLBACK MSesGCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)

{

ofstream oFile;//定义文件输出流

oFile.open("车牌号.csv", ofstream::app); //打开要输出的文件

//获取系统时间

SYSTEMTIME sys;

GetLocalTime(&sys);

cout << sys.wYear << "-" << sys.wMonth << "-" << sys.wDay << " " << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;

int i = 0;

char filename[100];

FILE *fSnapPic = NULL;

FILE *fSnapPicPlate = NULL;

//以下代码仅供参考,实际应用中不建议在该回调函数中直接处理数据保存文件,

//例如可以使用消息的方式(PostMessage)在消息响应函数里进行处理。

switch (lCommand) {

//交通抓拍结果(老报警消息)

case COMM_UPLOAD_PLATE_RESULT: {

NET_DVR_PLATE_RESULT struPlateResult = { 0 };

memcpy(&struPlateResult, pAlarmInfo, sizeof(struPlateResult));

printf("车牌号: %s\n", struPlateResult.struPlateInfo.sLicense);//车牌号

// oFile << struPlateResult.struPlateInfo.sLicense << endl;//保存车牌号到csv文件

oFile << struPlateResult.struPlateInfo.sLicense << "," << sys.wYear << "-" << sys.wMonth << "-" << sys.wDay << " " << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;//保存车牌号到csv文件

//场景图

if (struPlateResult.dwPicLen != 0 && struPlateResult.byResultType == 1)

{

sprintf(filename, "./pic/%s.jpg", struPlateResult.struPlateInfo.sLicense);

fSnapPic = fopen(filename, "wb");

fwrite(struPlateResult.pBuffer1, struPlateResult.dwPicLen, 1, fSnapPic);

iNum++;

fclose(fSnapPic);

}

//车牌图

if (struPlateResult.dwPicPlateLen != 0 && struPlateResult.byResultType == 1)

{

sprintf(filename, "./pic/1/%s.jpg", struPlateResult.struPlateInfo.sLicense);

fSnapPicPlate = fopen(filename, "wb");

fwrite(struPlateResult.pBuffer1, struPlateResult.dwPicLen, 1, fSnapPicPlate);

iNum++;

fclose(fSnapPicPlate);

}

//其他信息处理......

break;

}

//交通抓拍结果(新报警消息)

case COMM_ITS_PLATE_RESULT: {

NET_ITS_PLATE_RESULT struITSPlateResult = { 0 };

memcpy(&struITSPlateResult, pAlarmInfo, sizeof(struITSPlateResult));

for (i = 0; i

{

printf("车牌号: %s\n", struITSPlateResult.struPlateInfo.sLicense);//车牌号

carNum = struITSPlateResult.struPlateInfo.sLicense;

oFile << carNum << "," << sys.wYear << "-" << sys.wMonth << "-" << sys.wDay << " " << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;//保存车牌号到csv文件

if ((struITSPlateResult.struPicInfo[i].dwDataLen != 0) && (struITSPlateResult.struPicInfo[i].byType == 1) || (struITSPlateResult.struPicInfo[i].byType == 2))

{

sprintf(filename, "./pic/%s_%d.jpg", struITSPlateResult.struPlateInfo.sLicense, i);

fSnapPic = fopen(filename, "wb");

fwrite(struITSPlateResult.struPicInfo[i].pBuffer, struITSPlateResult.struPicInfo[i].dwDataLen, 1, fSnapPic);

iNum++;

fclose(fSnapPic);

}

//车牌小图片

if ((struITSPlateResult.struPicInfo[i].dwDataLen != 0) && (struITSPlateResult.struPicInfo[i].byType == 0))

{

sprintf(filename, "./pic/1/%s_%d.jpg", struITSPlateResult.struPlateInfo.sLicense, i);

fSnapPicPlate = fopen(filename, "wb");

fwrite(struITSPlateResult.struPicInfo[i].pBuffer, struITSPlateResult.struPicInfo[i].dwDataLen, 1, \

fSnapPicPlate);

iNum++;

fclose(fSnapPicPlate);

}

//其他信息处理......

}

Whitelist();//白名单比对

Blacklist();//黑名单比对

break;

}

default: {

std::cout << lCommand << endl;

break;

}

}

oFile.close();//关闭文件

return;

}

//设置报警回调函数

void SetMessageCallBack()

{

NET_DVR_SetDVRMessageCallBack_V30(MSesGCallback, NULL);

}

//报警布防

void SetupAlarm()

{

//启动布防

NET_DVR_SETUPALARM_PARAM struSetupParam = { 0 };

struSetupParam.dwSize = sizeof(NET_DVR_SETUPALARM_PARAM);

struSetupParam.byAlarmInfoType = 1;//上传报警信息类型:0-老报警信息(NET_DVR_PLATE_RESULT), 1-新报警信息(NET_ITS_PLATE_RESULT)

struSetupParam.byLevel = 1;//布防优先级:0- 一等级(高),1- 二等级(中),2- 三等级(低)

//bySupport 按位表示,值:0 - 上传,1 - 不上传; bit0 - 表示二级布防是否上传图片;

IHandle = NET_DVR_SetupAlarmChan_V41(IUserID, &struSetupParam);//建立报警上传通道,获取报警等信息。

if (IHandle < 0)

{

std::cout << "NET_DVR_SetupAlarmChan_V41 Failed! Error number:" << NET_DVR_GetLastError() << std::endl;

NET_DVR_Logout(IUserID);

NET_DVR_Cleanup();

return;

}

std::cout << "\n" << endl;

}

//报警撤防

void CloseAlarm()

{

//撤销布防上传通道

if (!NET_DVR_CloseAlarmChan_V30(IHandle))//布防句柄IHandle

{

std::cout << "NET_DVR_CloseAlarmChan_V30 Failed! Error number:" << NET_DVR_GetLastError() << std::endl;

NET_DVR_Logout(IUserID);

NET_DVR_Cleanup();

return;

}

IHandle = -1;//布防句柄;

}

//退出

void OnExit(void)

{

std::cout << "Begin exit..." << std::endl;

//报警撤防

CloseAlarm();

//释放相机

NET_DVR_Logout(IUserID);//注销用户

NET_DVR_Cleanup();//释放SDK资源

}

//白名单比对

void Whitelist() {

ifstream iFile;

iFile.open("白名单.csv", ios::in);

if (!iFile.is_open())

std::cout << "找不到文件";

while (getline(iFile, LineByLine))

{

if (LineByLine.empty()) {

continue;

}

else {

size_t found = LineByLine.find(carNum.substr(4, 8));//carNum.substr(4, 8) 截取车牌号“蓝新NF8202”为NF8202

if (found != std::string::npos) {

std::cout << "白名单:" << LineByLine << '\n';

}

}

}

iFile.close();//关闭文件

}

//黑名单比对

void Blacklist() {

ifstream iFile;

iFile.open("黑名单.csv", ios::in);

if (!iFile.is_open())

std::cout << "找不到文件";

while (getline(iFile, LineByLine))

{

if (LineByLine.empty()) {

continue;

}

else {

size_t found = LineByLine.find(carNum.substr(4, 8));//carNum.substr(4, 8) 截取车牌号“蓝新NF8202”为NF8202

if (found != std::string::npos) {

std::cout << "黑名单:" << LineByLine << '\n';

}

}

}

iFile.close();//关闭文件

}

int main()

{

Init();//初始化sdk

Connect();//设置连接事件与重连时间

Login(sDVRIP, wDVRPort, sUserName, sPassword);//注册设备

Htime(); //获取海康威视设备时间

SetupAlarm();//布防

SetMessageCallBack();//注册报警回调函数

for (;;) {

SetMessageCallBack();//报警回调函数

Sleep(500);

}

Sleep(-1);

atexit(OnExit);//退出

return 0;

}

海康威视错误代码0xf_调用海康威视sdk获取车牌号相关推荐

  1. 调用海康威视sdk获取车牌号

    环境: win10(10.0.16299.0)+ vs2017 sdk版本:CH-HCNetSDK_Win32_V5.3.2.15_build20171122 https://download.csd ...

  2. java对接 布防 海康威视_java调用海康威视sdk获取车牌号demo

    //软件启动的时候启动海康威视一体机(开启监听) public void startHaikang(){ //初始化sdk if (AlarmJavaComm.initializeSDK()){ lo ...

  3. java调用海康威视sdk获取车牌号demo

    //软件启动的时候启动海康威视一体机(开启监听) public void startHaikang(){//初始化sdkif (AlarmJavaComm.initializeSDK()){logge ...

  4. 海康威视错误代码0xf_海康威视设备网络SDK编程指南(报 警主机).pdf

    设备(报警主机) 网络SDK 编程指南 V5.2 I 设备网络SDK 编程指南 声 明 非常感谢您购买我公司的产品,如果您有什么疑问或需要请随时联系我们.  我们已尽量保证手册内容的完整性与准确性, ...

  5. 海康威视错误代码0xf_技术讨论 看我如何重置海康威视IP摄像机的管理员密码

    写在前面的话 我们经常在网上看到某某通用IP摄像机被黑客利用的新闻.大多数情况下,制造商并不会强制用户设置安全密码,通常您可以使用默认密码直接登录.但有些厂商与众不同--海康威视.首次登录时使用密码是 ...

  6. 海康威视错误代码0xf_海康威视嵌入式软件工程师笔试题分享(含解答)

    海康威视嵌入式驱动工程师的题目只包含选择题和简答题,没有编程题.毫无疑问,C语言基础题依然是最多的(c可是嵌入式的笔尖),又因为是驱动方向,所以关于Linux操作系统和底层方面的题会比较多一点,但是就 ...

  7. 海康威视错误代码0xf_海康威视错误代码大全

    展开全部 1.NET_DVR_NOERROR0没有错误. 2.NET_DVR_PASSWORD_ERROR1用户名密码错误.注册时输入的用户名或者密码错误. 3.NET_DVR_NOENOUGHPRI ...

  8. Java程序执行Linux命令调用EasyPR程序识别车牌号

    1)下载解压JDK并配置环境变量      #vi /etc/profile           编辑:      #Java Environment Path      export JAVA_HO ...

  9. 整合百度AI实现手机拍照识别车牌号

    一.功能需求 如图所示,上报时不仅可以手动输入车牌号,还允许拍照自动识别车牌,填充到输入框. 二.思路 拟采用百度AI实现该功能(http://ai.baidu.com/docs#/OCR-API/5 ...

最新文章

  1. python合并两个字典的内容,使用update方法
  2. matlab 三维饼图,重新学习MATLAB——作图技法及3D可视化
  3. php exit、return、break、continue之间的差别,具体介绍
  4. 像个字段相减绝对值_【高考数学】33个知识点+66个易混点大整合
  5. 第十届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
  6. nginx+php+memcache高速缓存openresty)
  7. 【Python学习】——语言风格(变量赋值、深浅拷贝、for循环陷阱)
  8. mysql jquery tree_php mysql js实现树形菜单代码
  9. android int 首位值_Android中数值的精确计算
  10. Overview of HEVC之2 Slices and Tiles
  11. 电路基础知识之有源晶振设计
  12. 生产环境CPU占用飙高问题解决
  13. 物联网新零售项目 新零售制胜之道
  14. nodejs--process
  15. java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口
  16. SecureBoost: A Lossless Federated Learning Framework论文笔记
  17. 字节、KB、MB、GB 之间的换算关系 Bps和bps的区别
  18. 迷宫寻径问题(数据结构4.4.3)
  19. 事务(Transaction)的特性
  20. toad for mysql_toad for mysql

热门文章

  1. PAT 乙级 1033 旧键盘打字 python
  2. 傅里叶入门--动手演示波形叠加
  3. jquery和JavaScript之间的联系和区别
  4. 全球及中国用于航空业的挂锁密封件行业研究及十四五规划分析报告
  5. python汇率兑换_美元与人民币汇率 Python
  6. .jar.LASTUPDATED问题解决
  7. eclipse设置pom.xml打开方式,显示dependences视图
  8. win10 c++调用pytorch模型
  9. 国内外云服务现状及发展探讨
  10. 模拟IC设计——反相器