【算法介绍】
ddddocr是一个强大的Python OCR(光学字符识别)库,特别适用于验证码识别。它利用深度学习技术,如卷积神经网络(CNN)和循环神经网络(RNN),对图像中的文字进行高效准确的识别。虽然ddddocr本身是一个Python库,但你可以通过一些方法将其功能集成到Winform应用程序中,以进行验证码识别、文字识别和文字检测。
要在Winform中部署ddddocr的ONNX模型进行验证码识别等任务,你可以考虑以下步骤:
- 环境准备:确保你的Winform应用程序可以调用Python脚本或库。这通常涉及安装Python解释器和相关的Python库。
- 安装ddddocr:在你的Python环境中安装ddddocr库。
- 模型准备:如果ddddocr使用了ONNX模型,确保该模型已正确下载并可在Python环境中加载。
- 集成Python和Winform:你可以通过C#的Python.NET库或其他类似工具来调用Python脚本或函数,从而在Winform中集成ddddocr的功能。
- 编写代码:在Winform应用程序中编写代码,调用ddddocr的API进行验证码识别、文字识别或文字检测。
- 测试和调试:确保集成的功能正常工作,并根据需要进行调整和优化。
请注意,由于ddddocr是一个Python库,直接在Winform中部署其ONNX模型可能需要一些额外的工作。因此,建议详细阅读ddddocr的文档,并考虑使用Python和C#之间的桥梁工具来实现集成。
【源码地址】
github.com/sml2h3/ddddocr
【界面设计】
【项目编号】mbd.pub/o/bread/mbd-Z5yZm59r
【效果展示】
文本识别结果可以在控制台查看
滑块识别目前效果不佳,暂时放弃研究,因为我们主要用于文字检测识别比较多。
【调用代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
namespace FIRC
{
public partial class Form1 : Form
{
string videoPath = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Mat ocr = new Mat(Application.StartupPath + "\\images\\ocr.jpg", ImreadModes.AnyColor);
DDDDOCR ddddOcrOcrOld = new DDDDOCR(Application.StartupPath + "\\weights\\common_old.onnx", DdddOcrMode.ClassifyOld);
var OcrOldResult = ddddOcrOcrOld.Classify(ocr.ToBytes());
Console.WriteLine("旧版本文本识别结果:" + OcrOldResult);
}
private void button2_Click(object sender, EventArgs e)
{
Mat ocr = new Mat(Application.StartupPath + "\\images\\ocr.jpg", ImreadModes.AnyColor);
DDDDOCR ddddOcrOcrNew = new DDDDOCR(Application.StartupPath + "\\weights\\common.onnx", DdddOcrMode.ClassifyBeta);
var OcrNewResult = ddddOcrOcrNew.Classify(ocr.ToBytes());
Console.WriteLine("新版本文本识别结果:" + OcrNewResult);
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
Mat det = new Mat(Application.StartupPath + "\\images\\det.png", ImreadModes.AnyColor);
DDDDOCR ddddOcrDet = new DDDDOCR(Application.StartupPath + "\\weights\\common_det.onnx", DdddOcrMode.Detect);
var Detresult = ddddOcrDet.Detect(det.ToBytes());
foreach (var item in Detresult)
{
det.Rectangle(item, new Scalar(0, 0, 255), 2);
}
Console.WriteLine("目标识别到的坐标为:" + JsonSerializer.Serialize(Detresult));
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(det);
}
private void button4_Click(object sender, EventArgs e)
{
//效果不佳,暂时不开发
Mat tg = new Mat(Application.StartupPath + "\\images\\tg1.png", ImreadModes.AnyColor);
Mat bg = new Mat(Application.StartupPath + "\\images\\bg1.png", ImreadModes.AnyColor);
var (target_y, rect) = DDDDOCR.SlideMatch(tg, bg, 44, true);
Console.WriteLine("SlideMatch滑块的Y坐标为:" + target_y + "\r\nSlideMatch滑块缺口方框为:" + JsonSerializer.Serialize<Rect>(rect));
bg.Rectangle(rect, new Scalar(0, 255, 255), 2);
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(bg);
}
}
}
【测试环境】
vs2019
netframework4.7.2
opencvsharp==4.8.0
onnxruntime==1.16.3
【运行步骤】
下载源码后使用vs2019打开,打开前确保vs安装的没问题并且C#模块安装好了。选择x64 debug即可直接运行看效果。如果报错可能DLL引用问题,可以参考我的其他博文。