午後SOコミュニティ、PHP - イメージピクセルを素早くループする
私はいくつかの光学式文字認識を必要とするプロジェクトに取り組んできました。私はプロジェクトを軽く持ち運びできるようにしているので、サードパーティ製のプログラムをインストールすることはオプションではありません。
とにかく、私は自分のOCRをPHPで書くことにしましたが、イメージを非常に遅くループします。私が現在やっているのは、2つのネストされたループです。私は与えられたイメージをループしようとしています(この場合、イメージはPNG、263x55ピクセルです)、rgbaをテキストファイルに書き込みます。 (形式: 'rgba(0、0、0、0)')。 PHPを使用しているため、アルファは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;
}
?>
私は自分のOCRをコーディングするのに素晴らしいと思います。 – Neil
@nfnneilありがとう、ハハ! –
あなた自身のOCRを試してみるための不道徳な小道具。関数の外側とネストされたループの外側にimagecreatefrompngを移動します。私はオーバーヘッド都市としてすべてのピクセル検索をメモリ内に作成することを見ています。それを一度やり、それを回しなさい。 –