Composer 安装的只是 PHP 封装库,必须先在系统安装原生 Tesseract OCR 并配置好中文语言包和图片预处理,否则无法识别。

Composer 无法直接安装 Tesseract OCR 引擎本身,所谓“Tesseract 包”只是 PHP 封装库(如 tesseract-ocr-for-php 或 thiagoalessio/tesseract_ocr),它们依赖系统级的 tesseract 命令行程序才能工作——没装原生 Tesseract,PHP 包连一个字都识别不了。
为什么 composer require thiagoalessio/tesseract_ocr 装完就报错?
常见错误是:TesseractNotFoundException 或 Command not found: tesseract。这不是 PHP 包的问题,而是它根本找不到系统里的 tesseract 可执行文件。
- 该包只是调用
exec()去跑系统命令,不自带 OCR 引擎 - Windows 用户装了 Composer 包但没装
tesseract.exe,或没加进PATH,必失败 - Linux/macOS 用户用
apt install tesseract-ocr(Ubuntu)或brew install tesseract(macOS)后,还要确认tesseract --version能正常输出 - 中文识别必须额外安装语言包:Ubuntu 上运行
sudo apt install tesseract-ocr-chi-sim(简体),macOS 用brew install tesseract-lang后手动复制chi_sim.traineddata到/usr/local/share/tessdata/
如何让 TesseractOCR 正确加载中文字库?
即使系统级 tesseract 已安装,PHP 默认仍只用英文模型。指定语言不是传个字符串那么简单,路径和文件名必须精确匹配。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 初始化时必须显式传入
->language('chi_sim'),不能写zh、chinese或chi_simulated - 确保
chi_sim.traineddata文件真实存在于tesseract的 tessdata 目录中(可用tesseract --list-langs验证) - 如果自定义 tessdata 路径(比如放在项目
resources/tessdata/),需用->tessdataDir('/path/to/tessdata')显式设置,否则忽略 - 训练数据文件名大小写敏感:
chi_sim.traineddata≠Chi_Sim.traineddata
图片预处理比换库更重要:为什么清晰图也识别不准?
Tesseract 对输入质量极度敏感,哪怕用了正确语言包,模糊、低对比、带噪点、倾斜的图,识别率也会断崖下跌——这时候调库参数不如先处理图。
- 优先转为灰度 + 二值化(
Imagick::setType(Imagick::IMGTYPE_GRAYSCALE)+thresholdImage()) - 文字区域太小(如小于 12px)会导致切分失败,建议先用
scaleImage(200, 0)放大再识别 - 避免 JPEG 压缩伪影:输入尽量用 PNG;若只有 JPG,加载后立刻
setImageFormat('png')再保存临时文件供 Tesseract 读取 - 不用强行“自动旋转”:Tesseract 自带 page segmentation mode(PSM),对歪斜文本更稳妥,例如
->setPsm(6)(假设单行文本)或->setPsm(11)(稀疏文本)
真正卡住人的从来不是 Composer 那一行命令,而是 tesseract 是否在系统里、chi_sim.traineddata 是否放对位置、图片有没有被缩到像素糊成一片——这些地方错一个,recognize() 返回空字符串就是最客气的结果。

















