PHP使用OCR技术实现识别图片中的文字
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、什么是OCR技术</a></li><li><a href="#_label1">二、PHP如何实现OCR</a></li><li><a href="#_label2">三、方法一:使用 Tesseract-OCR</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">1. 什么是 Tesseract-OCR</a></li><li><a href="#_lab2_2_1">2. 环境准备</a></li><li><a href="#_lab2_2_2">3. PHP与Tesseract集成</a></li></ul><li><a href="#_label3">四、方法二:调用百度OCR API</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_3">1. 注册百度智能云</a></li><li><a href="#_lab2_3_4">2. 安装 HTTP 请求库</a></li><li><a href="#_lab2_3_5">3. 获取 Access Token</a></li><li><a href="#_lab2_3_6">4. 调用百度 OCR 接口</a></li></ul><li><a href="#_label4">五、比较两种方案</a></li><ul class="second_class_ul"></ul><li><a href="#_label5">六、总结</a></li><ul class="second_class_ul"></ul></ul></div><p>在日常开发中,我们常常会遇到需要从图片中提取文字的需求,例如处理扫描件中的文字、验证码识别或者实现文档数字化管理。OCR(Optical Character Recognition,光学字符识别)技术可以帮助我们快速完成这项任务。今天就来聊聊,如何在 <strong>PHP</strong> 中实现 OCR 技术,从图片中提取文字。</p><p class="maodian"><a name="_label0"></a></p><h2>一、什么是OCR技术</h2>
<p>OCR 是一种通过图像处理技术从图片或扫描件中提取文字的技术,它可以将非结构化的图片内容转化为可编辑的文本。这种技术广泛应用于以下场景:</p>
<ul><li>证件扫描识别(如身份证、驾照等)</li><li>文档数字化存储</li><li>图片验证码识别</li><li>发票、票据处理</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>二、PHP如何实现OCR</h2>
<p>尽管 PHP 本身并不提供原生的 OCR 支持,但可以通过以下几种方式轻松实现 OCR:</p>
<ul><li>使用开源 OCR 引擎,如 <strong>Tesseract-OCR</strong>。</li><li>调用第三方 OCR 服务(如百度智能云、阿里云、腾讯云等)。</li></ul>
<p>下面我们通过 <strong>Tesseract-OCR</strong> 和百度 OCR API 两种方式,手把手教你实现图片文字识别功能。</p>
<p class="maodian"><a name="_label2"></a></p><h2>三、方法一:使用 Tesseract-OCR</h2>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>1. 什么是 Tesseract-OCR</h3>
<p>Tesseract 是 Google 提供的一个开源 OCR 引擎,它支持多种语言的文字识别,包括中文,且可以通过简单的命令行或程序语言调用。</p>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>2. 环境准备</h3>
<p><strong>安装 Tesseract</strong></p>
<p>根据你的系统类型安装 Tesseract:</p>
<p><strong>Ubuntu/Linux</strong></p>
<div class="jb51code"><pre class="brush:bash;">sudo apt update
sudo apt install tesseract-ocr
sudo apt install tesseract-ocr-chi-sim # 安装中文语言包
</pre></div>
<p><strong>MacOS</strong></p>
<div class="jb51code"><pre class="brush:bash;">brew install tesseract
brew install tesseract-lang
</pre></div>
<p><strong>Windows</strong> 前往 <a href="https://github.com/tesseract-ocr/tesseract" target="_blank">Tesseract 官方下载页面</a> 下载并安装。</p>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>3. PHP与Tesseract集成</h3>
<p><strong>安装 PHP 扩展</strong></p>
<p>通过 Composer 安装适配 Tesseract 的 PHP 库,例如 <code>thiagoalessio/tesseract_ocr</code>:</p>
<div class="jb51code"><pre class="brush:bash;">composer require thiagoalessio/tesseract_ocr
</pre></div>
<p><strong>示例代码</strong></p>
<p>以下是一个简单的图片文字识别示例:</p>
<div class="jb51code"><pre class="brush:php;"><?php
require 'vendor/autoload.php';
use thiagoalessio\TesseractOCR\TesseractOCR;
// 选择图片
$imagePath = 'test-image.png';
// 初始化 Tesseract
$ocr = new TesseractOCR($imagePath);
// 设置语言(中文)
$ocr->lang('chi_sim'); // 简体中文
$result = $ocr->run();
echo "识别结果:\n";
echo $result;
</pre></div>
<p>运行后,如果 <code>test-image.png</code> 中包含文字,Tesseract 将会提取并输出文本内容。</p>
<p class="maodian"><a name="_label3"></a></p><h2>四、方法二:调用百度OCR API</h2>
<p>如果你希望更快速、更精准的识别效果,使用云服务是个不错的选择。这里以 <strong>百度智能云 OCR</strong> 为例。</p>
<p class="maodian"><a name="_lab2_3_3"></a></p><h3>1. 注册百度智能云</h3>
<ul><li>访问 百度智能云 OCR 服务。</li><li>注册账号并创建应用,获取 <code>API Key</code> 和 <code>Secret Key</code>。</li></ul>
<p class="maodian"><a name="_lab2_3_4"></a></p><h3>2. 安装 HTTP 请求库</h3>
<p>推荐使用 <code>Guzzle</code> 发送 HTTP 请求。安装方式如下:</p>
<div class="jb51code"><pre class="brush:bash;">composer require guzzlehttp/guzzle
</pre></div>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>3. 获取 Access Token</h3>
<p>百度 API 的访问需要使用 Access Token。以下是获取 Token 的代码:</p>
<div class="jb51code"><pre class="brush:php;"><?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";
</pre></div>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>4. 调用百度 OCR 接口</h3>
<p>使用获得的 Token 调用 OCR 接口,完成图片文字识别:</p>
<div class="jb51code"><pre class="brush:php;"><?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
function recognizeText($imagePath, $accessToken) {
$client = new Client();
// 读取图片并进行 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 "识别结果:\n";
foreach ($result as $item) {
echo $item['words'] . "\n";
}
</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>五、比较两种方案</h2>
<table><tbody><tr><th>特点</th><th>Tesseract-OCR</th><th>百度智能云 OCR</th></tr><tr><td>适用场景</td><td>本地离线识别</td><td>在线云服务,支持大规模处理</td></tr><tr><td>语言支持</td><td>多语言(需安装对应语言包)</td><td>多语言自动识别</td></tr><tr><td>识别精度</td><td>精度一般,取决于图片质量</td><td>精度高,适合复杂场景</td></tr><tr><td>复杂度</td><td>安装配置简单</td><td>需联网,稍复杂</td></tr><tr><td>费用</td><td>免费</td><td>部分功能收费</td></tr></tbody></table>
<p class="maodian"><a name="_label5"></a></p><h2>六、总结</h2>
<p>通过以上两种方案,PHP 开发者可以轻松实现 OCR 技术在项目中的应用:</p>
<ul><li>对于小型、本地化需求,Tesseract 是一个不错的选择。</li><li>对于需要高精度、多功能的场景,云服务(如百度智能云 OCR)更为合适。</li></ul> 感谢分享! 这个帖子很实用,OCR技术在PHP中的应用确实很有帮助。除了提到的两种方法,我还想补充一些经验。在使用Tesseract-OCR时,如果图片质量不高,识别率可能会下降,建议先用PHP的图像处理函数进行预处理,比如调整对比度或灰度化。对于百度OCR API,虽然方便,但要注意API调用频率和成本,可以结合缓存机制优化性能。另外,如果项目需要更高级的功能,比如多语言识别或表格提取,可以考虑其他云服务如Google Cloud Vision,它有PHP SDK支持。大家在实际应用中遇到过什么问题吗?比如识别速度慢或错误率高,我们可以一起交流解决方案。期待更多讨论!
頁:
[1]