PHP使用OCR技術(shù)實(shí)現(xiàn)識(shí)別圖片中的文字
在日常開(kāi)發(fā)中,我們常常會(huì)遇到需要從圖片中提取文字的需求,例如處理掃描件中的文字、驗(yàn)證碼識(shí)別或者實(shí)現(xiàn)文檔數(shù)字化管理。OCR(Optical Character Recognition,光學(xué)字符識(shí)別)技術(shù)可以幫助我們快速完成這項(xiàng)任務(wù)。今天就來(lái)聊聊,如何在 PHP 中實(shí)現(xiàn) OCR 技術(shù),從圖片中提取文字。
一、什么是OCR技術(shù)
OCR 是一種通過(guò)圖像處理技術(shù)從圖片或掃描件中提取文字的技術(shù),它可以將非結(jié)構(gòu)化的圖片內(nèi)容轉(zhuǎn)化為可編輯的文本。這種技術(shù)廣泛應(yīng)用于以下場(chǎng)景:
- 證件掃描識(shí)別(如身份證、駕照等)
- 文檔數(shù)字化存儲(chǔ)
- 圖片驗(yàn)證碼識(shí)別
- 發(fā)票、票據(jù)處理
二、PHP如何實(shí)現(xiàn)OCR
盡管 PHP 本身并不提供原生的 OCR 支持,但可以通過(guò)以下幾種方式輕松實(shí)現(xiàn) OCR:
- 使用開(kāi)源 OCR 引擎,如 Tesseract-OCR。
- 調(diào)用第三方 OCR 服務(wù)(如百度智能云、阿里云、騰訊云等)。
下面我們通過(guò) Tesseract-OCR 和百度 OCR API 兩種方式,手把手教你實(shí)現(xiàn)圖片文字識(shí)別功能。
三、方法一:使用 Tesseract-OCR
1. 什么是 Tesseract-OCR
Tesseract 是 Google 提供的一個(gè)開(kāi)源 OCR 引擎,它支持多種語(yǔ)言的文字識(shí)別,包括中文,且可以通過(guò)簡(jiǎn)單的命令行或程序語(yǔ)言調(diào)用。
2. 環(huán)境準(zhǔn)備
安裝 Tesseract
根據(jù)你的系統(tǒng)類型安裝 Tesseract:
Ubuntu/Linux
sudo apt update sudo apt install tesseract-ocr sudo apt install tesseract-ocr-chi-sim # 安裝中文語(yǔ)言包
MacOS
brew install tesseract brew install tesseract-lang
Windows 前往 Tesseract 官方下載頁(yè)面 下載并安裝。
3. PHP與Tesseract集成
安裝 PHP 擴(kuò)展
通過(guò) Composer 安裝適配 Tesseract 的 PHP 庫(kù),例如 thiagoalessio/tesseract_ocr
:
composer require thiagoalessio/tesseract_ocr
示例代碼
以下是一個(gè)簡(jiǎn)單的圖片文字識(shí)別示例:
<?php require 'vendor/autoload.php'; use thiagoalessio\TesseractOCR\TesseractOCR; // 選擇圖片 $imagePath = 'test-image.png'; // 初始化 Tesseract $ocr = new TesseractOCR($imagePath); // 設(shè)置語(yǔ)言(中文) $ocr->lang('chi_sim'); // 簡(jiǎn)體中文 $result = $ocr->run(); echo "識(shí)別結(jié)果:\n"; echo $result;
運(yùn)行后,如果 test-image.png
中包含文字,Tesseract 將會(huì)提取并輸出文本內(nèi)容。
四、方法二:調(diào)用百度OCR API
如果你希望更快速、更精準(zhǔn)的識(shí)別效果,使用云服務(wù)是個(gè)不錯(cuò)的選擇。這里以 百度智能云 OCR 為例。
1. 注冊(cè)百度智能云
- 訪問(wèn) 百度智能云 OCR 服務(wù)。
- 注冊(cè)賬號(hào)并創(chuàng)建應(yīng)用,獲取
API Key
和Secret Key
。
2. 安裝 HTTP 請(qǐng)求庫(kù)
推薦使用 Guzzle
發(fā)送 HTTP 請(qǐng)求。安裝方式如下:
composer require guzzlehttp/guzzle
3. 獲取 Access Token
百度 API 的訪問(wèn)需要使用 Access Token。以下是獲取 Token 的代碼:
<?php require 'vendor/autoload.php'; use GuzzleHttp\Client; function getAccessToken($apiKey, $secretKey) { $client = new Client(); $response = $client->post('https://aip.baidubce.com/oauth/2.0/token', [ 'form_params' => [ 'grant_type' => 'client_credentials', 'client_id' => $apiKey, 'client_secret' => $secretKey, ] ]); $data = json_decode($response->getBody(), true); return $data['access_token'] ?? null; } $apiKey = '你的API Key'; $secretKey = '你的Secret Key'; $token = getAccessToken($apiKey, $secretKey); echo "Access Token: $token\n";
4. 調(diào)用百度 OCR 接口
使用獲得的 Token 調(diào)用 OCR 接口,完成圖片文字識(shí)別:
<?php require 'vendor/autoload.php'; use GuzzleHttp\Client; function recognizeText($imagePath, $accessToken) { $client = new Client(); // 讀取圖片并進(jìn)行 Base64 編碼 $imageData = base64_encode(file_get_contents($imagePath)); $response = $client->post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic', [ 'headers' => [ 'Content-Type' => 'application/x-www-form-urlencoded', ], 'query' => [ 'access_token' => $accessToken, ], 'form_params' => [ 'image' => $imageData, ], ]); $data = json_decode($response->getBody(), true); return $data['words_result'] ?? []; } $imagePath = 'test-image.png'; $accessToken = '你的Access Token'; $result = recognizeText($imagePath, $accessToken); echo "識(shí)別結(jié)果:\n"; foreach ($result as $item) { echo $item['words'] . "\n"; }
五、比較兩種方案
特點(diǎn) | Tesseract-OCR | 百度智能云 OCR |
---|---|---|
適用場(chǎng)景 | 本地離線識(shí)別 | 在線云服務(wù),支持大規(guī)模處理 |
語(yǔ)言支持 | 多語(yǔ)言(需安裝對(duì)應(yīng)語(yǔ)言包) | 多語(yǔ)言自動(dòng)識(shí)別 |
識(shí)別精度 | 精度一般,取決于圖片質(zhì)量 | 精度高,適合復(fù)雜場(chǎng)景 |
復(fù)雜度 | 安裝配置簡(jiǎn)單 | 需聯(lián)網(wǎng),稍復(fù)雜 |
費(fèi)用 | 免費(fèi) | 部分功能收費(fèi) |
六、總結(jié)
通過(guò)以上兩種方案,PHP 開(kāi)發(fā)者可以輕松實(shí)現(xiàn) OCR 技術(shù)在項(xiàng)目中的應(yīng)用:
- 對(duì)于小型、本地化需求,Tesseract 是一個(gè)不錯(cuò)的選擇。
- 對(duì)于需要高精度、多功能的場(chǎng)景,云服務(wù)(如百度智能云 OCR)更為合適。
到此這篇關(guān)于PHP使用OCR技術(shù)實(shí)現(xiàn)識(shí)別圖片中的文字的文章就介紹到這了,更多相關(guān)PHP OCR識(shí)別圖片文字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP/Javascript/CSS/jQuery常用知識(shí)大全詳細(xì)整理
PHP/Javascript/CSS/jQuery常用知識(shí)大全詳細(xì)整理(原創(chuàng))感興趣的朋友可以參考下2013-01-01基于php雙引號(hào)中訪問(wèn)數(shù)組元素報(bào)錯(cuò)的解決方法
下面小編就為大家分享一篇基于php雙引號(hào)中訪問(wèn)數(shù)組元素報(bào)錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Swoole 1.10.0新版本發(fā)布,增加了多項(xiàng)新特性
最近Swoole 1.10.0版本發(fā)布了,增加多項(xiàng)新特性,所以下面這篇文章主要給大家介紹了關(guān)于Swoole 1.10.0版本中新特性的相關(guān)資料,分享出來(lái)供大家參考學(xué)習(xí),需要的朋友可以參考下2018-01-01php模式設(shè)計(jì)之觀察者模式應(yīng)用實(shí)例分析
這篇文章主要介紹了php模式設(shè)計(jì)之觀察者模式,結(jié)合實(shí)例形式分析了php觀察者模式的原理、應(yīng)用案例與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09基于PHP輸出緩存(output_buffering)的深入理解
本篇文章是對(duì)PHP輸出緩存(output_buffering)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06