我正在尝试从此图像中读取文字:
我想读价格,例如“EUR42721.92”
我试过这些图书馆:
> PHPclasses.org/package/2874-PHP-Recognize-text-objects-in-graphical-images.html
> PHPocr.sourceforge.net
但他们不工作我如何阅读文本?
尝试这个(它与我一起工作):
原文链接:https://www.f2er.com/php/139042.html$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命令或库).之后可以删除临时文件.