我正在尝试从此图像中读取文字:
我想读价格,例如“EUR42721.92”
我试过这些图书馆:
> PHPclasses.org/package/2874-PHP-Recognize-text-objects-in-graphical-images.html
> PHPocr.sourceforge.net
但他们不工作我如何阅读文本?
尝试这个(它与我一起工作):
$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值.
该图像显示它查找一个灰色像素来更改$foundGray标志.之后,它会从左侧和从顶部查找第一个和最后一个像素.它用一些填充来裁剪图像,生成的图像被调整大小,并将其保存到临时文件中.之后,很容易使用gocr(或任何其他OCR命令或库).之后可以删除临时文件.