PHP OCR实战:用Tesseract从图像中读取文字_PHP教程
PHP OCR实战:用Tesseract从图像中读取文字
Optical Character Recognition (OCR)即光学字符辨识是把打印文本转换成一个数字表示的过程。它有各种各样的实际应用–从数字化印刷书籍、创建收据的电子记录,到车牌识别甚至破解基于图像的验证码。
Tesseract是一个能实现OCR的开源项目。你能在*Nix系统,Mac系统和Windows系统上运行这个项目,但是只要使用一个库,我们就能在PHP项目中使用它了。本教程的目的是教你如何使用。
安装
准备
为了让事情变得简单和一致的, 我们将使用虚拟机本文使用Vagrant)来运行应用程序,这会涉及到安装PHP和Nginx,我们将安装 Tesseract来分别演示过程。如果你想自己基于现有Debian-based系统安装Tesseract,你可以跳过下一部分—或者查看the README来获得在其他*nix上,Mac系统或者Windows的安装指导.
配置Vagrant
为了配置Vagrant以跟上本教程,完成如下步骤。或者你也可以简单的从Github获得代码。
输入以下命令来下载Homestead Improved Vagrant配置到一个名为orc的文件夹:
git clone https://github.com/Swader/homestead_improved ocr
将Nginx配置文件Homestead.yml中的以下代码:
- sites:
- - map: homestead.app
- to: /home/vagrant/Code/Project/public
修改成:
- sites:
- - map: homestead.app
- to: /home/vagrant/Code/public
同样要在hosts文件中添加
- 192.168.10.10 homestead.app
安装Tesseract
下一步是安装Tesseract
因为Homestead Improved 使用debian,我们可以在使用vagrant ssh登陆虚拟机后使用apt-get 来安装它,简单运行如下命令:
- sudo apt-get install tesseract-ocr
正如上文提到的,在the README中有其他的操作系统对应教程。
测试并定制安装
我们将使用PHP包装,但是之前我们可以在命令行测试Tesseract。
首先保存这个图片sign.png
在虚拟机中,执行如下命令来从图片中读取文字
- tesseract sign.png out
这将在当前文件夹创建一个文件:out.txt里面应该有单词:CAUTION
现在尝试sign2.jpg
- tesseract sign2.jpg out
这次产生单词Einbahnstral’ie。很接近但不正确—虽然图像中的文字相当清晰,它没能识别字符ß。
为了获使Tesseract正常读取字符串,我们需要安装一些新的语言文件—就本例来说,德语。
这里有一个全面的可用语言文件列表,但我们直接下载所需的文件:
- wget https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.deu.tar.gz
解压:
- tar zxvf tesseract-ocr-3.02.deu.tar.gz
然后把文件复制到如下目录:
- /usr/share/tesseract-ocr/tessdata
例如
- cp deu-frak.traineddata /usr/share/tesseract-ocr/tessdata
- cp deu.traineddata /usr/share/tesseract-ocr/tessdata
现在我们再次执行原来的命令但是要用 –l
- tesseract sign2.jpg out -l deu
- “deu” 是德语的 ISO 639-3码.
这次,文字应该是Einbahnstraße正确的)。
可以通过重复上述过程来使用任意语言。
配置应用程序
我们将使用这个库来用PHP使用Tesseract。
我们将建立一个极简的web应用:用户上传图片,并查看OCR处理结果。我们将使用Silex microframework 来实现。不要担心你不熟悉它,这个应用本身很简单。
记住这篇教程的所有代码都能在Github上获得。
第一步是用Composer来安装依赖文件:
- composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master
然后建立三个文件夹:
- - public
- - uploads
- - views
我们需要上传表单(views\index.twig):
OCR - method="post" enctype="multipart/form-data">