基于Python的图片文字识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Python的图片文字识别
【摘要】
在有些工程中,有时候我们需要对图片文字识别。本文利用Python,调用OpenCV库,先对图片进行预处理,然后借助Google开源的pytesser对图片文字进行了识别。
【关键词】:OpenCV,pytesser,文字识别
一关于OCR
光学字符识别(英语:Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。一般包括以下几个过程:图像输入、图像前处理、预识别:
1 图像输入:对于不同的图像格式,有着不同的存储格式,不同的压缩方式,目前有OpenCV、CxImage等开源项目。
2 预处理:主要包括二值化,噪声去除,倾斜较正等。
2.1二值化:
对摄像头拍摄的图片,大多数是彩色图像,彩色图像所含信息量巨大,对于图片的内容,我们可以简单的分为前景与背景,为了让计算机更快的、更好地识别文字,我们需要先对彩色图进行处理,使图片只剩下前景信息与背景信息,可以简单的定义前景信息为黑色,背景信息为白色,这就是二值化图。
2.2噪声去除:
对于不同的文档,我们对噪声的定义可以不同,根据噪声的特征进行去燥,就叫做噪声去除。
3 倾斜校正:由于一般用户,在拍照文档时,都比较随意,因此拍照出来的图片不可避免的产生倾斜,这就需要文字识别软件进行较正。
4版面分析:将文档图片分段落,分行的过程就叫做版面分析,由于实际文档的多样性,复杂性,因此,目前还没有一个固定的,最优的切割模型。
5字符切割:由于拍照条件的限制,经常造成字符粘连,断笔,因此极大限制了识别系统的性能。
6 字符识别:这一研究已经是很早的事情了,比较早有模板匹配,后来以特征提取为主,由于文字的位移,笔画的粗细,断笔,粘连,旋转等因素的影响,极大影响特征的提取的难度。
7 版面还原:人们希望识别后的文字,仍然像原文档图片那样排列着,段落不变,位置不变,顺序不变地输出到Word文档、PDF文档等,这一过程就叫做版面还原。
8 后处理、校对:根据特定的语言上下文的关系,对识别结果进行校正,就是后处理。
二利用OpenCV进行预处理
(一)关于OpenCV
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C 语言接口。该库也有大量的Python,Java和MATLAB的接口。另外,一个使用CUDA 的GPU接口也于2010年9月开始实现。
(二)使用OpenCV进行图片预处理
1.读入图像,并把彩色图转化为灰度图
本文需要识别的图片如下,为一张彩色图
在进行图像处理的时候,对灰度图的处理往往比彩色图简单一些,也少消耗一下资源,所以,在进行下一步工作前,我们先把图像转化为灰度图。OpenCV 提供的读入图像接口函数为成imread,转化为灰度图的接口函数为cvtColor,并给它传入参数COLOR_BGR2GRAY,它就可以实现彩色图到灰度图的转换,转化为灰度图后图像如下。
2.对图像进行形态学开运算,并做自适应阈值处理
把图像转换为灰度图后,有时候会产生噪点,有时候文字会在有些地方断裂,这是我们不希望看到的,所以,我们利用开运算去除噪点,并是文字连续。另外,转化为灰度图后,我们发现图片对比度不是很好,为此,我们在采用自适应阈值对图片进行阈值处理,以增强对比度,便于后文的pytesser对文字进行识别。尽心开运算和自适应阈值处理以后,图片效果如下
三利用pytesser进行文字识别
pytesser,OCR in Python using the Tesseract engine from Google。是谷歌OCR 开源项目的一个模块,可将图片中的文字转换成文本(主要是英文)。本文的前面已经对图片进行了各种预处理,现在就利用pytesser来进行文字识别。如果对图片的预处理做的很好,pytesser基本可以实现100%的文字识别。但是pytesser 也有它的不足,它对于图片质量要求较高,除此之外,对于形态相同的数字和字母容易混淆,比如0和O。改进的办法是利用机器学习,纠正识别错的,提高之后的识别准确率。
四总结与结论
通过对图像进行阈值变换,开运算等预处理,最后采用pytesser对图片文字信息进行了提取,由于图片的质量不同,识别成功率也有所不同。在今后的研究中,可能有必要采取机器学习来提高识别的准确率。
参考文献:
[1] 陈胜勇,刘盛等. 基于OpenCV 的计算机视觉技术实现[M]. 北京:科学出版社,2008.
[2] 汪益民. 基于OCR的书写文字识别系统设计. 安徽农业大学 2007
[3] 沈艳. 基于CMAC神经网络的手写字体识别技术. 哈尔滨工程大学. 2011
[4] 颜伟,李巧月.基于OpenCV 的高斯平滑和自适应阈值化算法研究中国矿业大学2010
附录源程序
#图片预处理
import os
from pytesser import *
import cv2
import numpy as np
img = cv2.imread('p.jpg',0)
imgray =
cv2.cvtColor(img,cv2.COLOR_BGR2GRA Y)
#img = cv2.medianBlur(img,5)
#进行开运算处理
opening = cv2.morphologyEx(imgray, cv2.MORPH_OPEN, kernel)
#自适应阈值处理
th2 =
cv2.adaptiveThreshold(opening,255, cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY,15,20)
#显示图片
cv2.imshow('adative',th2)
cv2.waitKey(0)
cv2.destroyAllWindows()#利用pytesser进行识别import os
import Image
import ImageEnhance import ImageFilter
import sys
from pytesser import *
im = Image.open('me.JPG') img = im.convert('L')
enhancer = ImageEnhance.Contrast(img) img = enhancer.enhance(2) img.show()
print image_to_string(img)