拌合楼管理系统(十七)海康威视车牌识别摄像头手工控制拍照和车牌识别

本文主要是介绍拌合楼管理系统(十七)海康威视车牌识别摄像头手工控制拍照和车牌识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

        一般海康威视的车牌都是通过设置触发线,车辆经过某个位置后,触发摄像头的拍照和车牌识别的功能。做得更精细一些会通过雷达感应线圈。在拌合楼这个项目过程中,有需要程序控制摄像头来进行拍照和车牌识别。


实现过程:

        一、实际效果:

        我打印了一张图片放在摄像头前,模拟车停好位置。一个winForm,上面按钮点击后就控制拍照和车牌识别,车牌识别的结果通过一个lable显示出来,场景大图和车牌小图,分别通过两个pictureBox显示出来。

        二、官方文档对于车牌识别的说明:

1. 初始化

        初始化NET_DVR_Init接口在程序开始是调用,只需要调用一次。

2. 登录设备

        用户注册即登录设备,调用NET_DVR_Login_V40接口,每一台设备只需要登录一次。

3. 获取设备能力,此步骤可以省略

        登录设备之后,可以通过NET_DVR_GetDeviceAbility获取智能交通能力集可以判断设备是否支持相关功能,能力集类型:DEVICE_ABILITY_INFO,能力集:ITDeviceAbility,节点:<ITCAbility>。

4.  车牌识别的方式

        车牌识别包括IO触发、虚拟线圈触发等自动触发抓拍模式和网络触发等手动抓拍模式。如果是自动触发模式,一般建议通过WEB网页登录设备进行配置调试,也可以通过SDK接口进行配置,相关接口:NET_DVR_GetDVRConfig(命令:NET_ITC_GET_TRIGGERCFG)、NET_DVR_SetDVRConfig(命令:NET_ITC_SET_TRIGGERCFG)、NET_DVR_GetDeviceConfig(命令:NET_DVR_GET_TRIGGEREX_CFG)、NET_DVR_SetDeviceConfig(命令:NET_DVR_SET_TRIGGEREX_CFG)等。
        如果是手动抓拍,有两种方式:1)通过NET_DVR_ManualSnap可以在接口直接返回结果信息;2)通过NET_DVR_ContinuousShoot发送网络触发连拍命令,抓拍结果跟自动触发模式一样,通过报警布防方式在报警回调函数里面返回。

5. 参数配置

        配置好设备相关参数,车辆通过时进行抓拍和识别,结果信息通过报警布防方式获取,具体实现方法:1) 先调用NET_DVR_SetDVRMessageCallBack_V50设置报警回调函数(V31、V30接口也支持,新接口兼容老接口),在SDK初始化之后即可以调用,多台设备对接时也只需要调用一次设置一个回调函数,回调函数里面接收数据之后可以通过报警设备信息(NET_DVR_ALARMER)中lUserID等参数判断区分设备。2) 每台设备分别登录,分别调用NET_DVR_SetupAlarmChan_V41进行布防,布防即建立设备跟客户端之间报警上传的连接通道,这样设备发生报警之后通过该连接上传报警信息,SDK在报警回调函数中接收和处理报警信息数据即可。对接智能交通摄像机,布防时可以选择布防等级,一级布防(byLevel为0)最大连接数为1个,二级布防(byLevel为1)最大连接数为3个,如果已经达到上限了,再布防就会失败,SDK将返回28的错误号。3) 程序退出前或者不需要接收报警信息时调用NET_DVR_CloseAlarmChan_V30进行撤防,释放资源,此时连接断开,设备将不再上传报警信息。

6.  车牌识别的告警类型:

        车牌识别的报警信息类型为COMM_ITS_PLATE_RESULT(新报警信息)和COMM_UPLOAD_PLATE_RESULT(老报警信息),分别对应接口NET_DVR_SetupAlarmChan_V41中布防参数byAlarmInfoType=1和byAlarmInfoType=0。建议使用新的报警信息类型。
        1)设备是否支持新报警信息可从注册返回的能力获知,详见NET_DVR_DEVICEINFO_V30结构中bySupport1&0x80(表示是否支持车牌新报警信息),如果注册返回能力不支持,设备仅支持老报警信息上传。2)COMM_UPLOAD_PLATE_RESULT:兼容旧型号(976/986/966等)抓拍机,一次回调只上传一张图片信息,对应报警信息结构体:NET_DVR_PLATE_RESULT。3)COMM_ITS_PLATE_RESULT:应用于违章图片组一次性上传以及合成图片上传等新功能,对应报警信息结构体:NET_ITS_PLATE_RESULT

7. 退出登录释放资源

        退出程序时调用NET_DVR_Logout注销设备,每一台设备调用一次。最后调用NET_DVR_Cleanup释放SDK所有资源。

         三、代码的实现

        对于如何登录、布防一级识别后图片的处理,可以详见我之前的文章。今天代码的核心呢空是如何点击按钮触发拍照和车牌识别了。拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,总算是跑通了。-CSDN博客

        1.  函数 NET_DVR_ContinuousShoot

              查阅sdk文档可以知道通过此寒暑可以进行网络触发抓拍。

BOOL NET_DVR_ContinuousShoot(

        LONG lUserID,

         LPNET_DVR_SNAPCFG lpInter

);

        其中IUserID 是设备登录后返回的句柄。 lpInter 是网络触发抓怕的配置

        2. 结构体  LPNET_DVR_SNAPCFG

struct{

DWORD dwSize;

BYTE byRelatedDriveWay;

BYTE bySnapTimes;

WORD wSnapWaitTime;

WORD wIntervalTime[MAX_INTERVAL_NUM];

DWORD dwSnapVehicleNum;

NET_DVR_JPEGPARA struJpegPara;

BYTE byRes2[16];

}

NET_DVR_SNAPCFG, *LPNET_DVR_SNAPCFG;

        代码是很简单的,但是大量时间都花在了对这个结构体的构造上。结构体的字段含义如下:

dwSize

结构体大小

byRelatedDriveWay

触发IO关联的车道号,取值范围[0,9]

bySnapTimes

线圈抓拍次数,0-不抓拍,非0-连拍次数,目前最大5次

wSnapWaitTime

抓拍等待时间,单位ms,取值范围[0,60000]

wIntervalTime

连拍间隔时间,单位ms,取值范围[67,60000]

dwSnapVehicleNum

抓拍车辆序号,从1开始,逐次递增

struJpegPara

抓拍图片参数,需要设备支持(参数取值范围由设备能力集为准),目前门禁考勤一体机V1.1支持

byRes2

保留,置为0

        3.  NET_DVR_JPEGPARA   JPEG图像信息结构体。

 struct{

WORD wPicSize;

WORD wPicQuality;

}NET_DVR_JPEGPARA,*LPNET_DVR_JPEGPARA;

wPicSize

图片尺寸:0-CIF(352*288/352*240),1-QCIF(176*144/176*120),2-4CIF(704*576/704*480)或D1(720*576/720*486),3-UXGA(1600*1200), 4-SVGA(800*600),5-HD720P(1280*720),6-VGA(640*480),7-XVGA(1280*960),8-HD900P(1600*900),9-HD1080P(1920*1080),10-2560*1920, 11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768),17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080I(1920*1080),20-576*576,21-1536*1536,22-1920*1920,23-320*240,24-720*720,25-1024*768,26-1280*1280,27-1600*600, 28-2048*768,29-160*120,75-336*256,78-384*256,79-384*216,80-320*256,82-320*192,83-512*384,127-480*272,128-512*272, 161-288*320,162-144*176,163-480*640,164-240*320,165-120*160,166-576*720,167-720*1280,168-576*960,180-180*240, 181-360*480, 182-540*720, 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(使用当前码流分辨率)

wPicQuality

图片质量系数:0-最好,1-较好,2-一般

        4.  按钮事件的实现

        弄明白了两个结构体的构造,代码实现就是小意思了。

  NET_DVR_SNAPCFG nds = new NET_DVR_SNAPCFG();NET_DVR_JPEGPARA ndj = new NET_DVR_JPEGPARA();nds.byRelatedDriveWay =0;nds.bySnapTimes = 1;nds.wSnapWaitTime = 1000;ndj.wPicQuality = 0;ndj.wPicSize = 9;nds.struJpegPara = ndj;nds.byRes2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];nds.dwSize = (uint)Marshal.SizeOf(nds);if (!NET_DVR_ContinuousShoot(m_lUserID, ref nds)){myLogger.Error(NET_DVR_GetLastError());}else {myLogger.Info("手工触发车牌识别程序");}

    


        总结:

        官方文档示例主要是c来实现的,没跑通之前我都差不多要放弃了。但最后跑通的一刻感觉心情无比畅快,就想打仗攻克了一个又一个的山头。一个收获就是反复看官方的sdk文档了。

这篇关于拌合楼管理系统(十七)海康威视车牌识别摄像头手工控制拍照和车牌识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949637

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构