распознавание текста из картинки посредством PHP (Рейтинг: +6)
ЭТО моя первая статья так, что не судите строго. Долго я думал, над тем как можно сделать программу для распознавания текста из картинки средством PHP, да и вообще в целом. Оказываеться это и не такая сложная задача как казалась. Для примера возьмем 10 картинок в формаие .PNG и размером 40*40pх и закинем их в папку num файлы будуть назваться 1.PNG 2.PNG И ТД а файл который будем проверять назовем t.PNG ПРИ ЧЕМ ЦИФРЫ НА КАРТИНКАХ ДОЛЖНЫ БЫТЬ БЕЛЫМ ЦВЕТОМ НА ЧЕРНОМ ФОНЕ! Работа построена на класах.
создадим класс допустим tochki_x_and_y
Добавил: Коля
05.03.2011 / 22:55создадим класс допустим tochki_x_and_y
<?php class tochki_x_and_y{ function x_tock($images){ $img = imagecreatefrompng($images); $size=getimagesize($images); $H= $size[0]; //x $W= $size[1];//y for($i=0;$i<$H;$i++){ for($d=0;$d<$W;$d++){ //запись в масив каждой точки ее значения $ret[]=imagecolorat($img,$d,$i); #запишем индекс с координатами х и у $x_and_y[]=$d."-".$i; } } //вывод всех цифр занятыми точками foreach($ret as $k=>$v){ if($v!=0){ $ch[$k]=$v; } } #найдем все х //находим сколько значений в х и у в каждой точке foreach($ch as $k=>$v){ //$v-номер из $x_and_y $x_y=explode("-",$x_and_y[$k]); $x_all[]=$x_y[0]; } //создаем проценты for($i=0;$i<$H;$i++){ $a_x=array_count_values($x_all); if(isset($a_x[$i])){ $x_pers_test[]=$a_x[$i]; }else{ $x_pers_test[]=0; } /// } return $x_pers_test; } ?>этим кодом мы обрабатываем картинку и записываем значения точек (белый цвет) по х, так же делаем и для оси у
<?php function y_tock($images){ $img = imagecreatefrompng($images); $size=getimagesize($images); $H= $size[0]; //x $W= $size[1];//y for($i=0;$i<$H;$i++){ for($d=0;$d<$W;$d++){ //запись в масив каждой точки ее значения $ret[]=imagecolorat($img,$d,$i); #запишем индекс с координатами х и у $x_and_y[]=$d."-".$i; } } //вывод всех цифр занятыми точками foreach($ret as $k=>$v){ if($v!=0){ $ch[$k]=$v; } } #найдем все х //находим сколько значений в х и у в каждой точке foreach($ch as $k=>$v){ //$v-номер из $x_and_y $x_y=explode("-",$x_and_y[$k]); $y_all[]=$x_y[1]; } //создаем проценты for($i=0;$i<$W;$i++){ /// $a_y=array_count_values($y_all); if(isset($a_y[$i])){ $y_pers_test[]=$a_y[$i]; }else{ $y_pers_test[]=0; } } return $y_pers_test; }//function y_tock ?>теперь созданим функцию для создания многомерного массива у и х обработанных данных(эталоны, цифры , которые мы используем для сравнения
<?php //создаем многомерный массив для х function mnogomer_x($st,$end){ for($i=$st;$i<=$end;$i++){ $array_x[$i]=$this->x_tock('num/'.$i.'.png'); } return $array_x; } //и у function mnogomer_y($st,$end){ for($i=$st;$i<=$end;$i++){ $array_y[$i]=$this->y_tock('num/'.$i.'.png'); } return $array_y; } ?>следующая функция определяет разницу между массивом точек(у,х) которую проверяем и эталонных картинок
<?php //находим разницу оригиала с цифрами function nah_vseh_raznitc($st,$end,$arrays,$arr_proverka){ for($k=$st;$k<=$end;$k++){ $xxx[$k]=0; for($i=0;$i<count($arrays[$k]);$i++){ if($arrays[$k][$i]>$arr_proverka[$i]){ $xxx[$k]=$xxx[$k]+($arrays[$k][$i]-$arr_proverka[$i]); }else{ $xxx[$k]=$xxx[$k]+($arr_proverka[$i]-$arrays[$k][$i]); } } } return $xxx; }//function nah_vseh_raznitc() ?>и финальная функция выводит результат. а результатом будет наименьшее число, то есть более похожее
<?php function result($xxx,$yyy){ //найдем суму в массивах foreach($xxx as $k=>$v){ $sum[$k]=$v+$yyy[$k]; } //// $this->sum=$sum; //найдем номер с наименьшим массивом foreach($sum as $key=>$value){ if($value==min($sum)){ $ch=$key; break; } } return $ch; }//function sum_x_and_y_arrays() }//class tochki_x_and_y ?>теперь я покажу как работать с классом
<?php include"class.php"; //РИСУЕМ ГРАФИК ТОЧЕК ИСХОДЯ ИЗ РИСУНКА $tochki_x_and_y= new tochki_x_and_y(); $ot=1; $do=9; #ЗАПИСЫВАЕМ КООРДИНЫТЫ ТОЧЕК ИЗОБРАЖЕНИЯ, КОТОРОЕ ТЕСТИРУЕМ $po_x_t=$tochki_x_and_y->x_tock('num/t.png'); $po_y_t=$tochki_x_and_y->y_tock('num/t.png'); #ЗАПИСЫВАЕМ КООРЖИНАТЫ ВСЕХ ЗНАЧЕНИЙ, КОТОРЫЕ ЕСТЬ В БАЗЕ(ПРИМЕРЫ) $array_x=$tochki_x_and_y->mnogomer_x($ot,$do); $array_y=$tochki_x_and_y->mnogomer_y($ot,$do); #НАХОДИМ РАЗНИЦУ ТЕСТОВЫХ ЗАМЕРЕНИЙ И КАЖДОЙ ИЗ БАЗЫ $xxx=$tochki_x_and_y->nah_vseh_raznitc($ot,$do,$array_x,$po_x_t); $yyy=$tochki_x_and_y->nah_vseh_raznitc($ot,$do,$array_y,$po_y_t); #РЕЗУЛЬТАТОМ БУДЕТ НАИМЕНЬШЕЕ ЧИСЛО $result=$tochki_x_and_y->result($xxx,$yyy); echo $result; /////////// //просмотр как скрипт считает. echo"<br>"; print_r($tochki_x_and_y->sum); echo"<br>"; print_r($xxx); echo"<br>"; print_r($yyy); ?>вот и все, ни чегоже сложного правда?)))
Рейтинг:
+6
Просмотры: 7883Комментарии (3) »