百度驾驶证C++离线SDK V1.1 C#接入

百度驾驶证C++离线SDK V1.1 C#接入

目录

说明

效果

项目

代码

下载


说明

自己根据SDK封装了动态库,然后C#调用。

SDK包结构

效果

项目

代码

using Newtonsoft.Json;

using OpenCvSharp;

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Drawing;

using System.IO;

using System.Windows.Forms;

using 驾驶证测试.Commom;

namespace 驾驶证测试

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";

string image_path = "";

bool isDraw = false;

private void Form1_Load(object sender, EventArgs e)

{

image_path = Application.StartupPath + "\\front_images\\1.png";

pictureBox1.Image = new Bitmap(image_path);

}

private void button4_Click(object sender, EventArgs e)

{

image_path = Application.StartupPath + "\\front_images\\1.png";

Mat image = new Mat(image_path);

pictureBox1.Image = new Bitmap(image_path);

}

private void button5_Click(object sender, EventArgs e)

{

image_path = Application.StartupPath + "\\back_images\\1.png";

pictureBox1.Image = new Bitmap(image_path);

}

private void button2_Click(object sender, EventArgs e)

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = fileFilter;

if (ofd.ShowDialog() != DialogResult.OK) return;

pictureBox1.Image = null;

image_path = ofd.FileName;

pictureBox1.Image = new Bitmap(image_path);

textBox1.Text = "";

}

private void button1_Click(object sender, EventArgs e)

{

if (image_path == "")

{

return;

}

textBox1.Text = "";

Application.DoEvents();

string ocr_result1 = "";

string ocr_result2 = "";

Mat image = new Mat(image_path);

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

int res = DL_OCR_Helper.dl_front_ocr2(image, out ocr_result1, out ocr_result2);

stopwatch.Stop();

double totalTime = stopwatch.Elapsed.TotalSeconds;

textBox1.Text += $"耗时: {totalTime:F2}s";

textBox1.Text += "\r\n-------------------\r\n";

if (res == 0)

{

Object jsonObject = JsonConvert.DeserializeObject(ocr_result1.ToString());

textBox1.Text += JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);

textBox1.Text += "\r\n-------------------\r\n";

Object jsonObject2 = JsonConvert.DeserializeObject(ocr_result2.ToString());

textBox1.Text += JsonConvert.SerializeObject(jsonObject2, Newtonsoft.Json.Formatting.Indented);

List<OcrRes2> lt = JsonConvert.DeserializeObject<List<OcrRes2>>(ocr_result2.ToString());

foreach (OcrRes2 item in lt)

{

string\[\] pts = item.coordinator.Split(' ');

//多边形的顶点

OpenCvSharp.Point\[\] points = new OpenCvSharp.Point\[\]

{

new OpenCvSharp.Point(Convert.ToDouble( pts0), Convert.ToDouble( pts1)),

new OpenCvSharp.Point(Convert.ToDouble( pts2), Convert.ToDouble( pts3)),

new OpenCvSharp.Point(Convert.ToDouble( pts4), Convert.ToDouble( pts5)),

new OpenCvSharp.Point(Convert.ToDouble( pts6), Convert.ToDouble( pts7)),

};

// 绘制多边形

if (isDraw)

{

Cv2.Polylines(image, new OpenCvSharp.Point\[\]\[\] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);

}

}

if (pictureBox1.Image != null)

{

pictureBox1.Image.Dispose();

pictureBox1.Image = null;

}

pictureBox1.Image = new Bitmap(image.ToMemoryStream());

image.Dispose();

}

else

{

textBox1.Text = "识别失败";

}

}

private void button3_Click(object sender, EventArgs e)

{

if (image_path == "")

{

return;

}

textBox1.Text = "";

Mat image = new Mat(image_path);

Application.DoEvents();

string ocr_result1 = "";

string ocr_result2 = "";

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

int res = DL_OCR_Helper.dl_back_ocr2(image, out ocr_result1, out ocr_result2);

stopwatch.Stop();

double totalTime = stopwatch.Elapsed.TotalSeconds;

textBox1.Text += $"耗时: {totalTime:F2}s";

textBox1.Text += "\r\n-------------------\r\n";

if (res == 0)

{

Object jsonObject = JsonConvert.DeserializeObject(ocr_result1.ToString());

textBox1.Text += JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);

textBox1.Text += "\r\n-------------------\r\n";

Object jsonObject2 = JsonConvert.DeserializeObject(ocr_result2.ToString());

textBox1.Text += JsonConvert.SerializeObject(jsonObject2, Newtonsoft.Json.Formatting.Indented);

List<OcrRes2> lt = JsonConvert.DeserializeObject<List<OcrRes2>>(ocr_result2.ToString());

foreach (OcrRes2 item in lt)

{

string\[\] pts = item.coordinator.Split(' ');

//多边形的顶点

OpenCvSharp.Point\[\] points = new OpenCvSharp.Point\[\]

{

new OpenCvSharp.Point(Convert.ToDouble( pts0), Convert.ToDouble( pts1)),

new OpenCvSharp.Point(Convert.ToDouble( pts2), Convert.ToDouble( pts3)),

new OpenCvSharp.Point(Convert.ToDouble( pts4), Convert.ToDouble( pts5)),

new OpenCvSharp.Point(Convert.ToDouble( pts6), Convert.ToDouble( pts7)),

};

// 绘制多边形

if (isDraw)

{

Cv2.Polylines(image, new OpenCvSharp.Point\[\]\[\] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);

}

}

if (pictureBox1.Image != null)

{

pictureBox1.Image.Dispose();

pictureBox1.Image = null;

}

pictureBox1.Image = new Bitmap(image.ToMemoryStream());

image.Dispose();

}

else

{

textBox1.Text = "识别失败";

}

}

private void button6_Click(object sender, EventArgs e)

{

DL_OCR_Helper.InitStatus();

//授权校验 初始化引擎

string key = "";

string licenseKeyPath = Application.StartupPath + "\\license\\license.key";

string licenseFile = Application.StartupPath + "\\license\\license.ini";

int res = -1;

string ini_path = "";

key = File.ReadAllText(licenseKeyPath);

res = DL_OCR_Helper.dl_front_init_license(key, licenseFile, false);

if (res != 0)

{

MessageBox.Show(DL_OCR_Helper.GetMsg(res));

return;

}

res = DL_OCR_Helper.dl_front_create();

if (res != 0)

{

MessageBox.Show("驾驶证正页创建引擎失败!");

return;

}

ini_path = Application.StartupPath + "\\front_resource";

res = DL_OCR_Helper.dl_front_init(ini_path);

if (res != 0)

{

MessageBox.Show(DL_OCR_Helper.GetMsg(res));

return;

}

res = DL_OCR_Helper.dl_back_init_license(key, licenseFile, false);

if (res != 0)

{

MessageBox.Show(DL_OCR_Helper.GetMsg(res));

return;

}

res = DL_OCR_Helper.dl_back_create();

if (res != 0)

{

MessageBox.Show("驾驶证副页创建引擎失败!");

return;

}

ini_path = Application.StartupPath + "\\back_resource";

res = DL_OCR_Helper.dl_back_init(ini_path);

if (res != 0)

{

MessageBox.Show(DL_OCR_Helper.GetMsg(res));

return;

}

MessageBox.Show("初始化成功!");

button1.Enabled = true;

button3.Enabled = true;

}

}

}

复制代码
using Newtonsoft.Json;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using 驾驶证测试.Commom;

namespace 驾驶证测试
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string image_path = "";
        bool isDraw = false;

        private void Form1_Load(object sender, EventArgs e)
        {
            image_path = Application.StartupPath + "\\front_images\\1.png";
            pictureBox1.Image = new Bitmap(image_path);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            image_path = Application.StartupPath + "\\front_images\\1.png";

            Mat image = new Mat(image_path);

            pictureBox1.Image = new Bitmap(image_path);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            image_path = Application.StartupPath + "\\back_images\\1.png";
            pictureBox1.Image = new Bitmap(image_path);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;
            pictureBox1.Image = null;
            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            textBox1.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }

            textBox1.Text = "";
            Application.DoEvents();

            string ocr_result1 = "";
            string ocr_result2 = "";
            Mat image = new Mat(image_path);
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            int res = DL_OCR_Helper.dl_front_ocr2(image, out ocr_result1, out ocr_result2);
            stopwatch.Stop();
            double totalTime = stopwatch.Elapsed.TotalSeconds;
            textBox1.Text += $"耗时: {totalTime:F2}s";
            textBox1.Text += "\r\n-------------------\r\n";

            if (res == 0)
            {
                Object jsonObject = JsonConvert.DeserializeObject(ocr_result1.ToString());
                textBox1.Text += JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);

                textBox1.Text += "\r\n-------------------\r\n";

                Object jsonObject2 = JsonConvert.DeserializeObject(ocr_result2.ToString());
                textBox1.Text += JsonConvert.SerializeObject(jsonObject2, Newtonsoft.Json.Formatting.Indented);

                List<OcrRes2> lt = JsonConvert.DeserializeObject<List<OcrRes2>>(ocr_result2.ToString());

                foreach (OcrRes2 item in lt)
                {
                    string[] pts = item.coordinator.Split(' ');

                    //多边形的顶点
                    OpenCvSharp.Point[] points = new OpenCvSharp.Point[]
                    {
                        new OpenCvSharp.Point(Convert.ToDouble( pts[0]), Convert.ToDouble( pts[1])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[2]), Convert.ToDouble( pts[3])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[4]), Convert.ToDouble( pts[5])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[6]), Convert.ToDouble( pts[7])),
                    };

                    // 绘制多边形
                    if (isDraw)
                    {
                        Cv2.Polylines(image, new OpenCvSharp.Point[][] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);

                    }
                }
                if (pictureBox1.Image != null)
                {
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = null;
                }

                pictureBox1.Image = new Bitmap(image.ToMemoryStream());
                image.Dispose();
            }
            else
            {
                textBox1.Text = "识别失败";
            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }

            textBox1.Text = "";
            Mat image = new Mat(image_path);
            Application.DoEvents();
            string ocr_result1 = "";
            string ocr_result2 = "";
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            int res = DL_OCR_Helper.dl_back_ocr2(image, out ocr_result1, out ocr_result2);
            stopwatch.Stop();
            double totalTime = stopwatch.Elapsed.TotalSeconds;
            textBox1.Text += $"耗时: {totalTime:F2}s";
            textBox1.Text += "\r\n-------------------\r\n";
            if (res == 0)
            {
                Object jsonObject = JsonConvert.DeserializeObject(ocr_result1.ToString());
                textBox1.Text += JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);

                textBox1.Text += "\r\n-------------------\r\n";

                Object jsonObject2 = JsonConvert.DeserializeObject(ocr_result2.ToString());
                textBox1.Text += JsonConvert.SerializeObject(jsonObject2, Newtonsoft.Json.Formatting.Indented);

                List<OcrRes2> lt = JsonConvert.DeserializeObject<List<OcrRes2>>(ocr_result2.ToString());

                foreach (OcrRes2 item in lt)
                {

                    string[] pts = item.coordinator.Split(' ');

                    //多边形的顶点
                    OpenCvSharp.Point[] points = new OpenCvSharp.Point[]
                    {
                        new OpenCvSharp.Point(Convert.ToDouble( pts[0]), Convert.ToDouble( pts[1])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[2]), Convert.ToDouble( pts[3])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[4]), Convert.ToDouble( pts[5])),
                        new OpenCvSharp.Point(Convert.ToDouble( pts[6]), Convert.ToDouble( pts[7])),
                    };

                    // 绘制多边形
                    if (isDraw)
                    {
                        Cv2.Polylines(image, new OpenCvSharp.Point[][] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);
                    }
                }
                if (pictureBox1.Image != null)
                {
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = null;
                }
                pictureBox1.Image = new Bitmap(image.ToMemoryStream());
                image.Dispose();
            }
            else
            {
                textBox1.Text = "识别失败";
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            DL_OCR_Helper.InitStatus();

            //授权校验 初始化引擎
            string key = "";
            string licenseKeyPath = Application.StartupPath + "\\license\\license.key";
            string licenseFile = Application.StartupPath + "\\license\\license.ini";
            int res = -1;
            string ini_path = "";

            key = File.ReadAllText(licenseKeyPath);

            res = DL_OCR_Helper.dl_front_init_license(key, licenseFile, false);
            if (res != 0)
            {
                MessageBox.Show(DL_OCR_Helper.GetMsg(res));
                return;
            }

            res = DL_OCR_Helper.dl_front_create();
            if (res != 0)
            {
                MessageBox.Show("驾驶证正页创建引擎失败!");
                return;
            }

            ini_path = Application.StartupPath + "\\front_resource";
            res = DL_OCR_Helper.dl_front_init(ini_path);
            if (res != 0)
            {
                MessageBox.Show(DL_OCR_Helper.GetMsg(res));
                return;
            }

            res = DL_OCR_Helper.dl_back_init_license(key, licenseFile, false);
            if (res != 0)
            {
                MessageBox.Show(DL_OCR_Helper.GetMsg(res));
                return;
            }

            res = DL_OCR_Helper.dl_back_create();
            if (res != 0)
            {
                MessageBox.Show("驾驶证副页创建引擎失败!");
                return;
            }

            ini_path = Application.StartupPath + "\\back_resource";
            res = DL_OCR_Helper.dl_back_init(ini_path);
            if (res != 0)
            {
                MessageBox.Show(DL_OCR_Helper.GetMsg(res));
                return;
            }
            MessageBox.Show("初始化成功!");
            button1.Enabled = true;
            button3.Enabled = true;
        }
    }
}

下载

C++封装源码下载

C#调用源码下载

SDK下载

相关推荐
sm_926787055 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
by209995 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
kimloner5 小时前
开源一个 376KB 的 Windows 桌面小工具:便签 + 截图标注 + OCR + 待办提醒(C# / WinForms)
windows·开源·c#·ocr·winforms
colinu5 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++
wuminyu6 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan6 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
阿松爱学习6 小时前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
liulilittle6 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
半亩码田6 小时前
C#转Python第4.8篇:正则表达式:Python re 模块 vs C# System.Text.RegularExpressions
python·正则表达式·c#
FPGA小徐7 小时前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#