一库通吃!.NET 平台下的智能车牌识别标准化方案

19 阅读6分钟

前言

智能交通系统的快速发展,车牌识别技术在安防监控、停车场管理、高速公路收费等多个领域得到了广泛应用。然而,不同厂家提供的车牌识别设备往往有不同的接口标准,给集成商带来了不小的挑战。

为了解决这个问题,今天推荐个用于.NET 的车牌识别对接框架,它提供一套统一的接口标准,可以轻松地与各种车牌识别设备进行对接,极大地简化了集成过程。

项目介绍

IoTSharp.VLPR是一个用于.NET平台的车牌识别对接框架。框架定义了一套标准化的接口规范,允许开发将不同的车牌识别设备无缝集成到自己的项目中。

通过这种方式,用户只需按照标准接口要求提供给厂商,厂商完成对接后,开发只需拷贝对应的动态库到程序目录即可使用,无需额外编写复杂的适配代码。目前,已有数家厂商完成了与IoTSharp.VLPR的对接,证明了其广泛的适用性和灵活性。

项目功能

1、统一接口标准

提供了统一的接口规范,使得不同厂商的车牌识别设备可以方便地集成。

2、动态库加载

支持通过简单的配置文件设置,加载对应厂商提供的动态库。

3、健康检查

集成了健康检查功能,确保系统运行状态良好。

4、多种调用方式

支持初始化、获取车辆信息、抓拍等多种操作,满足不同场景需求。

项目使用

安装使用

dotnet add package IoTSharp.VLPR

添加配置

再appsettings.json中加入下面内容:

"VLPROptions": {
  "Interval": 300,
  "EasyVLPR": false,
  "VLPRConfigs": [
    {
      "Name": "1",
      "Provider": "libvpr_xlw.so.1.0.0.3",
      "Port": 5001,
      "IPAddress": "10.13.97.91",
      "Password": "admin",
      "UserName": "admin"
    }
  ]
}

代码示例

namespace Console1
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. 
        //Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
      
            services.AddVPRService();
          
            services.AddHealthChecks()
                    .AddVLPR("VLPR");

        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

        }
    }
}

接口对接规范

1、车牌识别库要求

交付内容:厂商需提供符合命名规范的车牌识别库(共享库文件)。

命名格式libVpr_<厂家缩写和型号缩写>.so (例如:libVpr_xlw.so)

附加要求:提供一个完全测试通过的Demo代码,包含 Makefile 文件,以便验证接口的正确性。

2、Linux共享库(SO)接口定义

1、初始化接口 (Init)

函数声明

long VPR_InitEx(char* capIpAddress, char* username, char* password, int uPort);

long VPR_Init(...); // 具体参数未在原文列出,但要求至少实现 VPR_InitEx 或 VPR_Init 之一

调用优先级:程序加载时,优先通过 dlsym 查找 VPR_InitEx,若不存在则查找 VPR_Init

函数说明:用于初始化系统中的车牌识别器。

参数说明

参数说明
capIpAddress车牌识别器的IP地址
username登录用户名
password登录密码
uPort用户自定义端口,当接口库接收到车牌识别器的识别结果时,向此端口发送数据包

返回值说明

返回值说明
<= 0错误:0 (网络错误), -1 (登录失败), -2 (其他错误)
> 0成功,返回设备句柄 (Handle)

2、退出接口 (Quit)

函数声明

BOOL VPR_Quit(long Handle);

函数说明:用于关闭系统中的车牌识别器。

参数说明

参数说明
Handle设备句柄,由 VPR_InitVPR_InitEx 返回
值说明**:
返回值说明
:---:---
TRUE关闭成功
FALSE关闭失败

3、获取车辆信息接口 (GetVehicleInfoEx)*

函数声明

int VPR_GetVehicleInfoEx(long Handle, char *pchPlate, unsigned char *iPlateColor, int *piByteBinImagLen, BYTE *pByteBinImage, int *piJpegImageLen, unsigned char* pByteJpegImage, int* laneId, int* index);

函数说明:获取车牌号、车牌二值图、车辆JPEG图像。

参数说明

参数说明
Handle设备句柄
pchPlate[输出] 返回牌照号 (字符数组)
iPlateColor[输出] 返回车牌颜色 (整型)
piByteBinImagLen[输出] 返回车辆二值图的大小 (字节)
pByteBinImage[输出] 返回车牌二值图 (字节数组)
piJpegImageLen[输出] 返回车辆JPEG图像的大小 (字节)
pByteJpegImage[输出] 返回车辆的图片 (JPEG格式,字节数组)
laneId[输出] 车道号,对应 VPR_CaptureEx 中传入的车道号
index[输出] 抓拍ID,对应 VPR_CaptureEx 中传入的抓拍ID

返回值说明

返回值说明
TRUE获取信息成功
FALSE获取信息失败

iPlateColor 值与颜色对应关系

iPlateColor对应颜色
0
1
2
3
4渐绿
5黄绿
6蓝白

VPR_GetVehicleInfoEx 接口注意事项

若无识别结果,pchPlate 将返回“无车牌”,iPlateColor 返回 0

pchPlate 至少需申请 30字节 空间,最大长度为 64字节

pByteBinImage 最大需预留 280字节 空间。

pByteJpegImage 最大需预留 1024 * 1024 * 2 字节 (约 2MB) 空间。

中文编码采用 GB2312 编码。

4、触发抓拍接口 (CaptureEx)

函数声明

int VPR_CaptureEx(long Handle, int laneId, int index);

函数说明:当上位机调用该接口时,作为指令触发方式,告知接口需要取一次车牌信息,车牌识别仪收到后进行抓拍。

参数说明

参数说明
Handle设备句柄,由 VPR_InitVPR_InitEx 返回
laneId车道号,需与相机中配置的相对应
index抓拍ID,用于区分不同的抓拍结果

返回值说明

返回值说明
TRUE发送抓拍命令成功
FALSE发送抓拍命令失败

5、检查状态接口 (CheckStatus)

函数声明

int VPR_CheckStatus(long Handle, char * chVprDevStatus);

函数说明:检查牌照识别器状态。

参数说明

参数说明
Handle设备句柄
chVprDevStatus[输出] 返回牌照识别器状态说明,最长 512字节,中文编码采用 GB2312 编码

返回值说明

返回值说明
TRUE牌照识别器状态正常
FALSE牌照识别器状态不正常

设置事件回调接口 (SetEventCallBackFunc)

函数声明

int VPR_SetEventCallBackFunc(long Handle, VPR_EventHandleEx cb);
typedef void (*VPR_EventHandleEx)(long Handle, int laneId, int index);

函数说明:设置回调函数。当收到车牌识别结果时,将调用 VPR_EventHandleEx 类型的回调函数 cb

参数说明

参数说明
Handle设备句柄
cb回调函数指针,类型为 VPR_EventHandleEx

回调函数原型void VPR_EventHandleEx(long Handle, int laneId, int index);

Handle:设备句柄

laneId:触发事件的车道号

index:触发事件的抓拍ID

项目源码

Gitee:gitee.com/IoTSharp/VL…

总结

IoTSharp.VLPR 作为一个用于.NET平台的车牌识别对接框架,不仅简化了不同厂商设备的集成过程,还提供了丰富的功能和良好的用户体验。其标准化的接口设计、灵活的动态库加载机制以及强大的健康检查功能,开发能够专注于业务逻辑的实现,而非繁琐的技术细节。对于需要集成车牌识别功能的企业来说,IoTSharp.VLPR无疑是一个值得信赖的选择。

关键词

IoTSharp.VLPR、.NET、车牌识别、动态库、接口标准、健康检查、跨平台、开源项目

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!