zoukankan      html  css  js  c++  java
  • Tesserac初探

    安装Tesseract

    Windows 系统

    下载可执行安装文件https://code.google.com/p/tesseract-ocr/downloads/list安装。或者https://digi.bib.uni-mannheim.de/tesseract/

    Mac OS X系统

    用 Homebrew(http://brew.sh/)等第三方库可以很方便地安装 

    brew install tesseract
    要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新的环境变量 $TESSDATA_PREFIX,让 Tesseract 知道训练的数据文件存储在哪里,然后搞一份tessdata数据文件,放到Tesseract目录下。
    • 在大多数 Linux 系统和 Mac OS X 系统上,你可以这么设置: $export TESSDATA_PREFIX=/usr/local/share/Tesseract

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

    安装pytesseract

    Tesseract 是一个 Python 的命令行工具,不是通过 import 语句导入的库。安装之后,要用 tesseract 命令在 Python 的外面运行,但我们可以通过 pip 安装支持Python 版本的 Tesseract库:

    pip install pytesseract

    处理给规范的文字

    你要处理的大多数文字都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,不过究竟什么是“格式混乱”,什么算“格式规范”,确实因人而异。 通常,格式规范的文字具有以下特点:

    • 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体) • 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点
    • 排列整齐,没有歪歪斜斜的字
    • 没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘

    文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调 整亮度和对比度,还可以根据需要进行裁剪和旋转(详情请关注图像与信号处理),但是,这些做法在进行更具扩展性的 训练时会遇到一些限制。

    示例

     

    通过下面的命令运行 Tesseract,读取文件并把结果写到一个文本文件中: tesseract test.jpg text

    识别结果还比较准确,大体上可以让你很舒服地阅读。

    通过Python代码实现

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

    运行结果:

     

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

    很多时候我们在网上会看到这样的图片:

    Tesseract 不能完整处理这个图片,主要是因为图片背景色是渐变的,最终结果是这样:

    随着背景色从左到右不断加深,文字变得越来越难以识别,Tesseract 识别出的 每一行的最后几个字符都是错的。

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

    from PIL import Image 
    import subprocess
    
    def cleanFile(filePath, newFilePath): 
        image = Image.open(filePath)
    
        # 对图片进行阈值过滤,然后保存
        image = image.point(lambda x: 0 if x<143 else 255)     
        image.save(newFilePath)
    
        # 调用系统的tesseract命令对图片进行OCR识别     
        subprocess.call(["tesseract", newFilePath, "output"])
    
        # 打开文件读取结果
        file = open("output.txt", 'r')     
        print(file.read()) 
        file.close()
    
    cleanFile("text2.jpg", "text2clean.png")

    通过一个阈值对前面的“模糊”图片进行过滤的结果

    除了一些标点符号不太清晰或丢失了,大部分文字都被读出来了。Tesseract 给出了最好的 结果:

     

    通过给 Tesseract 提供大量已知的文字与图片映射集,经过训练 Tesseract 就可以“学会”识别同一种字体,而且可以达到极高的精确率和准确率,甚至可以忽略图片中文字的背景色和相对位置等问题。

  • 相关阅读:
    mongoDB安装配置
    linux-批量修改目录下后缀shell
    备份mysql的shell
    mysql_DML_索引、视图
    mysql_存储过程
    mysql_备份_mysqldump
    mysql_DCL_grant/revoke
    mysql_DML_select_子查询
    mysql_DML_select_union
    mysql_DML_select_聚合join
  • 原文地址:https://www.cnblogs.com/loaderman/p/11760596.html
Copyright © 2011-2022 走看看