对图片进行阈值过滤和降噪处理
前面所介绍的图像比较接近于理想图像,文字极易被识别与处理。不过,大多数的情况下,网络上看到的图片是带有背景颜色的。例如,图片中的文字位于带有渐变背景的图像中,如图1所示。
图1 符合文字规范的图像
图1中描述了带有渐变背景的文字图片。从图1中可以看出,随着背景颜色从左向右不断地加深,文字的清晰度不断降低,这使得文字的识别变得越来越难。
遇到上述这类问题,可以预先过滤掉图片中的渐变背景色,留下图像中的文字,从而增加图像的清晰度,便于文本的识别与读取。例如,通过阈值过滤器处理上述图片,处理后如图2所示。
图2 阈值过滤后的图像
图2中描述了阈值过滤的图像。从图2中可以看到,大部分的文字都可以被识别到,只剩下一些不太清晰的标点符号,及丢失的文字。
接下来,我们通过PIL库将图1的图像进行阈值过滤处理成二值图,之后通过tesseract引擎处理后的图像进行文字识别,具体示例代码如下。
from pytesseract import *
from PIL import Image
def clean_file(file, newfile):
'''
将图片经过过滤后进行识别
:param file: 图片文件的路径
:param newfile: 处理后图片的路径
'''
image = Image.open(file)
# 对图片进行阈值过滤(低于143的置为黑色,否则为白色)
image = image.point(lambda x: 0 if x < 143 else 255)
# 重新保存图片
image.save(newfile)
text = pytesseract.image_to_string(image)
print(text)
if __name__ == '__main__':
clean_file("test.png","test_copy.png")
上述示例中,定义了一个用于处理图像的方法clean_file,在该方法中,首先调用open函数打开给定的图像文件,之后调用point方法进行阈值过滤,即将图像中像素颜色数低于143的像素点置为黑色,其余置为白色,从而得到一个二值图,并将这个图保存到新的路径下。然后,通过pytesseract库的image_to_string函数将图像以OCR识别技术转换成字符串进行输出。
上述图片识别的最好结果如下:
This is some text, written in Arial, that will be ,
Tesseract. Here are some symbols: IW“’