首页 > 编程语言 >C# OCR图片文字识别

C# OCR图片文字识别

时间:2023-12-16 17:00:33浏览次数:35  
标签:oCRParameter 识别 C# Text openFileDialog1 PaddleOCRSharp OCR

博主这里采用了两种库进行文字识别,一种是“Spire.OCR”,另一种是“PaddleOCRSharp”,这两种库,都可以直接到Nuget中去安装。

 

这里要注意一下,PaddleOCRSharp库是可以直接安装使用的,但是Spire.OCR库在安装后,需要将下载目录“nuget\packages\spire.ocr\1.8.0\runtimes\win-x64\native”中的所有文件都拷贝到exe执行目录下才行,否则将无法正常使用。 在单个字符的识别效果中:PaddleOCRSharp的准确率会比Spire.OCR来的高。

 

准备一张测试图片:

 

演示效果如下:

 

Form1.cs工程源码如下:
C# using PaddleOCRSharp;
using Spire.OCR;

namespace WinFormsApp
{
    public partial class Form1 : Form
    {
        public PaddleOCREngine engine;
        public Form1()
        {
            InitializeComponent();
            engine = CreateOCRParameter();// 这个只能引用一次,否则会出现内存一直增加的问题
        }

        #region SpireOCR
        private void SpireOCR_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            this.openFileDialog1.FileName = "";
            this.openFileDialog1.Filter = "所有文件(*.*)|*.*";
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                OcrScanner scanner = new OcrScanner();
                scanner.Scan(this.openFileDialog1.FileName);
                scanner.Dispose();
                textBox1.Text = "SpireOCR识别结果:\r\n" + scanner.Text.ToString().Split("Evaluation")[0];
            }
        }
        #endregion

        #region PaddleOCRSharp
        public PaddleOCREngine CreateOCRParameter()
        {
            OCRParameter oCRParameter = new OCRParameter();
            oCRParameter.numThread = 6;//预测并发线程数
            oCRParameter.Enable_mkldnn = 1;//web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.
            oCRParameter.cls = 1; //是否执行文字方向分类;默认false
            oCRParameter.det = 1;//是否开启方向检测,用于检测识别180旋转
            oCRParameter.use_angle_cls = 1;//是否开启方向检测,用于检测识别180旋转
            oCRParameter.det_db_score_mode = 1;//是否使用多段线,即文字区域是用多段线还是用矩形,
            oCRParameter.UnClipRatio = 8.6f;
            oCRParameter.MaxSideLen = 960;
            OCRModelConfig config = null;
            PaddleOCREngine engine = new PaddleOCREngine(config, oCRParameter);
            return engine;
        }

        private void PaddleOCRSharp_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            this.openFileDialog1.FileName = "";
            this.openFileDialog1.Filter = "所有文件(*.*)|*.*";
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                OCRResult ocrResult = engine.DetectText(this.openFileDialog1.FileName);
                textBox1.Text = "PaddleOCRSharp识别结果:\r\n" + ocrResult.Text;
            }
        }
        #endregion
    }
}
注意:使用SpireOCR时要取消目标平台【首选32位】的勾选,否则会报错。

 

转载自:C# OCR图片文字识别 小宅博客网 (bilibili996.com)

标签:oCRParameter,识别,C#,Text,openFileDialog1,PaddleOCRSharp,OCR
From: https://www.cnblogs.com/xuexz/p/17905030.html

相关文章

  • Excel-数据透视图
    1.建立点选表格内任一存储格--插入--数据透视表--可选范围和位置勾选想要显示的栏位标题--拖拽标题至不同位置会在数据透视表发生相应变化2.排序点选数据透视表內任意一格--右键--排序3.筛选现有列筛选:右侧三角(清除--选单内下拉)筛选器筛选:勾选筛选项拖拽至筛选器内4.查......
  • Failed to convert property value of type 'java.lang.String' to required type 'ja
    后端springboot项目使用getMapper接受,字段写了转换注解@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")还报错Failedtoconvertpropertyvalueoftype'java.lang.String'torequiredtype'java......
  • SCUCTF2023-WEB部分wp
    川大新生赛,出的确实有点水平的,通过一些渠道看了看题打了一些,有些地方还是值得学习学习的。不鸽了,先写点吧。因为他们是校园网访问,所以我这边也只能通过一些其他的方法去打,没截图....有附件能复现的尽量复现一下。主要看的是【Web】SCU新生赛个人wp及完赛感想-CSDN博客这篇blog......
  • C++ Qt开发:Tab与Tree组件实现分页菜单
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍tabWidget选择夹组件与TreeWidget树形选择组件,的常用方法及灵活运用。1.1TabWidgetQTabWidget......
  • 【Nacos】启动报错 failed to req API:/nacos/v1/ns/instance after all servers([xxx
    1  com.alibaba.nacos.api.exception.NacosException:failedtoreqAPI:/nacos/v1/ns/instanceafterallservers([xxx])tried:ErrCode:403,ErrMsg:<html><body><h1>Whitelab#我的配置spring.application.name=virtuous-base-servicespring.profiles.......
  • 解锁RocketMQ秘籍:如何保障消息顺序性?
    嗨,小伙伴们!小米在这里啦!今天我们要聊的话题是社招面试中一个经典而又百思不得其解的问题——“RocketMQ如何保证顺序性?”不用担心,小米来给你揭秘RocketMQ的秘密武器,让你轻松过关面试大关!引言:为什么要谈顺序性?首先,我们得明白为什么在消息队列中要讲究消息的顺序性。假设你正在开发一......
  • Linux配置DHCP服务
    一、DHCP简介DHCP(动态主机配置协议,Dynamic Host Configuration Protocol)是一种网络管理协议,主要用于简化IP地址的分配和管理。它在局域网中广泛应用,旨在为内部网络主机自动分配IP地址,以及为网络管理员提供集中管理手段。DHCP的主要作用和优点:集中管理:DHCP允许网络管理员集中......
  • 大华摄像头应用opencvsharp进行实时监控、监控录像保存和播放
    1.配置大华摄像机参数 检查RTSP端口号 修改分辨率,在这里我们主要设置【辅码流】大华RTSP协议解释访问主码流rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0访问辅码流rtsp://admin:[email protected]:554/cam/realmonitor?cha......
  • SP10050 POWTOW - Power Tower City 题解
    题目传送门前置知识扩展欧拉定理解法本题幂塔是有限层的,这里与luoguP4139上帝与集合的正确用法中的无限层幂塔不同,故需要在到达递归边界\(n+1\)时进行特殊处理,对于处理\(\varphi(p)\)在递归过程中等于\(1\)的情况两题基本一致。回忆扩展欧拉定理中的\(b\)和\(\v......
  • [AGC020D] Min Max Repetition
    牛子题优先满足第二个条件,长度是\(\lceil\frac{max(A,B)}{min(A,B)+1}\rceil\),那么现在要满足字典序最小,发现先填\(A..ABA..ABA..AB..\),中途可能\(B>>A\)就填不满,就要改变策略,变成\(B..BAB..BA...\)这样子的,但是注意可能\(B\)有余数,那我肯定优先把有余数个\(B\),这......