如何用PHP Imagick预处理俄文图片优化Tesseract OCR识别?
实现ImageMagick预处理命令的PHP Imagick等效代码(优化俄文OCR识别)
问题场景
使用Tesseract OCR识别俄文图片时部分文字准确率偏低,需要通过图片预处理(强化文字清晰度、净化背景)提升识别效果。当前使用的Tesseract代码:
$ocr = new TesseractOCR(__DIR__ . self::CACHE_PATH . 'header_' . $filename); $res_rus_header = $ocr->lang('rus')->run(); if (!empty($res_rus_header)) { $res_rus_header = explode(PHP_EOL, $res_rus_header); }
已找到一套有效的ImageMagick命令行预处理方案:
convert -colorspace gray -modulate 120 -contrast-stretch 10%x80% -modulate 140 -gaussian-blur 1 -contrast-stretch 5%x50% +repage -negate -gaussian-blur 4 -negate -modulate 130 original.jpeg clean.jpeg
需要将上述命令转换为PHP Imagick的等效实现,以下是尝试的代码示例(未达到预期效果):
$img = new Imagick(__DIR__ . self::CACHE_PATH . 'data_' . $filename); $img->setImageFormat('jpg'); $img->setImageCompressionQuality(100); $img->despeckleImage(); $img->brightnessContrastImage(0.4, 100); $img->magnifyImage(); $kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON, "1"); $img->morphology(\Imagick::MORPHOLOGY_OPEN, 1, $kernel); $img->writeImage(__DIR__ . self::CACHE_PATH . 'fix_data_' . $filename);
等效PHP Imagick实现代码
以下是与上述ImageMagick命令完全对应的PHP Imagick代码,每一步严格对应命令参数:
$img = new Imagick(__DIR__ . self::CACHE_PATH . 'data_' . $filename); // 对应 -colorspace gray:转灰度图 $img->transformImageColorspace(Imagick::COLORSPACE_GRAY); // 对应 -modulate 120:调整亮度(饱和度、色相保持默认100) $img->modulateImage(120, 100, 100); // 对应 -contrast-stretch 10%x80%:对比度拉伸,黑场10%,白场80% $img->contrastStretchImage(10, 80, Imagick::CHANNEL_ALL); // 对应 -modulate 140:再次调整亮度 $img->modulateImage(140, 100, 100); // 对应 -gaussian-blur 1:高斯模糊(半径1,标准差0.5,与命令行默认逻辑一致) $img->gaussianBlurImage(1, 0.5); // 对应 -contrast-stretch 5%x50%:二次对比度拉伸 $img->contrastStretchImage(5, 50, Imagick::CHANNEL_ALL); // 对应 +repage:重置画布偏移信息 $img->setImagePage(0, 0, 0, 0); // 对应 -negate:反色处理 $img->negateImage(false, Imagick::CHANNEL_ALL); // 对应 -gaussian-blur 4:高斯模糊(半径4,标准差2) $img->gaussianBlurImage(4, 2); // 对应 -negate:再次反色还原 $img->negateImage(false, Imagick::CHANNEL_ALL); // 对应 -modulate 130:最后调整亮度 $img->modulateImage(130, 100, 100); // 保存处理后的图片 $img->setImageFormat('jpg'); $img->setImageCompressionQuality(100); $img->writeImage(__DIR__ . self::CACHE_PATH . 'fix_data_' . $filename); $img->destroy();
关键参数说明
modulateImage:三个参数依次为亮度、饱和度、色相,命令行中-modulate N仅调整亮度,因此饱和度和色相保持100即可。contrastStretchImage:前两个参数对应命令中的黑场百分比x白场百分比,直接传入数值即可。gaussianBlurImage:命令行中仅输入半径时,标准差默认是半径的0.5倍,因此代码中需手动匹配该逻辑。setImagePage(0,0,0,0):清除图片的画布偏移数据,避免后续处理出现异常偏移。
内容的提问来源于stack exchange,提问作者blood73
相关产品推荐
相关产品推荐

