TESSRERACT图像识别

发布于 2022-10-06  394 次阅读


ocr图像识别

  • ocr图像识别的全称为光学字符识别(Optical Character Recognition),是指特定的电子设备比如扫描仪对光学图像文件进行扫描分析,获取信息,从而将图像文件翻译成计算机文字的过程。
  • ocr识别的可玩性不多说,与其他的人工智能项目一样,开源ocr对用户知识储备要求很高,非开源的项目要么收费,要么存在信息安全问题(或者像我这样连api都不会调),然而tesseract对小白用户而言打破了这一僵局.
  • Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)库,目前由谷歌赞助,它可以通过训练识别出任何字体,我们可以不断的训练的库,使图像转换文本的能力不断增强.

tesseract组成

  • 和许多服务器软件一样,tesseract运行于cmd中,任何程序都可以通过dos调用这个程序,建议在系统变量中添加好环境变量(后面会提这里有一个坑)
  • tesseract主程序提供一个识别命令,通过调用训练数据实现图像识别,训练数据不是小白能干的事,我们可以下载网上的公开的训练数据.

tesseract安装

  • 文件名:tesseract-ocr-w64-setup-v5.0.1.20220118.exe 网上有不少的版本,建议在这个网站下载(因为涉及到了识别软件本体与训练数据的版本统一性问题,从第三方站点下载很可能无法控制版本一致),https://digi.bib.uni-mannheim.de/tesseract/
  • 文件名:chi_sim.traineddata chi_sim_vert.traineddata这两个是中文的训练库,默认条件下,安装时自带英文训练库,但是如果要实现中文识别,就要单独安装中文的识别库
  • tesseract安装过程参考:https://blog.csdn.net/showgea/article/details/82656515 新版本的安装流程与教程有些不同,新版本可以在安装时就下载训练库(能下载好最好,下不了可以自己下训练库),
  • 下载 2022-01-18 22:38 51M 版本的主程序,因为上面提到的网页并不提供历史各个版本训练库的下载(提供的训练数据在此版本下已被验证可以成功装载),数据库版本和主程序版本需要保持一致
  • 将下载的中文训练库放到安装好的tesseract的tessdata文件夹下就可以了

tesseract配置

  • 环境变量是什么?

    比如mysql.exe就是一个在dos中运行的应用程序,提供myspl -u root -p指令,每次打开mysql需要先cd进入mysql.exe所在的文件夹或者直接在该文件夹打开终端,才能输入mysql命令,因为在其他目录下没有mysql.exe来提供mysql相关的dos命令.可以通过添加系统的环境变量来实现全局使用mysql指令,简单来说,环境变量存储了mysql命令和提供命令的exe文件的路径,这样在未知目录使用mysql命令时系统就会自动调用另一个目录的mysql.exe来完成指令

    环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。
  • 添加环境变量:如果是windows7(或者8?)等较老的版本,path变量还没有分割开,需要在最前面(一定要在最前面加,别问为啥,问就是踩坑了)加入tesseract的路径和;(分号),比如我加的是C:\Program Files\Tesseract-OCR; 如果是win10,11可以直接新建变量,输入C:\Program Files\Tesseract-OCR 不需要加分号了

  • 同理,再添加一个名为TESSDATA_PREFIX值为C:\Program Files\Tesseract-OCR\tessdata (tessdata的目录)

  • 至此,所有准备工作就做好了

tesseract的使用

  • 此软件只能再dos中运行,dos命令为tesseract 1.jpeg 2.txt -l eng+chi_sim 说明:1.jpeg是dos打开的目录的图片(据说也可以加绝对路径),2.txt为输出文件名,-l是语言选择,如果不加默认为英文,eng是英文库,chi_sim是中文库,库与库之间用加号连接

  • 搭配使用:python有个可以调用tesseract的库,直接pip install pytesseract即可,调用方式为

    a=pytesseract.image_to_string(image)

得到的a就是image的转换结果字符串

  • 我选择html+php+bat+tesseract的方式,html的表单发送上传文件参数给php,php上传文件并通过调用dos运行提前写好的start.bat,转换上传文件,最后php把得到的txt输出,

    start.bat内容
    tesseract 1.png 1 -l chi_sim+eng
    
    html内容
    
    php内容 ",$str); echo $str; unlink("qwe.txt"); unlink("qwe.jpg"); } ?>

一个大坑-php环境变量问题

  • 最后,不得不提php调用tesseract的一个坑,php的对dos操作的函数打开的dos窗口虽然和cmd打开的dos一模一样,但是前者是没有任何环境变量的,导致无法识别tesseract的命令(换句话说,php想打开java也是没法的)

  • 解决方案是使用php的设置环境变量的函数

      putenv('Path=C:\Program Files\Tesseract-OCR');
      putenv('TESSDATA_PREFIX=C:\Program Files\Tesseract-OCR\tessdata');
  • 然后在php文件夹中创建一个名为php-fpm.conf的文件,写入

    Path=C:\Program Files\Tesseract-OCR
    TESSDATA_PREFIX=C:\Program Files\Tesseract-OCR\tessdata
  • 在我的实践中出现了路径中的\t被转义成tab键的情况,尝试了addslash()没有效果,也尝试了单引号,最后把putenv('TESSDATA_PREFIX=C:\Program Files\Tesseract-OCR\tessdata');删掉了就ok了,不知道为啥

命令大全

  • tesseract的水很深,写到这里,我们也只是可以开始地使用它了,而此后面临的诸多问题,如:如何提高识别成功率,有许多方法,比如学习数据库,python进行图像处理(灰度,二值化,分割,旋转等等),无论如何,开源的项目虽好,还是要自己努力学习呀!
  • 最后贴一份命令大全
Usage:
  tesseract --help | --help-extra | --help-psm | --help-oem | --version
  tesseract --list-langs [--tessdata-dir PATH]
  tesseract --print-parameters [options...] [configfile...]
  tesseract imagename|imagelist|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.

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,
       bypassing hacks that are Tesseract-specific.

OCR Engine modes:
  0    Legacy engine only.
  1    Neural nets LSTM engine only.
  2    Legacy + LSTM engines.
  3    Default, based on what is available.

Single options:
  -h, --help            Show minimal help message.
  --help-extra          Show extra help for advanced users.
  --help-psm            Show page segmentation modes.
  --help-oem            Show OCR Engine modes.
  -v, --version         Show version information.
  --list-langs          List available languages for tesseract engine.
  --print-parameters    Print tesseract parameters.
届ける言葉を今は育ててる
最后更新于 2024-02-07