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

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

前言:

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


实现过程:

        一、实际效果:

        我打印了一张图片放在摄像头前,模拟车停好位置。一个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异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像