当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用OCR技术实现识别图片中的文字

发布:smiling 来源: PHP粉丝网  添加日期:2025-12-12 10:29:18 浏览: 评论:0 

在日常开发中,我们常常会遇到需要从图片中提取文字的需求,例如处理扫描件中的文字、验证码识别或者实现文档数字化管理。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

  1. sudoapt update 
  2.  
  3. sudoapt installtesseract-ocr 
  4.  
  5. sudoapt installtesseract-ocr-chi-sim # 安装中文语言包 

MacOS

  1. brew installtesseract 
  2.  
  3. brew installtesseract-lang 

Windows 前往 Tesseract 官方下载页面 下载并安装。

3. PHP与Tesseract集成

安装 PHP 扩展

通过 Composer 安装适配 Tesseract 的 PHP 库,例如 thiagoalessio/tesseract_ocr:

  1. composer require thiagoalessio/tesseract_ocr 

示例代码

以下是一个简单的图片文字识别示例:

  1. <?php 
  2.  
  3. require'vendor/autoload.php'
  4.  
  5. usethiagoalessio\TesseractOCR\TesseractOCR; 
  6.  
  7. // 选择图片 
  8.  
  9. $imagePath'test-image.png'
  10.  
  11. // 初始化 Tesseract 
  12.  
  13. $ocr= newTesseractOCR($imagePath); 
  14.  
  15. // 设置语言(中文) 
  16.  
  17. $ocr->lang('chi_sim'); // 简体中文 
  18.  
  19. $result$ocr->run(); 
  20.  
  21. echo"识别结果:\n"
  22.  
  23. echo$result
运行后,如果 test-image.png 中包含文字,Tesseract 将会提取并输出文本内容。

四、方法二:调用百度OCR API

如果你希望更快速、更精准的识别效果,使用云服务是个不错的选择。这里以 百度智能云 OCR 为例。

1. 注册百度智能云

访问 百度智能云 OCR 服务。

注册账号并创建应用,获取 API Key 和 Secret Key。

2. 安装 HTTP 请求库

推荐使用 Guzzle 发送 HTTP 请求。安装方式如下:

  1. composer require guzzlehttp/guzzle 

3. 获取 Access Token

百度 API 的访问需要使用 Access Token。以下是获取 Token 的代码:

  1. <?php 
  2.  
  3. require'vendor/autoload.php'
  4.  
  5. useGuzzleHttp\Client; 
  6.  
  7. functiongetAccessToken($apiKey$secretKey) { 
  8.  
  9. $client= newClient(); 
  10.  
  11. $response$client->post('https://aip.baidubce.com/oauth/2.0/token', [ 
  12.  
  13. 'form_params'=> [ 
  14.  
  15. 'grant_type'=> 'client_credentials'
  16.  
  17. 'client_id'=> $apiKey
  18.  
  19. 'client_secret'=> $secretKey
  20.  
  21.  
  22. ]); 
  23.  
  24. $data= json_decode($response->getBody(), true); 
  25.  
  26. return$data['access_token'] ?? null; 
  27.  
  28.  
  29. $apiKey'你的API Key'
  30.  
  31. $secretKey'你的Secret Key'
  32.  
  33. $token= getAccessToken($apiKey$secretKey); 
  34.  
  35. echo"Access Token: $token\n"

4. 调用百度 OCR 接口

使用获得的 Token 调用 OCR 接口,完成图片文字识别:

  1. <?php 
  2.  
  3. require'vendor/autoload.php'
  4.  
  5. useGuzzleHttp\Client; 
  6.  
  7. functionrecognizeText($imagePath$accessToken) { 
  8.  
  9. $client= newClient(); 
  10.  
  11. // 读取图片并进行 Base64 编码 
  12.  
  13. $imageDatabase64_encode(file_get_contents($imagePath)); 
  14.  
  15. $response$client->post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic', [ 
  16.  
  17. 'headers'=> [ 
  18.  
  19. 'Content-Type'=> 'application/x-www-form-urlencoded'
  20.  
  21. ], 
  22.  
  23. 'query'=> [ 
  24.  
  25. 'access_token'=> $accessToken
  26.  
  27. ], 
  28.  
  29. 'form_params'=> [ 
  30.  
  31. 'image'=> $imageData
  32.  
  33. ], 
  34.  
  35. ]); 
  36.  
  37. $data= json_decode($response->getBody(), true); 
  38.  
  39. return$data['words_result'] ?? []; 
  40.  
  41.  
  42. $imagePath'test-image.png'
  43.  
  44. $accessToken'你的Access Token'
  45.  
  46. $result= recognizeText($imagePath$accessToken); 
  47.  
  48. echo"识别结果:\n"
  49.  
  50. foreach($resultas$item) { 
  51.  
  52. echo$item['words'] . "\n"
  53.  
五、比较两种方案

特点 Tesseract-OCR 百度智能云 OCR

适用场景 本地离线识别 在线云服务,支持大规模处理

语言支持 多语言(需安装对应语言包) 多语言自动识别

识别精度 精度一般,取决于图片质量 精度高,适合复杂场景

复杂度 安装配置简单 需联网,稍复杂

费用 免费 部分功能收费

六、总结

通过以上两种方案,PHP 开发者可以轻松实现 OCR 技术在项目中的应用:

对于小型、本地化需求,Tesseract 是一个不错的选择。

对于需要高精度、多功能的场景,云服务(如百度智能云 OCR)更为合适。

Tags: PHP识别图片文字 OCR识别图片文字

分享到: