PHP版Tesseract OCR
一个在PHP中使用Tesseract OCR的封装器。
[![CI][ci_badge]][ci]
[![AppVeyor][appveyor_badge]][appveyor]
[![Codacy][codacy_badge]][codacy]
[![测试覆盖率][test_coverage_badge]][test_coverage]
[![最新稳定版本][stable_version_badge]][packagist]
[![总下载量][total_downloads_badge]][packagist]
[![月下载量][monthly_downloads_badge]][packagist]
安装
通过[Composer][]安装:
$ composer require thiagoalessio/tesseract_ocr
:bangbang: 该库依赖于[Tesseract OCR][],版本3.02或更高。
![][windows_icon] Windows用户注意事项
有[多种方法][tesseract_installation_on_windows]在你的系统上安装[Tesseract OCR][],但如果你只想快速上手运行,我推荐使用[Chocolatey][]安装[Capture2Text][]包。
choco install capture2text --version 3.9
:warning: 最新版本的[Capture2Text][]已停止提供tesseract
二进制文件。
![][macos_icon] macOS用户注意事项
使用[MacPorts][],你可以安装单独的语言支持,如下所示:
$ sudo port install tesseract-<langcode>
但使用[Homebrew][]无法实现。默认情况下它只提供英语支持,所以如果你打算用于其他语言,最快的解决方案是安装所有语言:
$ brew install tesseract tesseract-lang
使用方法
基本用法
use thiagoalessio\TesseractOCR\TesseractOCR;
echo (new TesseractOCR('text.png'))
->run();
The quick brown fox
jumps over
the lazy dog.
其他语言
use thiagoalessio\TesseractOCR\TesseractOCR;
echo (new TesseractOCR('german.png'))
->lang('deu')
->run();
Bülowstraße
多种语言
use thiagoalessio\TesseractOCR\TesseractOCR;
echo (new TesseractOCR('mixed-languages.png'))
->lang('eng', 'jpn', 'spa')
->run();
I eat すし y Pollo
引导识别
use thiagoalessio\TesseractOCR\TesseractOCR;
echo (new TesseractOCR('8055.png'))
->allowlist(range('A', 'Z'))
->run();
BOSS
破解验证码
是的,我知道你们中的一些人可能想用这个库来进行破解验证码这种"高尚"的目的,所以请看看这个评论:
https://github.com/thiagoalessio/tesseract-ocr-for-php/issues/91#issuecomment-342290510
API
run
执行tesseract
命令,可选择接收一个整数作为timeout
参数,以防你遇到tesseract进程卡住的情况。
$ocr = new TesseractOCR();
$ocr->run();
$ocr = new TesseractOCR();
$timeout = 500;
$ocr->run($timeout);
image
定义要被tesseract
识别的图像路径。
$ocr = new TesseractOCR();
$ocr->image('/path/to/image.png');
$ocr->run();
imageData
从字符串设置要被tesseract
识别的图像及其大小。
这在处理已经加载到内存中的文件时非常有用。
你可以轻松获取图像对象的图像数据和大小:
//使用Imagick
$data = $img->getImageBlob();
$size = $img->getImageLength();
//使用GD
ob_start();
// 注意你可以使用tesseract支持的任何格式
imagepng($img, null, 0);
$size = ob_get_length();
$data = ob_get_clean();
$ocr = new TesseractOCR();
$ocr->imageData($data, $size);
$ocr->run();
executable
定义tesseract
可执行文件的自定义位置,
以防它不在$PATH
中。
echo (new TesseractOCR('img.png'))
->executable('/path/to/tesseract')
->run();
version
返回当前tesseract
的版本。
echo (new TesseractOCR())->version();
availableLanguages
返回可用语言/脚本列表。
foreach((new TesseractOCR())->availableLanguages() as $lang) echo $lang;
更多信息: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages-and-scripts
tessdataDir
指定tessdata目录的自定义位置。
echo (new TesseractOCR('img.png'))
->tessdataDir('/path')
->run();
userWords
指定用户词文件的位置。
这是一个纯文本文件,包含一个词列表,你希望tesseract
将其视为普通字典词。
在处理包含技术术语、行话等内容时很有用。
$ cat /path/to/user-words.txt
foo
bar
echo (new TesseractOCR('img.png'))
->userWords('/path/to/user-words.txt')
->run();
userPatterns
指定用户模式文件的位置。
如果你处理的内容有已知模式,这个选项可以大大提高tesseract的识别准确率。
$ cat /path/to/user-patterns.txt'
1-\d\d\d-GOOG-441
www.\n\\\*.com
echo (new TesseractOCR('img.png'))
->userPatterns('/path/to/user-patterns.txt')
->run();
lang
定义识别过程中使用的一种或多种语言。 可用语言的完整列表可以在这里找到: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages
来自[@daijiale][]的提示: 使用组合->lang('chi_sim', 'chi_tra')
可以正确识别中文。
echo (new TesseractOCR('img.png'))
->lang('lang1', 'lang2', 'lang3')
->run();
psm
指定页面分割方法,指示tesseract
如何解释给定的图像。
更多信息: https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality#page-segmentation-method
echo (new TesseractOCR('img.png'))
->psm(6)
->run();
oem
指定OCR引擎模式。(参见 tesseract --help-oem
)
echo (new TesseractOCR('img.png'))
->oem(2)
->run();
dpi
指定图像DPI。如果你的图像元数据中不包含这个信息,这个选项很有用。
echo (new TesseractOCR('img.png'))
->dpi(300)
->run();
allowlist
这是->config('tessedit_char_whitelist', 'abcdef....')
的快捷方式。
echo (new TesseractOCR('img.png'))
->allowlist(range('a', 'z'), range(0, 9), '-_@')
->run();
configFile
指定要使用的配置文件。它可以是你自己的配置文件的路径,也可以是预定义配置文件之一的名称: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
echo (new TesseractOCR('img.png'))
->configFile('hocr')
->run();
setOutputFile
指定要使用的输出文件。请注意:如果你设置了输出文件,那么withoutTempFiles
选项将被忽略。
即使withoutTempFiles = true
,临时文件也会被写入(并删除)。
结合configFile
,你可以获取hocr
、tsv
或pdf
文件。
echo (new TesseractOCR('img.png'))
->configFile('pdf')
->setOutputFile('/PATH_TO_MY_OUTPUTFILE/searchable.pdf')
->run();
digits
->configFile('digits')
的快捷方式。
echo (new TesseractOCR('img.png'))
->digits()
->run();
hocr
->configFile('hocr')
的快捷方式。
echo (new TesseractOCR('img.png'))
->hocr()
->run();
->configFile('pdf')
的快捷方式。
echo (new TesseractOCR('img.png'))
->pdf()
->run();
quiet
->configFile('quiet')
的快捷方式。
echo (new TesseractOCR('img.png'))
->quiet()
->run();
tsv
->configFile('tsv')
的快捷方式。
echo (new TesseractOCR('img.png'))
->tsv()
->run();
txt
->configFile('txt')
的快捷方式。
echo (new TesseractOCR('img.png'))
->txt()
->run();
tempDir
定义一个自定义目录来存储tesseract生成的临时文件。
确保该目录实际存在,并且运行php
的用户有权在其中写入。
echo (new TesseractOCR('img.png'))
->tempDir('./my/custom/temp/dir')
->run();
withoutTempFiles
指定tesseract
应该输出识别的文本而不写入临时文件。
数据从tesseract
的标准输出中收集,而不是从临时文件中收集。
echo (new TesseractOCR('img.png'))
->withoutTempFiles()
->run();
其他选项
Tesseract提供的任何配置选项都可以这样使用:
echo (new TesseractOCR('img.png'))
->config('config_var', 'value')
->config('other_config_var', 'other value')
->run();
或者这样:
echo (new TesseractOCR('img.png'))
->configVar('value')
->otherConfigVar('other value')
->run();
更多信息: https://github.com/tesseract-ocr/tesseract/wiki/ControlParams
线程限制
有时,限制 Tesseract 可以使用的线程数可能会很有用(例如在这种情况下)。将最大线程数设置为 run
函数的参数:
echo (new TesseractOCR('img.png'))
->threadLimit(1)
->run();
如何贡献
你可以通过以下方式为这个项目做出贡献:
- 如果你发现了bug或希望提出新功能,可以开启一个 [Issue][];
- 提交一个 [Pull Request][],其中包含修复bug、补充/纠正文档或实现新功能的代码;
请确保你查看了我们的 [行为准则][] 和 [贡献][] 指南。
许可证
tesseract-ocr-for-php 基于 [MIT 许可证][] 发布。