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

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

前言:

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


实现过程:

        一、实际效果:

        我打印了一张图片放在摄像头前,模拟车停好位置。一个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开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视