目录
一、什么是OCR技术二、PHP如何实现OCR三、方法一:使用 Tesseract-OCR1. 什么是 Tesseract-OCR2. 环境准备3. PHP与Tesseract集成四、方法二:调用百度OCR API1. 注册百度智能云2. 安装 HTTP 请求库3. 获取 Access Token4. 调用百度 OCR 接口五、比较两种方案六、总结在日常开发中,我们常常会遇到需要从图片中提取文字的需求,例如处理扫描件中的文字、验证码识别或者实现文档数字化管理。OCR(Optical Character Recognition,光学字符识别)技术可以帮助我们快速完成这项任务。今天就来聊聊,如何在 PHP 中实现 OCR 技术,从图片中提取文字。
一、什么是OCR技术
OCR 是一种通过图像处理技术从图片或扫描件中提取文字的技术,它可以将非结构化的图片内容转化为可编辑的文本。这种技术广泛应用于以下场景:
证件扫描识别(如身份证、驾照等)文档数字化存储图片验证码识别发票、票据处理二、PHP如何实现OCR
尽管 PHP 本身并不提供原生的 OCR 支持,但可以通过以下几种方式轻松实现 OCR:
使用开源 OCR 引擎,如 Tesseract-OCR。调用第三方 OCR 服务(如百度智能云、阿里云、腾讯云等)。下面我们通过 Tesseract-OCR 和百度 OCR API 两种方式,手把手教你实现图片文字识别功能。
三、方法一:使用 Tesseract-OCR
1. 什么是 Tesseract-OCR
Tesseract 是 Google 提供的一个开源 OCR 引擎,它支持多种语言的文字识别,包括中文,且可以通过简单的命令行或程序语言调用。
2. 环境准备
安装 Tesseract
根据你的系统类型安装 Tesseract:
Ubuntu/Linux
sudo apt updatesudo apt install tesseract-ocrsudo apt install tesseract-ocr-chi-sim # 安装中文语言包
MacOS
brew install tesseractbrew install tesseract-lang
Windows 前往 Tesseract 官方下载页面 下载并安装。
3. PHP与Tesseract集成
安装 PHP 扩展
通过 Composer 安装适配 Tesseract 的 PHP 库,例如 thiagoalessio/tesseract_ocr
:
composer require thiagoalessio/tesseract_ocr
示例代码
以下是一个简单的图片文字识别示例:
<?phprequire '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;
运行后,如果 test-image.png
中包含文字,Tesseract 将会提取并输出文本内容。
四、方法二:调用百度OCR API
如果你希望更快速、更精准的识别效果,使用云服务是个不错的选择。这里以 百度智能云 OCR 为例。
1. 注册百度智能云
访问 百度智能云 OCR 服务。注册账号并创建应用,获取API Key
和 Secret Key
。2. 安装 HTTP 请求库
推荐使用 Guzzle
发送 HTTP 请求。安装方式如下:
composer require guzzlehttp/guzzle
3. 获取 Access Token
百度 API 的访问需要使用 Access Token。以下是获取 Token 的代码:
<?phprequire '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. 调用百度 OCR 接口
使用获得的 Token 调用 OCR 接口,完成图片文字识别:
<?phprequire '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://www.txwjcyj.com/zb_users/upload/php/qvgrcaxapcu502.jpg';$accessToken = '你的Access Token';$result = recognizeText($imagePath, $accessToken);echo "识别结果:\n";foreach ($result as $item) { echo $item['words'] . "\n";}
五、比较两种方案
六、总结
通过