C#使用Tesseract

2023-11-05

C#使用Tesseract

前言

上篇文章讲述了 Tesseract-orc的安装和使用,这片文章讲一讲在net平台上面如何使用 Tesseract-orc 没有那么复杂的安装教程。

我在使用的时间还是基于Framework ,在网上下载了好多dll文件,浪费我的cdsn积分,最后还是没有成功,最终自己摸索到方法了。
在这里插入图片描述

什么是tesseract?

Tesseract 最初由惠普实验室支持,用于电子版文字识别,1996年被移植到Windows上,1998年进行了C++化,在2005年Tesseract由惠普公司宣布开源。 2006年到现在,由Google公司维护开发。

Net5中的使用

在’Netget’包中直接引用Tesseract,就会生成leptonica-1.80.0.dll'tesseract41.dll

一般项目适合orc一起使用的

在这里插入图片描述
问题:

解决办法
安装运行时Emgu.CV.runtime.windows

han
主要依靠 直接返回文字。

 //调用tesseract实现OCR识别
        public static string ImageToText(string imgPath)
        {
            using (var engine = new TesseractEngine("tessdata", "chi_sim", EngineMode.Default))
            {
                using (var img = Pix.LoadFromFile(imgPath))
                {
                    using (var page = engine.Process(img))
                    {
                        return page.GetText();
                    }
                }
            }
        }

完整代码:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog of = new OpenFileDialog();
            of.Title = "请选择图片";
            if (of.ShowDialog() == DialogResult.OK)
            {
                string file = of.FileName;
                Image img = Image.FromFile(file);
                pictureBox1.Image = img;
            }
            Bitmap bitmap = (Bitmap)this.pictureBox1.Image;
            var path = $"{ DateTime.Now.ToString("yyyyMM")}.jpg";
            bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
           
            Image<Bgr, Byte> imageSource = new Image<Bgr, byte>(path);
            Image<Gray, Byte> imageGrayscale = imageSource.Convert<Gray, Byte>();
            imageGrayscale = randon(imageGrayscale);
            imageThreshold = imageGrayscale.ThresholdBinary(new Gray(100), new Gray(255));
            this.pictureBox2.Image = imageThreshold.ToBitmap();
            this.pictureBox2.Image.Save(path);
            //识别照片
            this.label1.Text = ImageToText(path);

        }
        Image<Gray, Byte> imageThreshold;


        //调用tesseract实现OCR识别
        public static string ImageToText(string imgPath)
        {
            using (var engine = new TesseractEngine("tessdata", "chi_sim", EngineMode.Default))
            {
                using (var img = Pix.LoadFromFile(imgPath))
                {
                    using (var page = engine.Process(img))
                    {
                        return page.GetText();
                    }
                }
            }
        }


        /// <summary>
        /// 旋转校正
        /// </summary>
        /// <param name="imageInput"></param>
        /// <returns></returns>
        private Image<Gray, Byte> randon(Image<Gray, Byte> imageInput)//图像投影旋转法倾斜校正子函数定义
        {
            int nwidth = imageInput.Width;
            int nheight = imageInput.Height;
            int sum;
            int SumOfCha;
            int SumOfChatemp = 0;
            int[] sumhang = new int[nheight];
            Image<Gray, Byte> resultImage = imageInput;
            Image<Gray, Byte> ImrotaImage;
            //20度范围内的调整
            for (int ang = -20; ang < 20; ang = ang + 1)
            {
                ImrotaImage = imageInput.Rotate(ang, new Gray(1));
                for (int i = 0; i < nheight; i++)
                {
                    sum = 0;
                    for (int j = 0; j < nwidth; j++)
                    {
                        sum += ImrotaImage.Data[i, j, 0];
                    }
                    sumhang[i] = sum;
                }
                SumOfCha = 0;
                for (int k = 0; k < nheight - 1; k++)
                {
                    SumOfCha = SumOfCha + (Math.Abs(sumhang[k] - sumhang[k + 1]));
                }
                if (SumOfCha > SumOfChatemp)
                {
                    resultImage = ImrotaImage;
                    SumOfChatemp = SumOfCha;
                }
            }
            return resultImage;
        }




    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#使用Tesseract 的相关文章

  • C++ 智能指针

    一 智能指针特点 智能指针封装了裸指针 内部还是裸指针的调用 智能指针使用RAII特点 将对象生命周期使用栈来管理 智能指针区分了所有权 因此使用责任更为清晰 智能指针大量使用操作符重载和函数内联特点 调用成本和裸指针无差别 二 原子操作
  • ARM汇编.global .extern 和.text

    在ARM汇编中 常搞不清 global和 extern的区别 下面就简要阐述一下这两个的区别 1 gt global global关键字用来让一个符号对链接器可见 可以供其他链接对象模块使用 global start 让 start符号成为
  • 成功解决“谷歌浏览器打开是毒霸网址大全”问题,亲测有效(同样适用被hao123,或者2345浏览器篡改)

    最开始一定要把电脑安装的360和电脑管家之类的退出 第一步 发现问题的存在 在谷歌网址中输入 chrome version 再按enter键 如果返回如图 那说明你的谷歌被hao123浏览器篡改了 如果你返回的蓝色部分是www duba等字
  • python做兼职收入_创业点子 小哥用Python兼职月入过万,用Python做项目有多挣钱?...

    今天我想和大家分享一些Python项目两个主兼职工作 老板想说 无论你是自学或者参加培训班 只要你学好Python 钱自然会来 问题 兼职工作和Python可以用来赚钱吗 1兼职费用够杂项费用 生活费用 在学校我碰巧接管一些外包 嗯 足够的
  • 自定义MVC框架优化

    目录 一 前言 二 优化问题 1 子控制器的初始化配置问题 2 页面跳转优化代码冗余问题 3 优化参数封装问题 三 进行优化 1 解决子控制器初始化配置 2 解决页面跳转的代码冗余问题 3 解决优化参数封装问题 4 中央控制器 一 前言 在
  • 爬下artstation关注的画师信息制作为json文件

    原始网站 https www artstation com Author xiaozhu sai 本文章仅供学习交流 请勿交流梯子以及版权问题 1 爬取数据目的 后续处理 方便后续对各个画师作品的个人下载 个人练习 用户关注 的推荐算法与其
  • kali Linux笔记

    第一章 kali Linux简介 1 Linux操作系统的基础知识 Linux 的起源和发展 了解 Linux 操作系统的起源 发展和主要的发行版 如Linux 内核的诞生 GNU项目的贡献以及常见的 Linux 发行版如Ubuntu De
  • 旋转图像(二维数组的旋转)——LeetCode数组算法题

    旋转图像
  • 利用无人机(手机)和Unity3D软件制作自己的VR全景软件

    市面上做全景的网站和公司有很多 这里不列举了 自己百度一下VR和 全景之类的就会跳出很多 一 全景相片制作 1 无人机制作全景相片 1 1大疆无人机全景相片制作 利用软件DJI GO4中一键720全景完成制作 1 2手动制作720全景完成制
  • OBS斗鱼直播弹幕插件效果

    我没有安装任何OBS插件 一样达到了美化版弹幕效果
  • windows10配置远程桌面多用户同时登录

    目录 一 单用户同时登录 二 多用户同时登录 一 单用户同时登录 系统属性 gt 远程 勾选以下选项 运行 gpedit msc 选择 计算机配置 gt 管理模板 gt Windows组件 gt 远程桌面服务 gt 远程桌面会话主机 gt
  • 秒杀系统架构优化思路

    秒杀系统架构优化思路 上周参加Qcon 有个兄弟分享秒杀系统的优化 其观点有些赞同 大部分观点却并不同意 结合自己的经验 谈谈自己的一些看法 一 为什么难 秒杀系统难做的原因 库存只有一份 所有人会在集中的时间读和写这些数据 例如小米手机每
  • logback.xml文件未被加载

    起初 将logback xml放到了src下面 结果运行后发现只能在控制台输出日志 而不能将日志输出到文件中 于是网上搜索 首先将logback xml root标签中的ALL改为OFF 再次运行程序 看是否能够加载logback xml文
  • Katex的markdown常用语法中一些关于Latex数学符号或公式等的笔记

    文章目录 数学符号 设变量时常用的希腊字母 大小关系 分数 开方 同余 一般符号 二项式 符号上下添加额外信息 上标符号 上下标 上下划线 箭头 集合 省略号 矩阵 小括号形式 中括号形式 行列式 带省略号的形式 带横线或竖线分隔的形式 逻
  • CentOS7编译安装Openvswitch 2.3.0 LTS

    1 安装依赖包 yum y install openssl devel wget kernel devel 2 安装开发工具 yum groupinstall Development Tools 3 添加用户 adduser ovswitc
  • c++ sdk框架_鸿蒙系统中的 JS 开发框架

    今天鸿蒙终于发布了 开发者们也终于 沸腾 了 源码托管在国内知名开源平台码云上 https gitee com openharmony 我也第一时间下载了源码 研究了一个晚上 顺带写了一个 hello world 程序 还顺手给鸿蒙文档提了
  • Flutter lottie开机启动动画

    一款app在启动预加载数据时 少不了采用开机启动动画方案 今天介绍lottie制作开机启动动画 Lottie官网地址 https lottiefiles com 项目源码 Flutter手机端 lottie实现开机启动动画源码 前端元素由前
  • ps背景不变换字_ps怎么把背景上面的字换掉

    1 怎么用ps把图片上的字换掉 换成自己想打的字 1 演示使用的设计软件为photoshop 版本为Adobe photoshop CC2017 以下简称PS 2 打开图像处理软件PS 然后加载一张用于演示换字的图片 3 首先选择工具栏中的
  • 静态代码和动态代码的区别_静态代码扫描方法及工具介绍

    来自 信安之路 微信号 xazlsec 本文作者 国勇 信安之路特约作者 静态扫描就是不运行程序 通过扫描源代码的方式检查漏洞 常见的方法也有多种 如把源代码生成 AST 抽象语法树 后对 AST 进行分析 找出用户可控变量的使用过程是否流
  • 限制服务器显示ip段,限制网段中的某段IP访问Samba服务器

    今天在百度知道看到这样一个问题 linux samba服务如何限制指定网段访问 例如 允许192 168 1 0网段访问 但不允许192 168 1 100 192 168 1 170访问 这个问题与我之前的一篇文章 Samba访问控制 貌

随机推荐

  • Android开发edittext输入监听

    在开发Android的过程中 对于edittext的使用频率还是挺高的 比如用户账号密码的输入 基本信息的填写 数据的填入等 一般都会通过button点击事件对其数据进行提取 不过在一些场景 需要实时监听或者当输入完毕之后要马上获取用户所输
  • 逻辑回归和SVM的区别

    1 LR采用log损失 SVM采用合页损失 2 LR对异常值敏感 SVM对异常值不敏感 3 在训练集较小时 SVM较适用 而LR需要较多的样本 4 LR模型找到的那个超平面 是尽量让所有点都远离他 而SVM寻找的那个超平面 是只让最靠近中间
  • FFmpeg从入门到入魔(2):保存流到本地MP4

    1 FFmpeg裁剪移植 之前我们简单地讲解了下如何在Linux系统中编译FFmpeg 但是编译出来的so体积太大 而且得到的多个so不便于使用 本节在此基础上 将详细讲解在编译FFmpeg时如何对相关模块作裁剪以精简so的体积 并且编译只
  • 文档权限服务器上,服务器上的权限

    服务器上的权限 内容精选 换一换 数据库安全服务与其他云服务的关系的依赖关系如图1所示 数据库安全服务实例创建在弹性云服务器上 用户可以通过该实例 为弹性云服务器上的自建数据库提供安全审计功能 数据库安全服务可以为关系型数据库服务中的RDS
  • Css:Conditional comments(条件注释)

    http msdn microsoft com en us library ms537512 VS 85 aspx http www quirksmode org css condcom html Item Example Comment
  • 23黑马QT笔记之猜数字游戏答案

    23黑马QT笔记之猜数字游戏答案 代码在自己写的day04的第一个项目 想要代码的直接评论 写上自己的邮箱 不要像以前发私信了 因为CSDN有时消息不同步 或者看了之后忘了
  • Flask基础: 增删改查

    app py 实现数据库的增删改查 from flask import make response request session abort jsonify from config settings import Config from
  • 隐藏导航条底部的黑线(shadowImage)四种办法

    方法一 当设置navigationBar的背景图片时移除黑线的方法 该方法会使translucent属性失效 objc view plain copy 方法一 当设置navigationBar的背景图片时移除黑线的方法 该方法会使trans
  • Python操作redis及redis的操作命令

    Python操作redis及redis的操作命令 Python操作redis https www cnblogs com melonjiang p 5342505 html https www cnblogs com xiaojing201
  • 实战Java高并发程序设计(第二版)-chp4锁

    多线程引用 需要维护并行数据结构间的一致性状态 需要为线程的切换和调度花费时间 参考 实战Java高并发程序设计 第二版 Unsafe类详解 java cas算法实现乐观锁 4 1 合理的锁性能 4 1 1 减少锁持有时间 原有的程序 对整
  • Linux搭建服务器

    文章目录 Linux搭建服务器 1 基础环境配置 1 1配置centos7 1 2安装xshall 1 3安装xftp7 2 配置jdk 1 8 第一步 卸载系统自带的OpenJDK以及相关的java文件 第二步 下载最新稳定JDK 第三步
  • Vue路由守卫(拦截)

    要解决的问题 最近做项目时 发现不登录账号和密码 在浏览器的地址栏直接输入路径也能跳转页面 就聊一下路由守卫吧 也叫路由拦截 话不多少 直接看操作 解决方案 在登录成功后 设置一个sessionStorage 通过这个sessionStor
  • vue可视化管理工具创建项目报错解决errno: -4058;连接超时

    vue可视化管理工具创建项目报错解决errno 4058 简介 vue创建项目时 errno 4058问题解决 使用vue ui指令时会报连接超时问题解决 总共两种解决方案 基础材料 使用的node js版本 18 12 1 vue版本 4
  • Pgsql:多表关联update更新字段和delete删除记录

    一 想用多表关联查询并且update更新指定字段 1 两表关联更新示例 UPDATE t user bank b SET is active 是 FROM t user arch u WHERE u arch id b arch id an
  • 浅拷贝和深拷贝的区别

    浅拷贝和深拷贝 总结 浅拷贝对象数据共享 深拷贝是一个完全独立的对象 因此对象数据不共享 浅拷贝 Shallow Copy 浅拷贝是指创建一个新的对象 但是该新对象只是原始对象的一个副本 具体而言 浅拷贝会创建一个新的对象 并将原始对象的引
  • matlab 载波调制,考虑载波和采样频率的2PSK调制 MATLAB仿真

    功能 生成psk调制信号 创建日期 2016 7 27 创建人 Alice 764499604 qq com clear all close all clc max 100 g zeros 1 max g randint 1 max 长度为
  • 5000月薪与50000月薪的Linux运维的区别

    做 运维 感觉像网管怎么办 新工作运维3个多月 天天就是维护重启服务器 更新代码 感觉这样下去几年后就没有什么竞争力了 这是知乎的一个热门运维问题 也是很多刚进入运维工作的同学面临的心境 确实 运维 可能是分水岭最明显的职位之一 有的人毕业
  • Docker修改容器内部文件的方法

    Docker修改容器内部文件的方法一共有三种 下面进行一一介绍 1 进入容器内部修改 使用下面的命令以命令行的形式可以进入容器的内部对文件进行修改 docker exec it 容器ID bin bash 不过里面没有vim 需要自行安装
  • Qt Translation 遇到的一些问题总结

    文章目录 坑1 无法生成ts文件 坑2 ts文件的中文乱码 坑3 不能直接翻译全局变量 静态变量 符号常量字符串 官方文档 Internationalization with Qt 贴一个比较好的总结 Qt中 软件多语言国际化翻译的方法与步
  • C#使用Tesseract

    C 使用Tesseract 前言 上篇文章讲述了 Tesseract orc的安装和使用 这片文章讲一讲在net平台上面如何使用 Tesseract orc 没有那么复杂的安装教程 我在使用的时间还是基于Framework 在网上下载了好多