用Tesseract从图像中读取文字,虚拟开发环境

作者:网络    发布时间:2020-04-03 03:22    浏览:

[返回]

本文由码农网 – 邱康原创翻译,转发请看清文末的转发必要,款待加入大家的付费投稿陈设!

简介

Laravel 致力于令你在 PHP 开拓进度中更是轻易欢悦,这几个中也包蕴当地开荒条件的搭建。 Vagrant 提供了一种简单、温婉的情势来治本和安插虚构机。

Laravel Homestead 是二个法定预封装的 Vagrant box,它为您提供了三个宏观的成本情形,你没有必要在该地安装 PHP ,web 服务器,或此外服务软件。 Vagrant box 是截然贰遍性的,你不要担心系统被搞乱!如果有哪些地点出错了,你能够在几分钟国内出卖毁因人而宜建 box !

Homestead 能够运维在 Windows 、Mac 或 Linux 系统上,它里面包涵了 Nginx Web 服务器、PHP 7.1 、MySQL 、Postgres 、Redis 、Memcached 、Node ,以致一些便于你付出 laravel 应用的别的程序。

要是您利用的是 Windows 系统,你可能供给启用硬件虚构化(VT-x)。那日常须求通过 BIOS 来启用它。假如你在八个 UEFI 系统上行使 Hyper-V,您大概还须要禁止使用 Hyper-V 工夫启用 VT-x。

Optical Character Recognition (OCPAJEROState of Qatar即光学字符辨识是把打字与印刷文本转变到叁个数字代表的进度。它有五光十色标实在应用–从数字化印刷图书、成立发票的电子记录,到车牌识别以致破解基于图像的验证码。

放手软件

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • ngrok

图片 1

设置与安装

Tesseract是三个能完结OC奔驰G级的开源项目。你能在*Nix系统,Mac系统和Windows系统上运维这些连串,可是要是利用一个库,大家就能够在PHP项目中选择它了。本课程的目标是教您怎么着行使。

第一步

在您使用 Homestead 景况此前,你不得不先安装 VirtualBox 5.1 、VMWare 或者 Parallels 中的多个,然后再安装 Vagrant。上述软件均提供了指向性不一致操作系统的可视化安装包。

若要使用 VMware provider,你需求同不正常间购买 VMware Fusion / Workstation 以至 VMware Vagrant 插件 的软件授权,因为它们不是免费的。使用 VMware 的优势是:能够博得开箱即用的分享文件夹本性。

若要使用 Parallels provider,你供给安装 Parallels Vagrant 插件 ,那是无需付费的。

安装

安装 Homestead Vagrant Box

当 VirtualBox / VMware 甚至 Vagrant 安装到位后,你能够行使以下命令将 laravel/homestead 那个 box 增多进你的 Vagrant 个中。 homestead box 的下载会花销你或多或少岁月,具体的下载时间长度由互联网速度决定:

vagrant box add laravel/homestead

若是上边的通令运行退步,请先确定保障您曾经设置了新型版本的 Vagrant。

  • 譬喻采用国内互联网,能够复制终端上海展览中心示的 homestead box 下载地址手动下载一碗水端平命名。比如重命名称叫 virtualbox-3.0.0.box。

接下来,新建二个 metadata.json 文件,并写入以下示例内容:

{
    "name": "laravel/homestead",
    "versions": 
    [
        {
            "version": "3.0.0",
            "providers": [
                {
                  "name": "virtualbox",
                  "url": "virtualbox-3.0.0.box"
                }
            ]
        }
    ]
}

最终,使用以下命令手动增加 box

vagrant box add metadata.json # 添加 box
vagrant box list # 列出所有 box

准备

为了让工作变得轻便和均等的, 大家将应用虚构机(本文使用Vagrant)来运作应用程序,那会波及到安装PHP和Nginx,大家将安装Tesseract来分别演示进程。假若您想自个儿遵照现成Debian-based系统设置Tesseract,你能够跳过下部分—也许查看the README来赢得在其他*nix上,Mac系统只怕Windows的装置教导.

安装 Homestead

你能够简简单单利用 Git 克隆代码饭店的主意来安装 Homestead。建议将仿造的代码货仓重命名叫 Homestead ,并放置到您的「home」目录中,如此一来 Homestead box 就会看做主机,为您的具备 Laravel 项目提供劳动:

cd ~

git clone https://github.com/laravel/homestead.git Homestead

由于 Homestead 的 master 分支并非安然无事分支,你应有检出已经标签过的安定版本。你能够在 Github Release Page 找到最新的平静版本。

cd Homestead

// 检出所需要的版本...
git checkout v5.4.0

假使您克隆完 Homestead 的代码货仓,就能够在 Homestead 目录中运营 bash init.sh 命令来创建 Homesstead.yaml 配置文件。 Homesstead.yaml 文件会被停放在你的 Homestead 目录中:

// Mac / Linux...
bash init.sh

// Windows...
init.bat

配置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

配置 Homestead

安装Tesseract

下一步是安装Tesseract

因为Homestead Improved 使用debian,大家得以在应用vagrant ssh登录设想机后使用apt-get 来安装它,简单运转如下命令:

sudo apt-get install tesseract-ocr

正如上文提到的,在the README中有别的的操作系统对应教程。

安排你的提供者

Homestead.yaml 中的 provider 参数设置决意于你用的是哪二个 Vagrant 提供者 virtualbox 、vmware_fusion 、vmware_workstation 大概parallels。你能够依附本人的实际上境况来安装提供者:

provider: virtualbox

测量试验并定制安装

小编们将采取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(正确的)。

能够因而重复上述进度来使用大肆语言。

布署分享文件夹

你能够在 Homestead.yaml 文件的 folders 属性里列出装有想与 Homestead 意况分享的公文夹。这一个文件夹中的文件若有变动,它们将会在您的本机Computer与 Homestead 情状自动更新同步。你能够在那间安装八个分享文件夹:

folders:
    - map: ~/Code
      to: /home/vagrant/Code

若要运维 NFS ,只要求在分享文件夹的设置值中参与三个粗略的参数:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"
  • 假使利用 NFS ,建议你安装 vagrant-bindfs 插件。 这些插件会替你处理 box 中的文件或目录权限难点。

您也能够在配置中传送任何 Vagrant 分享文件夹 扶持的参数,在 options 配置项下列出它们:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

陈设应用程序

咱们将利用这个库来用PHP使用Tesseract。

咱俩将创立四个极简的web应用:客商上传图片,并查看OC奥迪Q5管理结果。大家将采用Silex microframework 来完结。不要顾虑您不熟知它,那一个应用自己很简短。

记住那篇教程的具有代码都能在Github上获得。

先是步是用Composer来安装信任文件:

composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master

下一场创建四个文件夹:

- public
- uploads
- views

大家需求上传表单(viewsindex.twig):

<html>
  <head>
    <title>OCR</title>
  </head>
  <body>

    <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="upload">
      <input type="submit">
    </form>

  </body>
</html>

亟需贰个结出体现页面(viewsresults.twig)::

<html>
  <head>
    <title>OCR</title>
  </head>
  <body>

    <h2>Results</h2>

    <textarea cols="50" rows="10">{{ text }}</textarea>

    <hr>

    <a href="/">← Go back</a>

  </body>
</html>

最近创设skeleton Silex app (publicindex.php):

<?php 

require __DIR__.'/../vendor/autoload.php'; 

use SymfonyComponentHttpFoundationRequest; 

$app = new SilexApplication(); 

$app->register(new SilexProviderTwigServiceProvider(), [
  'twig.path' => __DIR__.'/../views',
]);

$app['debug'] = true; 

$app->get('/', function() use ($app) { 

  return $app['twig']->render('index.twig');

}); 

$app->post('/', function(Request $request) use ($app) { 

    // TODO

}); 

$app->run();

假设您在浏览器访问那么些动用,你应该能观望一个文件上传表单。借使您在接纳Homestead Improved Vagrant,你能够通过如下链接访谈该应用。

http://homestead.app/

下一步是完毕文件上传。Silex使得那项专门的工作很简单;$request包括多个files组件,咱们能够透过它来获取自由上传的公文,代码:

// Grab the uploaded file
$file = $request->files->get('upload'); 

// Extract some information about the uploaded file
$info = new SplFileInfo($file->getClientOriginalName());

// Create a quasi-random filename
$filename = sprintf('%d.%s', time(), $info->getExtension());

// Copy the file
$file->move(__DIR__.'/../uploads', $filename);

如您所见,大家发出随机文件名来收缩文件名冲突—但在本金和利息用中,我们怎么命名文件是不重大的。一旦大家在地头有一份文件拷贝,大家就能够发生叁个Tessearct库的实例,然后开展分析:

// Instantiate the Tessearct library
$tesseract = new TesseractOCR(__DIR__ . '/../uploads/' . $filename);

在图像上贯彻OCCRUISER万分轻便,大家只需调用方法recognize(State of Qatar。

// Perform OCR on the uploaded image
$text = $tesseract->recognize();

最后大家把结果展现到结果页面:

return $app['twig']->render(
    'results.twig',
    [
        'text'  =>  $text,
    ]
);

在一些图纸上尝试,看看它功能怎么着。假使您有不便,能够参照这个

配置 Nginx 站点

对 Nginx 面生吗?无妨。sites 属性能够支持您能够从心所欲钦命叁个 域名 来对应到 homestead 境遇中的叁个目录上。在 Homestead.yaml 文件中已带有了一个网址设置范本。相符的,你也得以追加多少个网址到您的 Homestead 意况中。 Homestead 能够何况为多个 Laravel 应用提供虚构化情形:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

假诺您在 Homestead box 配置之后改良了 sites 属性,那么应该再次运维vagrant reload --provision 来更新 Nginx 配置到虚构机上。

二个其实的例子

让大家来看OC中华V三个更实用的例子。在本例中,大家品尝在图像中找到七个格式化的电话号码。

探访上面一幅图,上传到你的利用:

图片 2

结果应该如下:

:ii‘i
Customer Service Helplines

British Airways Helpline

09040 490 541

它并没有挑出本文文本,这是大家能料到的,因为图片品质太差。即便识别了数码可是也会有一部分“噪声”。

为了提取相关消息,犹如下几件事大家能够做。

您可以让Tesseract 把它的结果限定在早晚的字符集内,所以大家报告它只回去数字型的开始和结果代码如下:

$tesseract->setWhitelist(range(0,9));

但与上述同类有个难点。它时时把非数字字符解释成数字而非忽视它们。比方“Bob”可能被解说称数字“808”。

因此我们利用两步处理。

  1. 品味提取大概是电话号码的数字串。
  2. 用八个库更动评估每一个候选字符,一旦找到贰个一蹴而就电话号码则结束。

率先步,大家能够用二个主旨的正则表明式。能够用谷歌(GoogleState of Qatar电话库来规定一个数字串是还是不是是合法电话号码。

备注:笔者已在Sitepoint 写过关于Google电话库的剧情。

让大家给谷歌(Google卡塔尔(قطر‎电话库增添叁个PHP 端口,改正composer.json,增加:

"giggsey/libphonenumber-for-php": "~7.0"

别忘了升级:

composer update

当今大家得以写二个函数,输入为一个字符串,尝试提取叁个法定的电话号码

/**
 * Parse a string, trying to find a valid telephone number. As soon as it finds a 
 * valid number, it'll return it in E1624 format. If it can't find any, it'll 
 * simply return NULL.
 * 
 * @param  string   $text           The string to parse
 * @param  string   $country_code   The two digit country code to use as a "hint"
 * @return string | NULL
 */
function findPhoneNumber($text, $country_code = 'GB') {

  // Get an instance of Google's libphonenumber
  $phoneUtil = libphonenumberPhoneNumberUtil::getInstance();

  // Use a simple regular expression to try and find candidate phone numbers
  preg_match_all('/(+d+)?s*((d+))?([s-]?d+)+/', $text, $matches);

  // Iterate through the matches
  foreach ($matches as $match) {

    foreach ($match as $value) {

      try {

        // Attempt to parse the number
        $number = $phoneUtil->parse(trim($value), $country_code);    

        // Just because we parsed it successfully, doesn't make it vald - so check it
        if ($phoneUtil->isValidNumber($number)) {

          // We've found a telephone number. Format using E.164, and exit
          return $phoneUtil->format($number, libphonenumberPhoneNumberFormat::E164);

        }

      } catch (libphonenumberNumberParseException $e) {

        // Ignore silently; getting here simply means we found something that isn't a phone number

      }

    }
  }

  return null;

}

瞩望注释能分解那些函数在干什么。注意纵然那几个库未能从字符串中解析出三个法定的电话号码它会抛出二个老大。那不是怎样难题;我们直接忽视它并卫冕下四个候选字符。

设若大家找到三个电话号码,大家以E.164的花样重返它。那提供了多个国际化的编号,大家得以用来打电话只怕发送SMS。

现今我们得以如下使用:

$text = $tesseract->recognize();

$number = findPhoneNumber($text, 'GB');

小编们需求给谷歌(Google卡塔尔国电话库提供叁个晋升来申明这么些编号是哪些国家的。你也可以改成你和谐的国度。

咱俩把具备的那几个包裹在二个新的路由中:

$app->post('/identify-telephone-number', function(Request $request) use ($app) { 

  // Grab the uploaded file
  $file = $request->files->get('upload'); 

  // Extract some information about the uploaded file
  $info = new SplFileInfo($file->getClientOriginalName());

  // Create a quasi-random filename
  $filename = sprintf('%d.%s', time(), $info->getExtension());

  // Copy the file
  $file->move(__DIR__.'/../uploads', $filename); 

  // Instantiate the Tessearct library
  $tesseract = new TesseractOCR(__DIR__ . '/../uploads/' . $filename);

  // Perform OCR on the uploaded image
  $text = $tesseract->recognize();

  $number = findPhoneNumber($text, 'GB');

  return $app->json(
    [
      'number'     =>  $number,
    ]
  );

});

大家现在有大概的API的底蕴—-也正是JSON响应-—我们得以用来作为二个简短的活动应用的后端,那款应用能够用来从一幅图中增加关系人,打电话。

关于 Hosts 文件

您一定要就要 Nginx sites 中所增加的「域名」也助长到你本机Computer的 hosts 上。 hosts 文件会将倡议重定向至 Homestead 条件中设置的本地域名。在 Mac 或 Linux 上,该公文平常会寄放在 /etc/hosts。在 Windows 上,则贮存于 C:WindowsSystem32driversetchosts。设置剧情如下所示:

192.168.10.10  homestead.app

请必需确认 IP 地址与 Homestead.yaml 文件中安装的等同。将域名设置在 hosts 文件今后,你就足以因此网页浏览器访谈你的网址。

http://homestead.app

总结

OCEnclave有成都百货上千应用——何况超级轻易整合进你的行使(超过你的料想)。本文中,大家设置了开源OCKoleos包;并使用叁个卷入器库,把它整合进一个非常轻松的PHP应用。大家只是触及到了有着大概性的外表,希望那能给您有的主张,帮你想一想怎么在您自身的运用中央银行使OCSportage。

启动 Vagrant Box

基于你的喜好成功 Homestead.yaml 编辑后,步入你的 Homestead 目录并运行vagrant up 命令。 Vagrant 就能基于 Homestead.yaml 里的安排新闻运转,并为设想机设置分享文件夹和 Nginx 网址。

设若要移除虚构机,你能够利用 vagrant destroy --force 命令

为种种种类分别安装

除开在大局范围内设置 Homestead 情形,全体类型分享相似的 Homestead box 外,你还是能为每贰个类型配置一个独门的 Homestead 实例。通过传递 Vagrantfile ,能够完成为种种门类分别设置上 Homestead ,别的体系成员只供给通过轻易的 vagrant up 即能跟你抱有同等的 Homestead 景况。

要将 Homestead 直接设置到品种中,须求动用 Composer:

composer require laravel/homestead --dev

假诺 Homestead 安装完毕,能够使用 make 命令生成 Vagrantfile 与 Homestead.yaml 文件,并贮存于项目标根目录。make 命令将会活动在 Homestead.yaml 文件中布局 sites 及 folders

Mac / Linux:

php vendor/bin/homestead make

Windows:

vendor\bin\homestead make

接下去,在命令行中运营 vagrant up 并由此网页浏览器访谈 http://homestead.app。再次提示:你如故必要在 /etc/hosts 里配置 homestead.app 或此外想要使用的域名。

假如你希望利用 MariaDB 来替换 MySQL,你能够在 Homestead.yaml 文件中加进二个 mariadb 的选项,那些选项会移除 MySQL 并设置 MariaDB。因为 玛丽亚DB 可用作 MySQL 的取代品,所以在你的数据库配置新闻里,可世襲运用 mysql 数据库驱动。

box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
  • 设置 玛丽亚DB 供给连续境外网络,请保管网络流畅!

广泛用法

大局使用

临时你愿意在文件系统的别的地点都得以采纳 vagrant up 命令运营虚构机,那么你需求增添以下代码到您的 Mac / Linux 系统的 Bash profile 文件之中。对于 Windows 系统,您能够由此在 PATH 意况变量中加多「批管理」文件的艺术来得以完毕此指标。下边那一个本子让您可以在文件系统的别的职分都能运行Vagrant 命令,它一定于切换来 Homestead 目录运维 Vagrant 命令:

Mac / Linux
function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

请将 ~/Homestead 这些渠道改过为您的实际上 Homestead 的安装路线,一旦那个函数安装成功,就足以在系统的人身自由地点运转 homestead up 或 homestead ssh 命令。

Windows

在系统的放肆地方创制二个批管理文件 homestead.bat ,并加上如下内容:

@echo off

set cwd=%cd%
set homesteadVagrant=C:Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

请确定保障将 C:Homestead 这几个门路改进为您的莫过于 Homestead 的设置路线,创制完这一个文件后,将那些文件路线增添到 PATH 处境变量中,就足以在系统的任性地方运转 homestead up 或 homestead ssh 命令。

搜索