国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【譯】PHP OCR實(shí)戰(zhàn):用Tesseract從圖像中讀取文字

Miracle / 1904人閱讀

摘要:實(shí)戰(zhàn)用從圖像中讀取文字即光學(xué)字符辨識(shí)是把打印文本轉(zhuǎn)換成一個(gè)數(shù)字表示的過(guò)程。可以用谷歌電話庫(kù)來(lái)確定一個(gè)數(shù)字串是否是合法電話號(hào)碼。現(xiàn)在我們可以如下使用我們需要給谷歌電話庫(kù)提供一個(gè)提示來(lái)說(shuō)明這個(gè)號(hào)碼是哪個(gè)國(guó)家的。

PHP OCR實(shí)戰(zhàn):用Tesseract從圖像中讀取文字

Optical Character Recognition (OCR)即光學(xué)字符辨識(shí)是把打印文本轉(zhuǎn)換成一個(gè)數(shù)字表示的過(guò)程。它有各種各樣的實(shí)際應(yīng)用--從數(shù)字化印刷書(shū)籍、創(chuàng)建收據(jù)的電子記錄,到車牌識(shí)別甚至破解基于圖像的驗(yàn)證碼。

Tesseract是一個(gè)能實(shí)現(xiàn)OCR開(kāi)源項(xiàng)目。你能在*Nix系統(tǒng),Mac系統(tǒng)和Windows系統(tǒng)上跑這個(gè)項(xiàng)目,但是使用一個(gè)庫(kù)的話,我們就能在php項(xiàng)目中使用它了。本教程的目的是教你如何使用。

安裝 準(zhǔn)備

為了讓事情變得簡(jiǎn)單和一致的, 我們將使用虛擬機(jī)(本文使用Vagrant)來(lái)運(yùn)行應(yīng)用程序,這會(huì)涉及到安裝PHP和Nginx,我們將安裝Tesseract來(lái)分別演示過(guò)程。如果你想自己基于現(xiàn)有Debian-based系統(tǒng)安裝Tesseract,你可以跳過(guò)下一部分—或者查看the README來(lái)獲得在其他*nix上,Mac系統(tǒng)或者Windows的安裝指導(dǎo).

配置Vagrant

為了配置Vagrant以跟上本教程,完成如下步驟。或者你也可以簡(jiǎn)單的從Github獲得代碼。

輸入以下命令來(lái)下載Homestead Improved Vagrant配置到一個(gè)文件夾 ocr:

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

因?yàn)镠omestead Improved 使用debian,我們可以在使用vagrant ssh登陸虛擬機(jī)后使用apt-get 來(lái)安裝它,簡(jiǎn)單如下:

sudo apt-get install tesseract-ocr

正如上文提到的,此處有其他的操作系統(tǒng)對(duì)應(yīng)教程。

測(cè)試并定制安裝

我們將使用PHP包裝,但是之前我們可以在命令行測(cè)試Tesseract。
首先保存這個(gè)圖片sign.png (圖片由剪紙藝術(shù)熊貓?zhí)峁?

在虛擬機(jī)中,執(zhí)行如下命令來(lái)從圖片中讀取文字

tesseract sign.png out

這將在當(dāng)前文件夾創(chuàng)建一個(gè)文件:out.txt里面應(yīng)該有單詞:CAUTION
現(xiàn)在嘗試sign2.jpg,連接如下:
https://s3.amazonaws.com/f.cl...

tesseract sign2.jpg out

這次產(chǎn)生單詞Einbahnstral’ie。很接近但不正確—雖然圖像中的文字相當(dāng)清晰,它沒(méi)能識(shí)別?
為了獲使Tesseract正常讀取字符串,我們需要安裝一些新的語(yǔ)言文件—就本例來(lái)說(shuō),德語(yǔ)。
這里有一個(gè)全面的可用語(yǔ)言文件列表,但我們直接下載所需的文件:

wget https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.deu.tar.gz

解壓:

tar zxvf tesseract-ocr-3.02.deu.tar.gz

然后把文件復(fù)制到如下目錄:

/usr/share/tesseract-ocr/tessdata

舉例

cp deu-frak.traineddata /usr/share/tesseract-ocr/tessdata
cp deu.traineddata /usr/share/tesseract-ocr/tessdata

現(xiàn)在我們?cè)俅螆?zhí)行原來(lái)的命令但是要用 –l

tesseract sign2.jpg out -l deu

“deu” 是德語(yǔ)的 ISO 639-3碼.
這次,文字應(yīng)該是Einbahnstra?e(正確的)。
可以通過(guò)重復(fù)上述過(guò)程來(lái)使用任意語(yǔ)言。

配置應(yīng)用程序

我們將使用這個(gè)庫(kù)來(lái)用PHP使用Tesseract。
我們將建立一個(gè)極簡(jiǎn)的web應(yīng)用:用戶上傳圖片,并查看OCR處理結(jié)果。我們將使用Silex microframework 來(lái)實(shí)現(xiàn)。不要擔(dān)心你不熟悉它,這個(gè)應(yīng)用本身很簡(jiǎn)單。
記住這篇教程的所有代碼都能在Github上獲得。
第一步是用Composer來(lái)安裝依賴文件:

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

然后建立三個(gè)文件夾:

- public
- uploads
- views

我們需要上傳表單(viewsindex.twig):


  
    OCR
  
  
    

需要一個(gè)結(jié)果展示頁(yè)面(viewsresults.twig)::


  
    OCR
  
  
    

Results


← Go back

現(xiàn)在建立skeleton Silex app (publicindex.php):

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();

如果你在瀏覽器訪問(wèn)這個(gè)應(yīng)用,你應(yīng)該能看到一個(gè)文件上傳表單。如果你在使用
Homestead Improved Vagrant,你可以通過(guò)如下鏈接訪問(wèn)該應(yīng)用。

http://homestead.app/

下一步是實(shí)現(xiàn)文件上傳。Silex使得這項(xiàng)工作非常簡(jiǎn)單;
$request包含一個(gè)files組件,我們可以通過(guò)它來(lái)獲得任意上傳的文件,代碼:

// 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); 

如你所見(jiàn),我們產(chǎn)生隨機(jī)文件名來(lái)減少文件名沖突—但在本應(yīng)用中,我們?cè)趺疵募遣恢匾摹?br>一旦我們?cè)诒镜赜幸环菸募截悾覀兙涂梢援a(chǎn)生一個(gè)Tessearct庫(kù)的實(shí)例,然后進(jìn)行分析:

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

在圖像上實(shí)現(xiàn)OCR相當(dāng)簡(jiǎn)單,我們只需調(diào)用方法recognize()。

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

最后我們把結(jié)果展示到結(jié)果頁(yè)面:

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

在一些圖片上嘗試,看看它效果怎樣。如果你有困難,可以參考

一個(gè)實(shí)際的例子

讓我們來(lái)看OCR一個(gè)更實(shí)用的例子。在本例中,我們嘗試在圖像中找到一個(gè)格式化的電話號(hào)碼。
看看下面一幅圖,上傳到你的應(yīng)用:

結(jié)果應(yīng)該如下:

:ii‘i
Customer Service Helplines

British Airways Helpline
09040 490 541

它沒(méi)有挑出正文文本,這是我們能料到的,因?yàn)閳D片質(zhì)量太差。雖然識(shí)別了號(hào)碼但是也有一些“噪聲”。
為了提取相關(guān)信息,有如下幾件事我們可以做。
你可以讓Tesseract 把它的結(jié)果限制在一定的字符集內(nèi),所以我們告訴它只返回?cái)?shù)字型的內(nèi)容代碼如下:

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

但這樣有個(gè)問(wèn)題。它常常把非數(shù)字字符解釋成數(shù)字而非忽略它們。比如“Bob”可能被解釋稱數(shù)字“808”。
所以我們采用兩步處理。

嘗試提取可能是電話號(hào)碼的數(shù)字串。

用一個(gè)庫(kù)輪流評(píng)估每一個(gè)候選字符,一旦找到一個(gè)有效電話號(hào)碼則停止。

第一步,我們可以用一個(gè)基本的正則表達(dá)式。可以用谷歌電話庫(kù)來(lái)確定一個(gè)數(shù)字串是否是合法電話號(hào)碼。
備注:我已在Sitepoint 寫(xiě)過(guò)關(guān)于谷歌電話庫(kù)的內(nèi)容:文章
讓我們給谷歌電話庫(kù)添加一個(gè)PHP 端口,修改composer.json,添加:

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

別忘了升級(jí):

composer update

現(xiàn)在我們可以寫(xiě)一個(gè)函數(shù),輸入為一個(gè)字符串,嘗試提取一個(gè)合法的電話號(hào)碼

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;
    }



希望注釋能解釋這個(gè)函數(shù)在干什么。注意如果這個(gè)庫(kù)沒(méi)能從字符串中解析出一個(gè)合法的電話號(hào)碼它會(huì)拋出一個(gè)異常。這不是什么問(wèn)題;我們直接忽略它并繼續(xù)下一個(gè)候選字符。
如果我們找到一個(gè)電話號(hào)碼,我們以E.164的形式返回它。這提供了一個(gè)國(guó)際化的號(hào)碼,我們可以用來(lái)打電話或者發(fā)送SMS。
現(xiàn)在我們可以如下使用:

text = $tesseract->recognize();
$number = findPhoneNumber($text, "GB");

我們需要給谷歌電話庫(kù)提供一個(gè)提示來(lái)說(shuō)明這個(gè)號(hào)碼是哪個(gè)國(guó)家的。你也可以改成你自己的國(guó)家。
我們把所有的這些打包在一個(gè)新的路由中:

$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,
    ]
  );
}); 

我們現(xiàn)在有簡(jiǎn)單的API的基礎(chǔ)—-也就是JSON響應(yīng)-—我們可以用來(lái)作為一個(gè)簡(jiǎn)單的移動(dòng)應(yīng)用的后端,這款應(yīng)用可以用來(lái)從一幅圖中添加聯(lián)系人,打電話。

總結(jié)

OCR有許多應(yīng)用—并且很容易整合進(jìn)你的應(yīng)用(超過(guò)你的預(yù)期)。本文中,我們安裝了開(kāi)源OCR包;并使用一個(gè)包裝器庫(kù),把它整合進(jìn)一個(gè)非常簡(jiǎn)單的PHP應(yīng)用。我們只是觸及到了所有可能性的表面,希望這能給你一些想法,幫你想想怎么在你自己的應(yīng)用中使用OCR。

標(biāo)記:captcha, ocr, OOPHP, PHP, robot vision, silex, tesseract, twig

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21379.html

相關(guān)文章

  • []OpenCV OCR and text recognition with Tesseract

    摘要:納入深度學(xué)習(xí)模型來(lái)進(jìn)一步提升準(zhǔn)確率只是時(shí)間問(wèn)題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來(lái)。最新版本支持基于深度學(xué)習(xí)的,準(zhǔn)確率顯著提高。該函數(shù)使用基于深度學(xué)習(xí)的文本檢測(cè)器來(lái)檢測(cè)不是識(shí)別圖像中的文本區(qū)域。高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。 By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character ...

    gnehc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<