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.