上个月的某天突然想看看是否有一些OCR(Optical Character Recognition)方面的开源库可供python使用,搜索下来发现Tesseract OCR是个不错的选择。
Tesseract引擎是在1985-1994间由HP实验室开发的,在1995年的时候,它在字符识别精度上可是位列Top 3的。但它在1995-2006间基本没有多少提升。目前该库由Google在继续开发维护,具体可关注
基于Tesseract引擎的python wrapper有两个: pytesser 和 python-tesseract,但pytesser自2007之后就没更新了。python-tesseract可以在下载,下面会用python-tesseract做点简单的尝试。当然,为了识别图片上的字符,还需要安装PIL图像库。
- import sys
- from PIL import Image
- name = sys.argv[1]
- img = Image.open(name) # Your image
- img = img.convert("RGBA")
- pixdata = img.load()
- # Make the letters bolder for easier recognition
- for y in xrange(img.size[1]):
- for x in xrange(img.size[0]):
- if pixdata[x, y][0] < 90:
- pixdata[x, y] = (0, 0, 0, 255)
- for y in xrange(img.size[1]):
- for x in xrange(img.size[0]):
- if pixdata[x, y][1] < 136:
- pixdata[x, y] = (0, 0, 0, 255)
- for y in xrange(img.size[1]):
- for x in xrange(img.size[0]):
- if pixdata[x, y][2] > 0:
- pixdata[x, y] = (255, 255, 255, 255)
- img.save("input-black.gif", "GIF")
- # Make the image bigger (needed for OCR)
- im_orig = Image.open('input-black.gif')
- big = im_orig.resize((1000, 500), Image.NEAREST)
- ext = ".tif"
- big.save("input-NEAREST" + ext)
- # Perform OCR using tesseract-ocr library
- from tesseract import image_to_string
- #from pytesser import *
- image = Image.open('input-NEAREST.tif')
- print image_to_string(image)
这里最关键的就是image_to_string函数,由它完成字符识别的工作,当然在识别之前可以对图片做一些预处理,比如这段代码里做的灰度处理和尺寸调整。通过训练还可以进一步提高Tesseract引擎的识别精度。
另外,在Google Code上还有另一个项目, 它是由Google 赞助。ocropus支持一些不同的插入式字符识别引擎,tesseract引擎也可以插入使用。另外还包括一些功能,如布局分析等。对ocropus还没有深入了解,等有空的时候研究研究,跟tesseract做个比较。
阅读(5121) | 评论(1) | 转发(0) |