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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值