• 车牌识别C#项目源代码


    车牌识别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);
        }

  • 相关阅读:
    基于SSM的固定资产管理系统的设计与实现
    老卫带你学---leetcode刷题(39. 组合总和)
    Go HTTP 调用(下)
    JAVA生成RSA公私钥对代码记录
    cesium 雷达扫描 (扫描线)
    【MACOS(M1)编译Risc-v版OpenOCD】
    NLP领域可以投稿的期刊(2022整理)
    ElementUI之增删改及表单验证
    软件测试面试题:请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量?
    GBase8s数据库SET COLLATION 语句
  • 原文地址:https://blog.csdn.net/xdpcxq/article/details/128188042