图像识别与文字处理
图像识别与文字处理
为了解决将图像翻译成字符的问题,python中引入了光学字符识别(Optical Character Recognition,OCR)技术,而Tesseract是目前公认最优秀和最精确的开源OCR系统
一.OCR技术概述
光学字符识别(Optical Character Recognition,OCR)是指对包含文本资料的图像资料文件进行分析识别处理,获取文字及版面信息的技术.一般包含以下几个过程:
1.图像识别
针对不同格式的图像,有着不同的存储格式和压缩格式.目前,用于存取图像的开源项目有OpenCV和CxImage等
2.预处理
预处理主要包括二值化,噪声去除和倾斜较正
3.版面分析
将文档图片分段楼,分行的过程叫作版面分析
二.pytesseract和PIL
1.pytesseract
pytesseract是一款用于光学字符识别(OCR)的python工具,即从图片中识别和读取其中嵌入的文字.pytesseract是对Tesseract-OCR的一层封装,同时也可以单独作为Tesseract引擎的调用脚本,支持使用PIL库(python Imaging Library)读取图片文件类型
在pytesseract库中,提供如下函数将图像转换成字符串:
image_to_string(image,lang=None,boxes=False,config=None)
2.PIL
PIL库中一个非常重要的类是Image类,该类定义在与同名的模块中
new()函数
Image.new(mode,size,color=0)
当创建单通道图像时,color是单个值;当创建多通道图像时,color是一个元组.若省略了color参数,则图像被填充成全黑;若color参数的值为None,则图像不被初始化
open()函数
open(fp,mode="r")
三.处理文字
import pytesseract
from PIL import Image
image=Image.open("./data/8_1.png")
text=pytesseract.image_to_string(image)
print(text)
I am happy
hello world
from IPython.display import Image
Image(filename="./data/8_1.png",width=500)
默认情况下,pytesseract只能识别英文字符,为了让其支持中文,需要显示地指明使用中文字库.因此在调用image_to_string
需要指明语言,即将lang
参数的值设为chi_sim
from pytesseract import *
from PIL import Image
data=Image.open("./data/8_2.png")
text=image_to_string(data,lang="chi_sim")
print(text)
. 绢 i[ppg
2. 机 嘴 学 习 概 述 [ppi]
. 线 伯 模 型 [ppg]
i
5 卷 积 神 经 网 绕 [op]
from IPython.display import Image
Image(filename="./data/8_2.png",width=500)
四.验证码
Image(filename="./data/8_3.png",width=500)
from random import randint
import pytesseract
from PIL import Image
picName=str(randint(0,9))+".png"
image=Image.open("./data/images/"+picName)
text=pytesseract.image_to_string(image)
print(picName+":"+text)
2.png:W 5 4 9