123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using OpenCvSharp;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace PaddleOCRSharp.Led
- {
- public class LedIdentify
- {
- public LedIdentify()
- {
- oCRParameter.use_gpu = false;
- oCRParameter.cpu_math_library_num_threads = 10;//预测并发线程数
- oCRParameter.enable_mkldnn = true;//web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.
- oCRParameter.cls = false; //是否执行文字方向分类;默认false
- oCRParameter.det = false;//是否开启方向检测,用于检测识别180旋转
- oCRParameter.use_angle_cls = false;//是否开启方向检测,用于检测识别180旋转
- oCRParameter.det_db_score_mode = false;//是否使用多段线,即文字区域是用多段线还是用矩形,
- string root = System.IO.Path.GetDirectoryName(typeof(LedIdentify).Assembly.Location);
- string modelPathroot = root + @"\inference";
- config.det_infer = modelPathroot + @"\ch_PP-OCRv3_det_infer";
- config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer";
- config.rec_infer = modelPathroot + @"\ch_PP-OCRv3_rec_infer";
- config.keys = modelPathroot + @"\ppocr_keys.txt";
- }
- public string DetInfer { get => config.det_infer; set => config.det_infer = value; }
- public string ClsInfer { get => config.cls_infer; set => config.cls_infer = value; }
- public string RecInfer { get => config.rec_infer; set => config.rec_infer = value; }
- public string Keys { get => config.keys; set => config.keys = value; }
- private PaddleOCREngine engine;
- private OCRModelConfig config = new OCRModelConfig();
- private OCRParameter oCRParameter = new OCRParameter();
- public bool Cls { get=> oCRParameter.cls; set => oCRParameter.cls = value; }
- public bool Det { get => oCRParameter.det; set => oCRParameter.det = value; }
- public bool UseAngleCls { get => oCRParameter.use_angle_cls; set => oCRParameter.use_angle_cls = value; }
- public bool DetDbScoreMode { get => oCRParameter.det_db_score_mode; set => oCRParameter.det_db_score_mode = value; }
- public bool UseGpu { get => oCRParameter.use_gpu; set => oCRParameter.use_gpu = true; }
- public int CpuMathLibraryNumThreads { get => oCRParameter.cpu_math_library_num_threads; set => oCRParameter.cpu_math_library_num_threads = value; }
- public bool IsInit { get; private set; } = false;
- public int UserId { get; private set; } = -1;
- public bool IsLogin { get; private set; } = false;
- public string IP { get;private set; }
- public int Port { get; private set; }
- public string Username { get; private set; }
- public string Password { get; private set; }
- public string SerialNumber => System.Text.Encoding.Default.GetString(info.sSerialNumber).Trim('\0');
- public byte AlarmInPortNum=> info.byAlarmInPortNum;
- public byte AlarmOutPortNum=> info.byAlarmOutPortNum;
- public byte DiskNum=> info.byDiskNum;
- public byte DVRType=> info.byDVRType;
- public byte ChanNum=> info.byChanNum;
- public byte StartChan=> info.byStartChan;
- public byte AudioChanNum=> info.byAudioChanNum;
- public byte IPChanNum=> info.byIPChanNum;
- public byte ZeroChanNum=> info.byZeroChanNum;
- public byte MainProto=> info.byMainProto;
- public byte SubProto=> info.bySubProto;
- public byte Support=> info.bySupport;
- public byte Support1=> info.bySupport1;
- public byte Support2=> info.bySupport2;
- public ushort DevType=> info.wDevType;
- public byte Support3=> info.bySupport3;
- public byte MultiStreamProto=> info.byMultiStreamProto;
- public byte StartDChan=> info.byStartDChan;
- public byte StartDTalkChan=> info.byStartDTalkChan;
- public byte HighDChanNum=> info.byHighDChanNum;
- public byte LanguageType=> info.byLanguageType;
- public byte Support4=> info.bySupport4;
- public ushort PicQuality { get => jpg.wPicQuality; set => jpg.wPicQuality = value; }
- public ushort PicSize { get=> jpg.wPicSize; set => jpg.wPicSize = value; }
- public bool IsOCRInit { get; private set; } = false;
- private QuickNV.HikvisionNetSDK.Defines.NET_DVR_JPEGPARA jpg = new QuickNV.HikvisionNetSDK.Defines.NET_DVR_JPEGPARA();
- private byte[] jpgdata = new byte[1024 * 1024 * 10];
- private QuickNV.HikvisionNetSDK.Defines.NET_DVR_DEVICEINFO_V30 info = new QuickNV.HikvisionNetSDK.Defines.NET_DVR_DEVICEINFO_V30();
- public void InitHikvision()
- {
- if (IsInit) return;
- IsInit = QuickNV.HikvisionNetSDK.Methods.NET_DVR_Init();
- }
- public void InitOCR()
- {
- if (IsOCRInit) return;
- engine = new PaddleOCREngine(config, oCRParameter);
- IsOCRInit = true;
- }
- public void Login(string ip="192.168.2.65",int port = 8000,string username="admin",string password="l147258369")
- {
- if (IsLogin) return;
- IP = ip;
- Port = port;
- Username = username;
- Password = password;
- info = new QuickNV.HikvisionNetSDK.Defines.NET_DVR_DEVICEINFO_V30();
- UserId = QuickNV.HikvisionNetSDK.Methods.NET_DVR_Login_V30(IP, Port, Username, Password, ref info);
- IsLogin = UserId == 0;
- }
- public Mat NET_DVR_CaptureJPEGPicture_NEW(int channel=1)
- {
- if (!IsLogin) return new Mat();
- uint picsize = 0;
- QuickNV.HikvisionNetSDK.Methods.NET_DVR_CaptureJPEGPicture_NEW(UserId, channel, ref jpg, jpgdata, (uint)jpgdata.Length, ref picsize);
- if (picsize == 0) return new Mat();
- byte[] result = new byte[picsize];
- Array.Copy(jpgdata, result, (int)picsize);
- return Mat.FromImageData(result);
- }
- public void Logout()
- {
- if (!IsLogin) return;
- QuickNV.HikvisionNetSDK.Methods.NET_DVR_Logout(UserId);
- IsLogin = false;
- }
- public OCRResult DetectText(byte[] datas)
- {
- if (!IsOCRInit || engine == null) return new OCRResult();
- return engine.DetectText(datas);
- }
- public unsafe byte[] GetColos(Mat mat)
- {
- Mat rgb = mat.CvtColor(ColorConversionCodes.BGR2RGB);
- var result = new Span<byte>(rgb.Data.ToPointer(), rgb.Width * rgb.Height * rgb.Channels()).ToArray();
- rgb.Dispose();
- return result;
- }
- public OCRResult DetectText(Mat mat)
- {
- if (!IsOCRInit || engine == null) return new OCRResult();
- return engine.DetectText(mat.ToBytes());
- }
- public void DisposeOCR()
- {
- if (!IsOCRInit) return;
- engine?.Dispose();
- IsOCRInit = false;
- }
- public void Cleanup()
- {
- if (!IsInit) return;
- QuickNV.HikvisionNetSDK.Methods.NET_DVR_Cleanup();
- IsInit = false;
- }
- }
- }
|