Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51306
  • 博文数量: 6
  • 博客积分: 165
  • 博客等级: 入伍新兵
  • 技术积分: 72
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-18 16:19
文章分类

全部博文(6)

文章存档

2012年(3)

2011年(1)

2009年(1)

2006年(1)

我的朋友

分类: Python/Ruby

2012-05-09 21:21:57

上个月的某天突然想看看是否有一些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图像库。


点击(此处)折叠或打开

  1. import sys
  2. from PIL import Image

  3. name = sys.argv[1]
  4. img = Image.open(name) # Your image
  5. img = img.convert("RGBA")

  6. pixdata = img.load()

  7. # Make the letters bolder for easier recognition

  8. for y in xrange(img.size[1]):
  9.     for x in xrange(img.size[0]):
  10.         if pixdata[x, y][0] < 90:
  11.             pixdata[x, y] = (0, 0, 0, 255)

  12. for y in xrange(img.size[1]):
  13.     for x in xrange(img.size[0]):
  14.         if pixdata[x, y][1] < 136:
  15.             pixdata[x, y] = (0, 0, 0, 255)

  16. for y in xrange(img.size[1]):
  17.     for x in xrange(img.size[0]):
  18.         if pixdata[x, y][2] > 0:
  19.             pixdata[x, y] = (255, 255, 255, 255)

  20. img.save("input-black.gif", "GIF")

  21. # Make the image bigger (needed for OCR)
  22. im_orig = Image.open('input-black.gif')
  23. big = im_orig.resize((1000, 500), Image.NEAREST)

  24. ext = ".tif"
  25. big.save("input-NEAREST" + ext)

  26. # Perform OCR using tesseract-ocr library
  27. from tesseract import image_to_string
  28. #from pytesser import *

  29. image = Image.open('input-NEAREST.tif')
  30. print image_to_string(image)

这里最关键的就是image_to_string函数,由它完成字符识别的工作,当然在识别之前可以对图片做一些预处理,比如这段代码里做的灰度处理和尺寸调整。通过训练还可以进一步提高Tesseract引擎的识别精度。

另外,在Google Code上还有另一个项目, 它是由Google 赞助。ocropus支持一些不同的插入式字符识别引擎,tesseract引擎也可以插入使用。另外还包括一些功能,如布局分析等。对ocropus还没有深入了解,等有空的时候研究研究,跟tesseract做个比较。
阅读(5038) | 评论(1) | 转发(0) |
0

上一篇:template类的声明与实现

下一篇:没有了

给主人留下些什么吧!~~

xuexiyong2016-11-23 17:32:12

对中文的识别支持如何?请问博主