<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • PHP怎么從圖像中讀取文字

            這篇文章主要講解了“PHP怎么從圖像中讀取文字”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PHP怎么從圖像中讀取文字”吧!

            成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供和田企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都做網(wǎng)站、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為和田眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

            Tesseract是一個(gè)能實(shí)現(xiàn)OCR的開(kāi)源項(xiàng)目。你能在*Nix系統(tǒng),Mac系統(tǒng)和Windows系統(tǒng)上運(yùn)行這個(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ò)下一部分&mdash;或者查看the README來(lái)獲得在其他*nix上,Mac系統(tǒng)或者Windows的安裝指導(dǎo).

            配置Vagrant

            為了配置Vagrant以跟上本教程,完成如下步驟?;蛘吣阋部梢院?jiǎn)單的從Github獲得代碼。

            輸入以下命令來(lái)下載Homestead Improved Vagrant配置到一個(gè)名為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

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

            sudo apt-get install tesseract-ocr

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

            測(cè)試并定制安裝

            我們將使用PHP包裝,但是之前我們可以在命令行測(cè)試Tesseract。

            首先保存這個(gè)圖片sign.png

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

            tesseract sign.png out

            這將在當(dāng)前文件夾創(chuàng)建一個(gè)文件:out.txt里面應(yīng)該有單詞:CAUTION

            現(xiàn)在嘗試sign2.jpg

            tesseract sign2.jpg out

            這次產(chǎn)生單詞Einbahnstral&rsquo;ie。很接近但不正確&mdash;雖然圖像中的文字相當(dāng)清晰,它沒(méi)能識(shí)別字符&szlig;。

            為了獲使Tesseract正常讀取字符串,我們需要安裝一些新的語(yǔ)言文件&mdash;就本例來(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)的命令但是要用 &ndash;l

            tesseract sign2.jpg out -l deu      “deu” 是德語(yǔ)的 ISO 639-3碼.

            這次,文字應(yīng)該是Einbahnstra&szlig;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

            我們需要上傳表單(views\index.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>

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

            <html>   <head>     <title>OCR</title>   </head>   <body>      <h3>Results</h3>      <textarea cols="50" rows="10">{{ text }}</textarea>      <hr>      <a href="/">&larr; Go back</a>    </body> </html>

            現(xiàn)在建立skeleton Silex app (public\index.php):

            <php  require __DIR__.'/../vendor/autoload.php';  use Symfony\Component\HttpFoundation\Request;  $app = new Silex\Application();  $app->register(new Silex\Provider\TwigServiceProvider(), [   '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)減少文件名沖突&mdash;但在本應(yīng)用中,我們?cè)趺疵募遣恢匾?。一旦我們?cè)诒镜赜幸环菸募截?,我們就可以產(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è)

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

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

            看看下面一幅圖,上傳到你的應(yīng)用:

            PHP怎么從圖像中讀取文字

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

            :ii&lsquo;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”。

            所以我們采用兩步處理。

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

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

            ***步,我們可以用一個(gè)基本的正則表達(dá)式??梢杂霉雀桦娫拵?kù)來(lái)確定一個(gè)數(shù)字串是否是合法電話號(hào)碼。

            備注:我已在Sitepoint 寫過(guò)關(guān)于谷歌電話庫(kù)的內(nèi)容。

            讓我們給谷歌電話庫(kù)添加一個(gè)PHP 端口,修改composer.json,添加:

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

            別忘了升級(jí):

            composer update

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

            /** * 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 = \libphonenumber\PhoneNumberUtil::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, \libphonenumber\PhoneNumberFormat::E164);          }        } catch (\libphonenumber\NumberParseException $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ǔ)&mdash;-也就是JSON響應(yīng)-&mdash;我們可以用來(lái)作為一個(gè)簡(jiǎn)單的移動(dòng)應(yīng)用的后端,這款應(yīng)用可以用來(lái)從一幅圖中添加聯(lián)系人,打電話。

            感謝各位的閱讀,以上就是“PHP怎么從圖像中讀取文字”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PHP怎么從圖像中讀取文字這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

            網(wǎng)站題目:PHP怎么從圖像中讀取文字
            URL標(biāo)題:http://www.jbt999.com/article40/jisjho.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、Google

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

            外貿(mào)網(wǎng)站制作

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 欧美69堂| 欧美一区二区视频在线77777 | 免费看黄色国产一级片 | 国产97色在线 | 亚洲 | 人人操人人靠 |