Можно ли переупорядочить массив?

Поэтому я использую Google Vision TEXT_DETECTION, и основа этого — он читает номерной знак, а затем покрывает его многоугольником, используя PHPGD. теперь это все замечательно, но кажется, что набор координат находится в неправильном порядке, и я разбиваю голову об стену, надеюсь, вы поможете 🙂

номерной знак

На изображении выше вы можете увидеть номерной знак и многоугольник, который его окружает. Вы можете видеть, что это должно быть 2 квадрата, но это один квадрат и крест

Вот мой код, где я получаю координаты и использую их для размещения многоугольника

$response = json_decode($json_response, true);

//dd($response);
$red =0;
$green =0;
$blue = 0;
$i =0;
foreach($response['responses'][0]['fullTextAnnotation']['pages'] as $box) {
$points = array();
foreach ($box['blocks'] as $block) {
foreach ($block['paragraphs'] as $paragraph) {
foreach ($paragraph['words'] as $word) {
foreach ($word['boundingBox']['vertices'] as $vertex) {
array_push($points, $vertex['x'], $vertex['y']);
}
$count_points = count($points) / 2;
$color = imagecolorallocate($im, round(0), round(0), round(0));
imagefilledpolygon($im, $points, $count_points, $color);
var_dump($points);
}

}

}

}

Вот var_dump из $ точек (координаты)

    array(8) {
[0]=> int(424)
[1]=> int(224)
[2]=> int(446)
[3]=> int(218)
[4]=> int(451)
[5]=> int(235)
[6]=> int(429)
[7]=> int(241) }
array(16) {
[0]=> int(424)
[1]=> int(224)
[2]=> int(446)
[3]=> int(218)
[4]=> int(451)
[5]=> int(235)
[6]=> int(429)
[7]=> int(241)
[8]=> int(454)
[9]=> int(216)
[10]=> int(472)
[11]=> int(211)
[12]=> int(477)
[13]=> int(228)
[14]=> int(459)
[15]=> int(233)
}

1

Решение

Я не эксперт в Google Vision, но мое внутреннее чувство заключается в том, что вы просто неправильно используете API видения. Основная проблема заключается в том, что вы как-то объединяете данные вершин двух полигонов в один — вот почему вы получаете array(16), И вам нужно разрезать этот массив на две части, чтобы получить 2 array(8) массивы. Пример:

$points =
[
424,224,
446,218,
451,235,
429,241,
// cut vertexes in half here to form two polygons
454,216,
472,211,
477,228,
459,233
];

$image = imagecreatetruecolor(210, 300);

// Colors
$col_1 = imagecolorallocate($image, 0, 0, 255);
$col_2 = imagecolorallocate($image, 255, 0, 0);
$textcolor = imagecolorallocate($image, 0, 255, 0);

// Extract two polygons
$poly_1 = array_slice($points, 0, 8);
$poly_2 = array_slice($points, 8, 8);

// Translate & Scale for better visual affect
translateAndScale($poly_1, -800, -200, 2);
translateAndScale($poly_2, -800, -200, 2);
translateAndScale($points, -820, -350, 2);

// Drawing merged polygon
imagestring($image, 4, 20, 30, 'Two polygons as one :', $textcolor);
imagepolygon($image, $points, 8, $col_2);

// Drawing separated polygons
imagestring($image, 4, 20, 180, 'Separated polygons :', $textcolor);
imagepolygon($image, $poly_1, 4, $col_1);
imagepolygon($image, $poly_2, 4, $col_1);

// output data
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

function translateAndScale(&$points, $tran_x = 0, $tran_y = 0, $scale = 1) {
$i = 1;
foreach ($points as $k => $coord) {
$translate = $i & 1 ? $tran_x : $tran_y;
$points[$k] = ((int)($coord * $scale) + $translate) ;
$i++;
}
}

Результирующее изображение:

введите описание изображения здесь

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]