识别图片中的文字 - Tesseract 和 百度云OCR的对比

当今时代人工智能都已是烂大街的词了,OCR应该也不少人都知道。html

OCR (Optical Character Recognition, 光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用字符识别方法将形状翻译成计算机文字的过程。

本文主要记录了经过Python使用OCR的两次尝试。python

Tesseract

Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,特色是开源,免费,支持多语言,多平台。git

项目地址:https://github.com/tesseract-...github

安装使用

Tesseract的安装比较简单,在mac能够经过brew安装。windows

brew install --with-training-tools tesseract

在windows能够经过exe安装包安装,下载地址能够从GitHub项目中的wiki找到。安装完成后记得将Tesseract 执行文件的目录加入到PATH中,方便后续调用。api

另外,默认安装会包含英文语言训练包,若是须要支持简体中文或者繁体中文,须要在安装时勾选。app

tesseract-lang

或者安装结束后到项目地址下载:https://github.com/tesseract-...ide

下载好的语言包放入到安装目录中的testdata下便可。在windows系统你还须要将testdata目录也加入环境变量。函数

TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR\tessdata

若是一切就绪,你在命令行中就可使用Tesseract命令。测试

# tesseract
Usage:
  tesseract --help | --help-psm | --help-oem | --version
  tesseract --list-langs [--tessdata-dir PATH]
  tesseract --print-parameters [options...] [configfile...]
  tesseract imagename|stdin outputbase|stdout [options...] [configfile...]

OCR options:
  --tessdata-dir PATH   Specify the location of tessdata path.
  --user-words PATH     Specify the location of user words file.
  --user-patterns PATH  Specify the location of user patterns file.
  -l LANG[+LANG]        Specify language(s) used for OCR.
  -c VAR=VALUE          Set value for config variables.
                        Multiple -c arguments are allowed.
  --psm NUM             Specify page segmentation mode.
  --oem NUM             Specify OCR Engine mode.
NOTE: These options must occur before any configfile.

经过命令行你就能够完成简单的图片文字识别任务。

tesseract test.png outfile -l chi_sim

经过Python调用

Tesseract安装完成后能够很方便的被Python调用,你须要安装两个包。

pip install pillow
pip install pytesseract

一个简单的图片转文字的函数实现以下。

from PIL import Image
import pytesseract

class Languages:
    CHS = 'chi_sim'
    CHT = 'chi_tra'
    ENG = 'eng'

def img_to_str(image_path, lang=Languages.ENG):
    return pytesseract.image_to_string(Image.open(image_path), lang)
  
print(img_to_str('image/test1.png', lang=Languages.CHS))
print(img_to_str('image/test2.png', lang=Languages.CHS))

测试图片- test1.png

test1

识别结果:

process image file "image/test1.png" in 1.4782530478747697 seconds

8 所 调 人 , 在 - 方 。
深 从 久 , 定 中 央
。 所 澈 伊 人 , 圭 水 淳
。 淇 渡 从 之 , 定 圭 北 中 坂 。
。 所 澈 伊人 , 圭 水 浩
从 丿 , 定 圭 水 中 沥 。

测试图片 - test2.png

test1

识别结果:

process image file "image/test2.png" in 1.2131140296607923 seconds

清 明 时 节 雨 纷 纷 , 路 上 行 人 欲 断 魂
信 问 酒 家 何 处 有 , 牧 奕 通 指 枪 花 村 。

小结

Tesseract在识别清晰的标准中文字体效果还行,稍微复杂的状况就很糟糕,并且花费的时间也不少,我我的以为惟一的优势就是免费了。若是你不介意多花时间,能够考虑使用它提供的训练功能自定义你的语言库,那样在特定场景下识别率应该能上一个台阶。

百度云OCR

这是偶然的发现,百度云提供了必定额度的免费的OCR API,目前是每日500次,作作研究或者小应用还勉强够用,本文主要为了测试其效果。

文档地址:https://cloud.baidu.com/doc/O...

安装使用

首先你须要注册一个百度云BCE帐号,而后从控制面板新建一个文字识别应用。baidu-ocr

以后你就能够得到调用API须要的 AppID,API Key 和 Secret Key。后面只要根据官方文档一步一步走就能够了。

pip install baidu-aip

封装和调用

参考文档: https://cloud.baidu.com/doc/O...

from aip import AipOcr

config = {
    'appId': 'your-id',
    'apiKey': 'your-key',
    'secretKey': 'your-secret-key'
}

client = AipOcr(**config)

def get_file_content(file):
    with open(file, 'rb') as fp:
        return fp.read()

def img_to_str(image_path):
    image = get_file_content(image_path)
    result = client.basicGeneral(image)
    if 'words_result' in result:
        return '\n'.join([w['words'] for w in result['words_result']])

测试图片- test1.png

test1

识别结果:

process image file "image/test1.png" in 0.6331169034812572 seconds

蒹葭
先秦:佚名
蒹葭苍苍,白露为霜。所谓伊人,在水一方。
溯洄从之,道阻且长。溯游从之,宛在水中央。
蒹葭萋萋,白露未晞。所谓伊人,在水之湄。
溯洄从之,道阳且跻。溯游从之,宛在水中坻。
蒹葭采采,白露未已。所谓伊人,在水之涘。
溯洄从之,道阻且右。溯游从之,宛在水中沚。

测试图片 - test2.png

test1

识别结果:

process image file "image/test2.png" in 0.6621812639450142 seconds

清明时节雨纷纷,路上行人欲断魂。
借问酒家何处有,牧童遥指杏花村。

小结

测试结果很明显,我只能说百度云这个OCR真是挺厉害的,一个错别字都没有,不服不行。论中文,仍是百度比谷歌更懂一点。并且百度OCR提供了更多的参数让你更灵活的处理图片,好比自定义旋转,返回可信度,特定类型证件识别等等。

更多的OCR

除了本文提到的OCR,其实仍是有很多其余选择。有一些直接提供Demo页面,你直接上传一张图片就能够直接看到识别效果,好比:

你有没有发现全部的大公司都有这样的服务?之后咱们买买买就行,花大力气去发明轮子就没多大意义了。

关于做者:Python技术爱好者,目前从事测试开发相关工做,转载请注明原文出处。欢迎关注个人博客 https://betacat.online,你能够到个人公众号中去当吃瓜群众。

Betacat.online

相关文章
相关标签/搜索