菜鸟-创作你的创作

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

下面我用**「原理 → 技术路线 → 实战代码 → 提升识别率 → 常见坑」**的方式,系统讲清楚
👉 PHP 使用 OCR 技术识别图片文字的完整方案


一、OCR 是怎么工作的?(先有全局认知)

**OCR(Optical Character Recognition,光学字符识别)**核心流程:

  1. 图像预处理(灰度化、去噪、二值化)
  2. 文字区域检测
  3. 字符切割
  4. 字符识别(CNN / Transformer)
  5. 后处理(纠错、语言模型)

👉 PHP 不负责训练模型,只负责 调用 OCR 引擎 / API


二、PHP 可选的 OCR 技术路线(重点)

方案对比一览

方案准确率成本适合场景
Tesseract(本地)⭐⭐⭐⭐免费服务器可控
百度 OCR API⭐⭐⭐⭐⭐按量中文强
腾讯云 OCR⭐⭐⭐⭐⭐按量表格/票据
阿里云 OCR⭐⭐⭐⭐按量商用
PaddleOCR(本地)⭐⭐⭐⭐⭐免费最高准确率

三、方案一:PHP + Tesseract(本地 OCR,最常用)

1️⃣ 安装 Tesseract

Ubuntu / Debian

sudo apt install tesseract-ocr
sudo apt install tesseract-ocr-chi-sim

Mac(Homebrew)

brew install tesseract
brew install tesseract-lang


2️⃣ PHP 调用 Tesseract

直接命令行方式(最稳定)

$image = 'test.png';
$output = 'result';

exec("tesseract $image $output -l chi_sim+eng");

$text = file_get_contents($output . '.txt');
echo $text;


3️⃣ 使用 PHP 封装库(推荐)

composer require thiagoalessio/tesseract_ocr

use thiagoalessio\TesseractOCR\TesseractOCR;

$text = (new TesseractOCR('test.png'))
    ->lang('chi_sim', 'eng')
    ->run();

echo $text;


4️⃣ 优点 / 缺点

✅ 免费
✅ 可离线
❌ 对模糊、歪斜图片不友好
❌ 需要预处理图片


四、方案二:PHP + 百度 OCR API(中文最强)

1️⃣ 开通 OCR 服务


2️⃣ 获取 Access Token

function getAccessToken() {
    $url = 'https://aip.baidubce.com/oauth/2.0/token';
    $params = [
        'grant_type' => 'client_credentials',
        'client_id' => 'API_KEY',
        'client_secret' => 'SECRET_KEY',
    ];
    return json_decode(file_get_contents($url.'?'.http_build_query($params)), true)['access_token'];
}


3️⃣ 调用通用文字识别

$image = base64_encode(file_get_contents('test.jpg'));
$token = getAccessToken();

$url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=$token";

$post = http_build_query(['image' => $image]);

$result = file_get_contents($url, false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/x-www-form-urlencoded",
        'content' => $post
    ]
]));

$data = json_decode($result, true);

$text = array_column($data['words_result'], 'words');
echo implode("\n", $text);


4️⃣ 适合场景


五、方案三:PHP + PaddleOCR(准确率天花板)

思路

PHP 不直接跑 OCR
👉 PHP 调用 Python PaddleOCR 服务(HTTP)

架构示意

PHP → HTTP → Python OCR 服务 → JSON 结果

Python OCR 服务示例

from paddleocr import PaddleOCR
from flask import Flask, request, jsonify

ocr = PaddleOCR(use_angle_cls=True, lang="ch")
app = Flask(__name__)

@app.route('/ocr', methods=['POST'])
def ocr_api():
    file = request.files['image']
    file.save('tmp.jpg')
    result = ocr.ocr('tmp.jpg', cls=True)
    return jsonify(result)

app.run(port=5000)

PHP 用 cURL 调用即可


六、提升 OCR 识别率的关键技巧(非常重要)

1️⃣ 图片预处理(PHP + Imagick)

$img = new Imagick('test.png');
$img->setImageColorspace(Imagick::COLORSPACE_GRAY);
$img->thresholdImage(0.6 * Imagick::getQuantum());
$img->writeImage('clean.png');


2️⃣ 常见预处理手段

方法作用
灰度化降噪
二值化提升对比
去斜防止歪字
裁剪聚焦文字
放大 2x提升清晰度

七、常见 OCR 失败原因(避坑)

❌ 图片太小(< 300px)
❌ 强反光 / 阴影
❌ 花纹背景
❌ 字体过于艺术化
❌ 语言模型未指定(chi_sim)


八、该怎么选?(快速建议)

需求推荐
免费 / 离线Tesseract
中文高精度百度 OCR
票据 / 表格腾讯云
极致准确PaddleOCR

九、一句话总结

PHP 本身不做 OCR,真正做 OCR 的是引擎;PHP 的价值是“稳定地调用 + 高效地处理结果”

退出移动版