下午好SO社区,PHP - 快速通过图像像素
我一直在致力于一个项目,要求一些光学字符识别。我正在努力保持项目的轻便性和便携性,因此安装第三方程序不会成为一种选择。
无论如何,我决定在PHP中编写自己的OCR,但它通过图像循环极其缓慢。我现在正在做的方式是两个嵌套for循环。我试图循环播放给定的图像(在这种情况下,图像是PNG,263x55像素),并将rgba写入文本文件。 (格式:'rgba(0,0,0,0)')。因为它使用PHP,因此alpha在0和127之间。
我的代码有效,但速度很慢,图像真的不是那么大。你能想出任何可以加快速度的方法吗?
由于提前,
添
<?php
// To prevent the script from timing out
ini_set('max_execution_time', 0);
If (isset($_GET["Image"])) {
$pImage = $_GET["Image"];
} Else {
$pImage = "1";
}
parseImage($pImage);
// END TEST SYSTEM
Function parseImage($ImgNum) {
Echo "Parsing Image $ImgNum";
$logFile = "Image$ImgNum.txt";
$fHandle = fopen($logFile, "w");
If ($ImgNum != 1 AND $ImgNum != 2 AND $ImgNum != 3 AND $ImgNum != 4 AND $ImgNum != 5 AND $ImgNum != 6) {
Echo "Error: Image number is invalid.";
Exit();
}
// Start Optical Character Recognition
$Image = "https://www.example.com/img/Image$ImgNum.png";
$size = getimagesize($Image);
$width = $size[0];
$height = $size[1];
$ctrH = 0;
$ctrW = 0;
for($x=1;$x<=$width;$x++) {
for($y=1;$y<=$height;$y++) {
$pixel = getPixel($Image, $x, $y);
fwrite($fHandle, $pixel . "\n");
$ctrH ++;
}
$ctrW ++;
}
fclose($fHandle);
Echo "Analyzing <a href='$Image'>$Image</a><br />";
Echo $ctrW . "px wide<br />";
Echo ($ctrH/$ctrW) . "px tall<br />";
}
function getPixel($image, $x, $y) {
// Echo "<br />Reading $image. X: $x - Y: $y<br />";
$im = imagecreatefrompng($image);
$rgb = imagecolorat($im, $x, $y);
$colors = imagecolorsforindex($im, $rgb);
$r = $colors["red"];
$g = $colors["green"];
$b = $colors["blue"];
$a = $colors["alpha"];
$print = "Pixel (" . $x . "x" . $y . "): rgba($r, $g, $b, $a)";
return $print;
}
?>
只是一个fyi,我认为你编码自己的OCR真棒。 – Neil
@nfnneil谢谢哈哈! –
疯狂的道具尝试你自己的OCR。将imagecreatefrompng移出您的函数以外并嵌套循环之外。我看到在内存中创建每个像素查找作为开销城市的图像。做一次并传递它。 –