车牌识别C#项目源代码

news/2024/11/28 22:34:58/

车牌识别C#项目源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
 
    public class VzClientSDK
    {
        public VzClientSDK()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        //设置回调函数时需要制定的类型
        public enum VZ_LPRC_CALLBACK_TYPE : uint
        {
            VZ_LPRC_CALLBACK_COMMON_NOTIFY = 0, //SDK通用信息反馈
            VZ_LPRC_CALLBACK_PLATE_STR,   //车牌号码字符
            VZ_LRPC_CALLBACK_FULL_IMAGE,  //完整图像
            VZ_LPRC_CALLBACK_CLIP_IMAGE,  //截取图像
            VZ_LPRC_CALLBACK_PLATE_RESULT,  //实时识别结果
            VZ_LPRC_CALLBACK_PLATE_RESULT_STABLE, //稳定识别结果
            VZ_LPRC_CALLBACK_PLATE_RESULT_TRIGGER,  //触发的识别结果,包括API(软件)和IO(硬件)方式的
            VZ_LPRC_CALLBACK_VIDEO,     //视频帧回调
        }
        //通用信息反馈类型
        public enum VZ_LPRC_COMMON_NOTIFY : uint
        {
            VZ_LPRC_NO_ERR = 0,
            VZ_LPRC_ACCESS_DENIED,  //用户名密码错误
            VZ_LPRC_NETWORK_ERR,  //网络连接故障
        }

        //识别结果的类型
        public enum VZ_LPRC_RESULT_TYPE : uint
        {
            VZ_LPRC_RESULT_REALTIME = 0,    //实时识别结果
            VZ_LPRC_RESULT_STABLE,      //稳定识别结果
            VZ_LPRC_RESULT_FORCE_TRIGGER, //调用“VzLPRClient_ForceTrigger”触发的识别结果
            VZ_LPRC_RESULT_IO_TRIGGER,    //外部IO信号触发的识别结果
            VZ_LPRC_RESULT_VLOOP_TRIGGER, //虚拟线圈触发的识别结果
        }

        //顶点定义
        //X_1000和Y_1000的取值范围为[0, 1000];
        //即位置信息为实际图像位置在整体图像位置的相对尺寸;
        //例如X_1000 = x*1000/win_width,其中x为点在图像中的水平像素位置,win_width为图像宽度
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_LPRC_VERTEX
        {
            uint X_1000;
            uint Y_1000;
        }

        public const int VZ_LPRC_VIRTUAL_LOOP_NAME_LEN = 32;
        public const int VZ_LPRC_VIRTUAL_LOOP_VERTEX_NUM = 4;
        //虚拟线圈信息定义
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_LPRC_VIRTUAL_LOOP
        {
            public byte byID;   //序号
            public byte byEnable; //是否有效
            public byte byDraw;   //是否绘制
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 1, ArraySubType = UnmanagedType.I1)]
            public byte[] byRes;  //预留
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = VZ_LPRC_VIRTUAL_LOOP_NAME_LEN, ArraySubType = UnmanagedType.I1)]
            public char[] strName;
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = VZ_LPRC_VIRTUAL_LOOP_VERTEX_NUM)]
            public VZ_LPRC_VERTEX[] struVertex; //顶点数组
        }


        public const int VZ_LPRC_VIRTUAL_LOOP_MAX_NUM = 8;
        //虚拟线圈序列
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_LPRC_VIRTUAL_LOOPS
        {
            public uint uNumVirtualLoop;  //实际个数
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = VZ_LPRC_VIRTUAL_LOOP_MAX_NUM)]
            public VZ_LPRC_VIRTUAL_LOOP[] struLoop;
        }

        public const int VZ_LPRC_PROVINCE_STR_LEN = 128;

        //预设省份信息
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_LPRC_PROVINCE_INFO
        {
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = VZ_LPRC_PROVINCE_STR_LEN, ArraySubType = UnmanagedType.I1)]
            public char[] strProvinces; //所有支持的省份简称构成的字符串
            int nCurrIndex; //当前的预设省份的序号,在strProvinces中的,-1为未设置
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct TH_RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct TH_PlateResult
        {
            [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = System.Runtime.InteropServices.UnmanagedType.I1)]
            public char[] license;   // 车牌号码
            [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = System.Runtime.InteropServices.UnmanagedType.I1)]
            public char[] color;      // 车牌颜色
            public int nColor;      // 车牌颜色序号
            public int nType;     // 车牌类型
            public int nConfidence; // 车牌可信度
            public int nBright;   // 亮度评价
            public int nDirection;    // 运动方向,0 unknown, 1 left, 2 right, 3 up , 4 down    
            public TH_RECT rcLocation; //车牌位置
            public int nTime;          //识别所用时间
            public byte nCarBright;   //车的亮度
            public byte nCarColor;    //车的颜色
            [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 102, ArraySubType = System.Runtime.InteropServices.UnmanagedType.I1)]
            public char[] reserved;       // 保留
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct VzYUV420P
        {
            public IntPtr pY;
            public IntPtr pU;
            public IntPtr pV;
            int widthStepY;
            int widthStepU;
            int widthStepV;
            int width;
            int height;
        }

        //图像信息
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_LPRC_IMAGE_INFO
        {
            public uint uWidth;
            public uint uHeight;
            public uint uPitch;
            public uint uPixFmt;
            public IntPtr pBuffer;
        }

        //设备序列号
        [StructLayout(LayoutKind.Sequential)]
        public struct VZ_DEV_SERIAL_NUM
        {
            public uint uHi;
            public uint uLo;
        }

        //API
        /**
        *  @brief 全局初始化,在所有接口调用之前调用
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_Setup();

        /**
        *  @brief 全局释放
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_Cleanup();

        public delegate void VZLPRC_COMMON_NOTIFY_CALLBACK(int handle, IntPtr pUserData,
                                                 VZ_LPRC_COMMON_NOTIFY eNotify, string pStrDetail);

        /**
        *  @brief 设置设备连接反馈结果相关的回调函数
        *  @param  [IN] func 设备连接结果和状态,通过该回调函数返回
        *  @param [IN] pUserData 回调函数中的上下文
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VZLPRClient_SetCommonNotifyCallBack(VZLPRC_COMMON_NOTIFY_CALLBACK func, IntPtr pUserData);

        /**
        *  @brief 打开一个设备
        *  @param  [IN] pStrIP 设备的IP地址
        *  @param [IN] wPort 设备的端口号
        *  @param  [IN] pStrUserName 访问设备所需用户名
        *  @param [IN] pStrPassword 访问设备所需密码
        *  @return 返回设备的操作句柄,当打开失败时,返回-1
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_Open(string pStrIP, ushort wPort, string pStrUserName, string pStrPassword);

        /**
        *  @brief 关闭一个设备
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_Close(int handle);

        /**
        *  @brief 通过IP地址关闭一个设备
        *  @param  [IN] pStrIP 设备的IP地址
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_CloseByIP(string pStrIP);

        /**
        *  @brief 获取连接状态
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param[IN/OUT] pStatus 输入获取状态的变量地址,输出内容为 1已连上,0未连上
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_IsConnected(int handle, IntPtr pStatus);

        /**
        *  @brief 播放实时视频
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] hWnd 窗口的句柄
        *  @return 播放句柄,小于0表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_StartRealPlay(int handle, IntPtr hWnd);

        /**
        *  @brief 停止正在播放的窗口上的实时视频
        *  @param  [IN] hWnd 窗口的句柄
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_StopRealPlay(int hRealHandle);

        public delegate int VZLPRC_PLATE_INFO_CALLBACK(int handle, IntPtr pUserData,
                                            IntPtr pResult, uint uNumPlates,
                                            VZ_LPRC_RESULT_TYPE eResultType,
                                            IntPtr pImgFull,
                                            IntPtr pImgPlateClip);
        public delegate int VZLPRC_VIDEO_FRAME_CALLBACK(int handle, IntPtr pUserData,
                                                                                     IntPtr pFrame);
        /**
        *  @brief 设置实时图像数据的回调函数
        *  @param  [IN] handle        由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] func        实时图像数据函数
        *  @param  [IN] pUserData    回调函数中的上下文
        *  @return 0表示成功,-1表示失败
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int VzLPRClient_SetVideoFrameCallBack(int handle, IntPtr pFunc, IntPtr pUserData);

        /**
        *  @brief 设置识别结果的回调函数
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] func 识别结果回调函数
        *  @param  [IN] pUserData 回调函数中的上下文
        *  @param  [IN] bEnableImage 指定识别结果的回调是否需要包含截图信息:1为需要,0为不需要
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int VzLPRClient_SetPlateInfoCallBack(int handle, VZLPRC_PLATE_INFO_CALLBACK func, IntPtr pUserData, int bEnableImage);

        /**
        *  @brief 发送软件触发信号,强制处理当前时刻的数据并输出结果
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_ForceTrigger(int handle);

        /**
        *  @brief 设置虚拟线圈
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] pVirtualLoops 虚拟线圈的结构体指针
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_SetVirtualLoop(int handle, ref VZ_LPRC_VIRTUAL_LOOPS pVirtualLoops);

        /**
        *  @brief 获取已设置的虚拟线圈
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] pVirtualLoops 虚拟线圈的结构体指针
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_GetVirtualLoop(int handle, ref VZ_LPRC_VIRTUAL_LOOPS pVirtualLoops);

        /**
        *  @brief 获取已设置的预设省份
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] pProvInfo 预设省份信息指针
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_GetSupportedProvinces(int handle, ref VZ_LPRC_PROVINCE_INFO pProvInfo);

        /**
        *  @brief 设置预设省份
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] nIndex 设置预设省份的序号,序号需要参考VZ_LPRC_PROVINCE_INFO::strProvinces中的顺序,从0开始,如果小于0,则表示不设置预设省份
        *  @return 0表示成功,-1表示失败
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_PresetProvinceIndex(int handle, int nIndex);

        /**
        *  @brief 将图像保存为JPEG到指定路径
        *  @param  [IN] pImgInfo 图像结构体,目前只支持默认的格式,即ImageFormatRGB
        *  @param  [IN] pFullPathName 设带绝对路径和JPG后缀名的文件名字符串
        *  @param  [IN] nQuality JPEG压缩的质量,取值范围1~100;
        *  @return 0表示成功,-1表示失败
        *  @note   给定的文件名中的路径需要存在
        *  @ingroup group_global
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_ImageSaveToJpeg(IntPtr pImgInfo, string pFullPathName, int nQuality);


        /**
        *  @brief 读出设备序列号,可用于二次加密
        *  @param [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param [IN/OUT] pSN 用于存放读到的设备序列号,详见定义 VZ_DEV_SERIAL_NUM
        *  @return 返回值为0表示成功,返回-1表示失败
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_GetSerialNumber(int handle, IntPtr pSN);

        /**
        *  @brief 保存正在播放的视频的当前帧的截图到指定路径
        *  @param  [IN] nPlayHandle 播放的句柄
        *  @param  [IN] pFullPathName 设带绝对路径和JPG后缀名的文件名字符串
        *  @param  [IN] nQuality JPEG压缩的质量,取值范围1~100;
        *  @return 0表示成功,-1表示失败
        *  @note   使用的文件名中的路径需要存在
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_GetSnapShootToJpeg2(int nPlayHandle, string pFullPathName, int nQuality);

        /**
        *  @brief 通过该回调函数获得透明通道接收的数据
        *  @param  [IN] nSerialHandle VzLPRClient_SerialStart返回的句柄
        *  @param  [IN] pStrIPAddr    设备IP地址
        *  @param  [IN] usPort1        设备端口号
        *  @param  [IN] usPort2        预留
        *  @param  [IN] pUserData    回调函数上下文
        *  @ingroup group_global
        */
        public delegate int VZDEV_SERIAL_RECV_DATA_CALLBACK(int nSerialHandle, IntPtr pRecvData, int uRecvSize, IntPtr pUserData);

        /**
        *  @brief 开启透明通道
        *  @param  [IN] handle 由VzLPRClient_Open函数获得的句柄
        *  @param  [IN] nSerialPort 指定使用设备的串口序号:0表示第一个串口,1表示第二个串口
        *  @param  [IN] func 接收数据的回调函数
        *  @param  [IN] pUserData 接收数据回调函数的上下文
        *  @return 返回透明通道句柄,0表示失败
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_SerialStart(int handle, int nSerialPort, VZDEV_SERIAL_RECV_DATA_CALLBACK func, IntPtr pUserData);

        /**
        *  @brief 透明通道发送数据
        *  @param [IN] nSerialHandle 由VzLPRClient_SerialStart函数获得的句柄
        *  @param [IN] pData 将要传输的数据块的首地址
        *  @param [IN] uSizeData 将要传输的数据块的字节数
        *  @return 0表示成功,其他值表示失败
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_SerialSend(int nSerialHandle, IntPtr pData, int uSizeData);

        /**
        *  @brief 透明通道停止发送数据
        *  @param [IN] nSerialHandle 由VzLPRClient_SerialStart函数获得的句柄
        *  @return 0表示成功,其他值表示失败
        *  @ingroup group_device
        */
        [DllImport("iLPRSDK.dll")]
        public static extern int VzLPRClient_SerialStop(int nSerialHandle);
    }


http://www.ppmy.cn/news/786712.html

相关文章

unity shader视口空间到屏幕空间各坐标的取值范围

模型空间->世界空间->视口空间: 比较容易理解,就是用矩阵进行缩放旋转和平移 视口空间(右手坐标系)-> 齐次裁剪空间(左手坐标系): 下文中的n代表near,f代表far,fov代表FOV 设视口空间坐标点为V…

Matlab中空间直角坐标系中三维速度Vxyz转Ven平面速度

关于空间直角坐标系中三维速度Vxyz转Ven平面速度,需要完成连个步骤的工作:①空间直角坐标XYZ转为大地坐标BLH;② 三维速度Vxyz转Ven平面速度; 一、空间直角坐标XYZ转为大地坐标BLH 二、三维速度Vxyz转Ven平面速度 三、正式Matla…

rviz

rbx1 下载安装 一.安装 (1).克隆gmapping和amcl git clone https://github.com/ros-perception/slam_gmapping.git git clone https://github.com/ros-planning/navigation.git(2).rbx1 package 的下载 cd ~/catkin_ws/src git clone https://github.com/pirobot/rbx1.git cd…

Linux基础 | nc 网络命令,通过TCP和UDP在两台主机间建立连接传递消息、文件

nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 。 使用方式 我们可以这样来使用它: nc [-46…

计算机图形学基础:实验5 OpenGL二维几何变换

1.实验目的: 理解并掌握OpenGL二维平移、旋转、缩放变换的方法。 2.实验内容: 阅读实验原理,掌握OpenGL程序平移、旋转、缩放变换的方法。根据示范代码,完成实验作业。 3.实验原理&#xff1…

稳压二极管

一、 定义 稳压二极管,英文名称Zener diode,又叫齐纳二极管。利用PN结的反向击穿状态,其电流可在很大范围内变化而电压基本不变的现象,制成的起稳压作用的二极管。 此二极管是一种直到临界反向击穿电压前都具有很高电阻的半导体器…

[MATLAB调试笔记]时变循环诊断——[Vx(x)],[Vx(t),Vy(t),Vz(t)],[Ex(x)],[波];[Eng(t)],[Ex(k)],[Ex(x,t)],[logEx(x.t)]

静电诊断结果 电磁诊断结果 function kempo1main%*************伪随机数************%rng(default);rng(1);global flag_exitflag_exit0%*************读取参数************%prm Parameters%********renormalization*********%[prm,ren] renorm(prm);%-- initialization --[h…

【剑指offer】9. 旋转数组的最小数字(java)

文章目录 旋转数组的最小数字描述示例1示例2思路完整代码 旋转数组的最小数字 描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比…