Python如何基于Tesseract实现识别文字功能


Posted in Python onJune 05, 2020

机器视觉

从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

处理规范的文字

你要处理的大多数文字都是比较干净、格式规范的。格式霍英东的文字通常具有以下特点:

使用统一的标准字体(不包含手写体、草书或者十分“花哨”的字体),复印或者拍照但是字体清晰、没有多余的痕迹或者污点。

排列整齐,没有歪歪斜斜的字。

没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘。

文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调整亮度和对比度,还可以根据需要进行裁剪和旋转,在这里不作介绍。

示例:

英文:

Python如何基于Tesseract实现识别文字功能

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代码实现

英文:

Python如何基于Tesseract实现识别文字功能

中文:

Python如何基于Tesseract实现识别文字功能

#!/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: !@#$%"&*()
******************************
中 华 人 民 共 和 国

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python的内建模块collections的教程
Apr 28 Python
python 基础教程之Map使用方法
Jan 17 Python
Python实战购物车项目的实现参考
Feb 20 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Python模块、包(Package)概念与用法分析
May 31 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
python实现会员管理系统
Mar 18 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 #Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 #Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 #Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 #Python
Python命名空间namespace及作用域原理解析
Jun 05 #Python
Python3内置函数chr和ord实现进制转换
Jun 05 #Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 #Python
You might like
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
值得收藏的10道python 面试题
2019/04/15 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
教育英语专业毕业生的求职信
2014/03/13 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
写给医生的感谢信
2015/01/22 职场文书
初中重阳节活动总结
2015/05/05 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers