机器视觉与Tesseract

机器视觉

从 Google 的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广 泛且具有深远的影响和雄伟的愿景的领域。

重点介绍机器视觉的一个分支:文字识别,介绍如何用一些 Python库来识别和使用在线图片中的文字。

我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数机器人都没法读取的图片,验证码 (CAPTCHA)就出现了。验证码读取的难易程度也大不相同,有些验证码比其他的更加难读。

将图像翻译成文字一般被称为 光学文字识别(Optical Character Recognition, OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层 OCR 库,或者是

Tesseract

Tesseract 是一个 OCR 库,目前由 Google 赞助(Google 也是一家以 OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源 OCR 系统,除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。

在上面 进行定制。

安装Tesseract

Windows 系统

下载可执行安装文件:https://code.google.com/p/tesseract-ocr/downloads/list 安装。

Ubuntu Linux系统

可以通过 apt-get 安装: $sudo apt-get tesseract-ocr

Mac OS X系统

用 Homebrew可以很方便地安装: brew install tesseract

Mac OS X系统

用 Homebrew可以很方便地安装: brew install tesseract

要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新的环境变量 $TESSDATA_PREFIX,让 Tesseract 知道训练的数据文件存储在哪里,然后搞一份tessdata数据文件,放到Tesseract目录下。

在大多数 Linux 系统和 Mac OS X 系统上,你可以这么设置(假设Tesseract数据文件目录在/usr/local/share/下): $export     TESSDATA_PREFIX=/usr/local/share/Tesseract

     在 Windows 系统上也类似,你可以通过下面这行命令设置环境变量: #setx TESSDATA_PREFIX C:\Program        Files\TesseractOCR\Tesseract

 

安装pytesseract

pip install pytesseract

通过Python代码实现

import pytesseract
from PIL import Image

image = Image.open('test.jpg')
text = pytesseract.image_to_string(image)
print text

对图片进行阈值过滤和降噪处理

如果是模糊的照片,但要提取里面的数据,遇到这类问题,可以先用 Python 脚本对图片进行清理。利用 PIL 库,我们可以创建一个阈值过滤器来去掉渐变的背景色,只把文字留下来,从而让图片更加清晰,便于 Tesseract 读取:

from PIL import Image 
import subprocess

def cleanFile(filePath, newFilePath): 
    image = Image.open(filePath)

    # 对图片进行阈值过滤(低于143的置为黑色,否则为白色)
    image = image.point(lambda x: 0 if x < 143 else 255)
    # 重新保存图片
    image.save(newFilePath)

    # 调用系统的tesseract命令对图片进行OCR识别 
    subprocess.call(["tesseract", newFilePath, "output"])

    # 打开文件读取结果
    with open("output.txt", 'r') as f:
        print(f.read()) 

if __name__ == "__main__":
    cleanFile("text2.png", "text2clean.png")

猜你喜欢

转载自blog.csdn.net/qq_41868948/article/details/81079860