海康威视错误代码0xf_调用海康威视sdk获取车牌号
环境: 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获取车牌号相关推荐
- 调用海康威视sdk获取车牌号
环境: win10(10.0.16299.0)+ vs2017 sdk版本:CH-HCNetSDK_Win32_V5.3.2.15_build20171122 https://download.csd ...
- java对接 布防 海康威视_java调用海康威视sdk获取车牌号demo
//软件启动的时候启动海康威视一体机(开启监听) public void startHaikang(){ //初始化sdk if (AlarmJavaComm.initializeSDK()){ lo ...
- java调用海康威视sdk获取车牌号demo
//软件启动的时候启动海康威视一体机(开启监听) public void startHaikang(){//初始化sdkif (AlarmJavaComm.initializeSDK()){logge ...
- 海康威视错误代码0xf_海康威视设备网络SDK编程指南(报 警主机).pdf
设备(报警主机) 网络SDK 编程指南 V5.2 I 设备网络SDK 编程指南 声 明 非常感谢您购买我公司的产品,如果您有什么疑问或需要请随时联系我们. 我们已尽量保证手册内容的完整性与准确性, ...
- 海康威视错误代码0xf_技术讨论 看我如何重置海康威视IP摄像机的管理员密码
写在前面的话 我们经常在网上看到某某通用IP摄像机被黑客利用的新闻.大多数情况下,制造商并不会强制用户设置安全密码,通常您可以使用默认密码直接登录.但有些厂商与众不同--海康威视.首次登录时使用密码是 ...
- 海康威视错误代码0xf_海康威视嵌入式软件工程师笔试题分享(含解答)
海康威视嵌入式驱动工程师的题目只包含选择题和简答题,没有编程题.毫无疑问,C语言基础题依然是最多的(c可是嵌入式的笔尖),又因为是驱动方向,所以关于Linux操作系统和底层方面的题会比较多一点,但是就 ...
- 海康威视错误代码0xf_海康威视错误代码大全
展开全部 1.NET_DVR_NOERROR0没有错误. 2.NET_DVR_PASSWORD_ERROR1用户名密码错误.注册时输入的用户名或者密码错误. 3.NET_DVR_NOENOUGHPRI ...
- Java程序执行Linux命令调用EasyPR程序识别车牌号
1)下载解压JDK并配置环境变量 #vi /etc/profile 编辑: #Java Environment Path export JAVA_HO ...
- 整合百度AI实现手机拍照识别车牌号
一.功能需求 如图所示,上报时不仅可以手动输入车牌号,还允许拍照自动识别车牌,填充到输入框. 二.思路 拟采用百度AI实现该功能(http://ai.baidu.com/docs#/OCR-API/5 ...
最新文章
- python合并两个字典的内容,使用update方法
- matlab 三维饼图,重新学习MATLAB——作图技法及3D可视化
- php exit、return、break、continue之间的差别,具体介绍
- 像个字段相减绝对值_【高考数学】33个知识点+66个易混点大整合
- 第十届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
- nginx+php+memcache高速缓存openresty)
- 【Python学习】——语言风格(变量赋值、深浅拷贝、for循环陷阱)
- mysql jquery tree_php mysql js实现树形菜单代码
- android int 首位值_Android中数值的精确计算
- Overview of HEVC之2 Slices and Tiles
- 电路基础知识之有源晶振设计
- 生产环境CPU占用飙高问题解决
- 物联网新零售项目 新零售制胜之道
- nodejs--process
- java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口
- SecureBoost: A Lossless Federated Learning Framework论文笔记
- 字节、KB、MB、GB 之间的换算关系 Bps和bps的区别
- 迷宫寻径问题(数据结构4.4.3)
- 事务(Transaction)的特性
- toad for mysql_toad for mysql