Яндекс OCR: разметка данных
В ходе использования облака Yandex OCR для распознавания данных, выявилось что при анализе получаемого на выходе JSON, очень не достаёт визуализации полученных данных. Для того чтобы эту ситуацию чуть улучшить, написал скриптик, который на входе получает картинку для распознавания и JSON полученный от Яндекса, а на выходе выдаёт картинку с нанесенными распознанными блоками и таблицами.
Собственно код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php $res=json_decode(file_get_contents("res.json")); // прочитаем json $source = imagecreatefromjpeg ("pdfs/11-1.jpg"); $pink = imagecolorallocate($source, 255, 105, 180); $white = imagecolorallocate($source, 255, 255, 255); $green = imagecolorallocate($source, 132, 135, 28); $blue = imagecolorallocate($source, 0, 0, 255); // размечаю блоки $bl=0; foreach ($res->result->textAnnotation->blocks as $block) { $kof=1.5; $points=[]; $points[]=$block->boundingBox->vertices[0]->x*$kof; $points[]=$block->boundingBox->vertices[0]->y*$kof; $points[]=$block->boundingBox->vertices[1]->x*$kof; $points[]=$block->boundingBox->vertices[1]->y*$kof; $points[]=$block->boundingBox->vertices[2]->x*$kof; $points[]=$block->boundingBox->vertices[2]->y*$kof; $points[]=$block->boundingBox->vertices[3]->x*$kof; $points[]=$block->boundingBox->vertices[3]->y*$kof; $points[]=$block->boundingBox->vertices[0]->x*$kof; $points[]=$block->boundingBox->vertices[0]->y*$kof; imagepolygon($source,$points,$green); imagettftext($source,20,0,$points[0],$points[1],$green,"/usr/share/fonts/truetype/r7-office/ext/PTS55F.ttf",$bl); $bl++; }; //размечаю таблицы $bl=0; foreach ($res->result->textAnnotation->tables as $table) { $kof=2.1; $offset_x=110; $offset_y=10; $points=[]; $points[]=$table->boundingBox->vertices[0]->x*$kof+$offset_x; $points[]=$table->boundingBox->vertices[0]->y*$kof+$offset_y; $points[]=$table->boundingBox->vertices[1]->x*$kof+$offset_x; $points[]=$table->boundingBox->vertices[1]->y*$kof+$offset_y; $points[]=$table->boundingBox->vertices[2]->x*$kof+$offset_x; $points[]=$table->boundingBox->vertices[2]->y*$kof+$offset_y; $points[]=$table->boundingBox->vertices[3]->x*$kof+$offset_x; $points[]=$table->boundingBox->vertices[3]->y*$kof+$offset_y; $points[]=$table->boundingBox->vertices[0]->x*$kof+$offset_x; $points[]=$table->boundingBox->vertices[0]->y*$kof+$offset_y; imagepolygon($source,$points,$blue); imagettftext($source,20,0,$points[0],$points[1],$blue,"/usr/share/fonts/truetype/r7-office/ext/PTS55F.ttf",$bl); $bl++; } imagejpeg($source, 'out.jpg'); |
Получаем картинку вида: