使用PHP读取图像中的文本

时间:2012-11-30 10:52:14

标签: php curl image-processing ocr gd

我正在尝试阅读此图片中的文字:

image

我想看看价格,例如的EUR42721.92

我试过这些库:

  1. How to Create a PHP Captcha Decoder with PHP OCR Class: Recognize text & objects in graphical images - PHP Classes
  2. phpOCR: Optical Character Recognizer written in PHP
  3. 但他们不起作用。我该如何阅读文本?

2 个答案:

答案 0 :(得分:1)

试试这个(它与我合作):

$imagick = new Imagick($filePath);

$size = $imagick->getImageGeometry();
$width     = $size['width'];
$height    = $size['height'];
unset($size);

$textBottomPosition = $height-1;
$textRightPosition = $width;

$black = new ImagickPixel('#000000');
$gray  = new ImagickPixel('#C0C0C0');

$textRight  = 0;
$textLeft   = 0;
$textBottom = 0;
$textTop    = $height;

$foundGray = false;

for($x= 0; $x < $width; ++$x) {
    for($y = 0; $y < $height; ++$y) {
        $pixel = $imagick->getImagePixelColor($x, $y);
        $color = $pixel->getColor();
        // remove alpha component
        $pixel->setColor('rgb(' . $color['r'] . ','
                         . $color['g'] . ','
                         . $color['b'] . ')');

        // find the first gray pixel and ignore pixels below the gray
        if( $pixel->isSimilar($gray, .25) ) {
            $foundGray = true;
            break;
        }

        // find the text boundaries 
        if( $foundGray && $pixel->isSimilar($black, .25) ) {
            if( $textLeft === 0 ) {
                $textLeft = $x;
            } else {
                $textRight = $x;
            }

            if( $y < $textTop ) {
                $textTop = $y;
            }

            if( $y > $textBottom ) {
                $textBottom = $y;
            }
        }
    }
}

$textWidth = $textRight - $textLeft;
$textHeight = $textBottom - $textTop;
$imagick->cropImage($textWidth+10, $textHeight+10, $textLeft-5, $textTop-5);
$imagick->scaleImage($textWidth*10, $textHeight*10, true);

$textFilePath = tempnam('/temp', 'text-ocr-') . '.png';
$imagick->writeImage($textFilePath);

$text = str_replace(' ', '', shell_exec('gocr ' . escapeshellarg($textFilePath)));
unlink($textFilePath);
var_dump($text);

您需要安装ImageMagick扩展程序和GOCR才能运行它。 如果您不能或不想安装ImageMagick扩展,我会向您发送一个GD版本,其中包含计算颜色距离的功能(这只是一个扩展的毕达哥拉斯定理)。

不要忘记设置$ filePath值。

image parsing for cropping visualization

图像显示它查找灰色像素以更改$ foundGray标志。 之后,它会从左侧和顶部查找第一个和最后一个像素。 它使用一些填充来裁剪图像,生成的图像被调整大小并保存到临时文件中。之后,使用gocr(或任何其他OCR命令或库)很容易。之后可以删除临时文件。

答案 1 :(得分:0)

在开始OCR之前提高数字图像的质量。使用绘图程序来提高质量(更大的尺寸,直线)。

您可以修改PHP脚本并根据需要调整模式识别。 https://github.com/ogres/PHP-OCR/blob/master/Image2String.php

或试用其他OCR工具: https://github.com/thiagoalessio/tesseract-ocr-for-php