Python如何基于Tesseract实现识别文字功能
作者:程序员的人生A 发布时间:2022-11-09 11:52:18
机器视觉
从Google的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广泛且具有深远的影响和雄伟的愿景的领域。
这里我们将重点介绍机器视觉的一个分支:文字识别。介绍如何用一些Python库来识别和使用在线图片中的文字。
我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数存贮器没法读取的图片,这时验证码(CAPTCHA)就出现了。验证码读取的难易程序也大不相同。
将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层OCR库,或者是在上面进行定制。
OCR库概述
在读取和处理图像、图像相差的机器学习以及创建图像等任务中,Python一直都是非常出色的语言。虽然有很多库可以进行图像处理,但是这里我们只介绍Tesseract库。
Tesseract
Tesseract是一个OCR库,目前由Google赞助。Tesseract是目前公认最优秀、最精确的开源OCR系统。除了极高的精确度,Tesseract也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何Unicode字符。
安装Tesseract:Windows系统
下载可执行安装文件安装即可。
安装pytesseract
Tesseract是一个Python的命令行工具,不是通过import语句导入的库。安装之后,要用tesseract命令在Python的外面运行,但我们可以通过pip安装支持Python版本的Tesseract库:
pip install pytesseract
处理规范的文字
你要处理的大多数文字都是比较干净、格式规范的。格式 * 的文字通常具有以下特点:
使用统一的标准字体(不包含手写体、草书或者十分“花哨”的字体),复印或者拍照但是字体清晰、没有多余的痕迹或者污点。
排列整齐,没有歪歪斜斜的字。
没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘。
文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调整亮度和对比度,还可以根据需要进行裁剪和旋转,在这里不作介绍。
示例:
英文:
F:DE209_F>tesseract english.jpg text
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
F:DE209_F>type text.txt
This is some text, written in Arial, that will be read by
Tesseract. Here are some symbols: !@#$%"&*()
识别结果的准确率还是挺高的。
通过Python代码实现
英文:
中文:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import pytesseract
from PIL import Image
# 打开图像:英文
image = Image.open('english.jpg')
# OCR识别:lang默认英文
text = pytesseract.image_to_string(image)
# 打印识别后的文本
print(text)
# 我是分割线
print("*" * 30)
# 打开图像:英文
image = Image.open('china.png')
# OCR识别:lang指定中文
text = pytesseract.image_to_string(image, lang = 'chi_sim')
# 打印识别后的文本
print(text)
运行结果:
This is some text, written in Arial, that will be read by
Tesseract. Here are some symbols: !@#$%"&*()
******************************
中 华 人 民 共 和 国
来源:https://www.cnblogs.com/chengxuyuanaa/p/12986233.html
猜你喜欢
- 一、Set 集合类型Set 集合类型 (交差并补) 特点 :无序 , 自动去重集合用{}表示,元素间用逗号分隔建立集合类型用{}或set()
- 发现个很有用的方法——predict_proba今天在做数据预测的时候用到了,感觉很不错,所以记录分享一下,以后可能会经常用到。我的理解:p
- 一、简述最近接到一个新需求,让做一个动效进度条。由于我们的产品比较大,在软件启动的时候会消耗比较长的时间,原生的进度条已经不能满足我们的需求
- 在前面的文章中介绍了如何用Python读写Excel数据,今天再介绍一下如何用Python修改Excel数据。需要用到xlutils模块。下
- 最近又新上了一部分站点,随着站点的增多,管理复杂性也上来了,俗话说:人多了不好带,我发现站点多了也不好管,因为这些站点里有重要的也有不重要的
- 在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器。由于本人用惯了宇宙第一IDE(Vis
- 通过学习ASP明明白白你的If语句流程。If condition Then [statements1]E
- 1.背景看到这个标题你可能想一个分块能有什么难度?还值得细说吗,最近确实遇到一个有意思的分块函数,写法比较巧妙优雅,所以写一个分享。日前在做
- 想要一个这玩意,可是找了网上许多着色器,要么是兼容性成问题,要么是匹配不精确,比如说:1、注释里包含字符串、关键词,类似于:/* xxxx&
- 用css属性选择器可以有选择性地对链接样式进行控制,如让所有的外部链接都加一个小图标来标识其是一外部链接。但用css有弊端: 1、只支持Fi
- 本文实例讲述了python采集百度百科的方法。分享给大家供大家参考。具体如下:#!/usr/bin/python# -*- coding:
- 如下所示:lists = ['tom','Jack','luCy','lily
- input高级限制级用法1.取消按钮按下时的虚线框 在input里添加属性值 hideFocus 或者 HideFocus=true2.只读
- 如果您是HTML的初学者,请您先自学HTML。因为DHTML是现有的HTML技术的一个综合,所以HTML语言对学习动态HTML是
- js 中判断某个元素是否存在于某个 js 数组中,相当于 php 语言中的 in_array 函数。Array.prototype.S=St
- 鉴于上一篇中最后三个问题:1、上述程序是否能进行优化(比如功能相同的)2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就
- 数据库缓存为了使用数据库表作为缓存后端,首先在数据库中运行这个命令以创建缓存表:python manage.py createcacheta
- 一、我们对XML的读取进行一波演示import xml.dom.minidom#负责解析xml文件的包from xml.dom.minido
- pytorch geometric的GNN、GCN节点分类# -*- coding: utf-8 -*-import osimport to
- 最近在用python写接口的测试程序,期间用到解析字典获取某个key的value,由于多个接口返回的字典格式不是固定的并存在多层嵌套的情况。