基于Python的图片文字识别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档