Входу тапки. Выдрал часть функционала своей нейросетки для улучшения, заодно показать механизм по разбиению текста не на буквы, а на фрагменты (частицы). Ранее упоминал (изображением) в одном из постов, механизм по разделению найденных букв. Такой способ деления на буквы было глупым некомпетентным, например если встречалась буква J. Получалась буква "Lj" - это не есть хорошо. ============================================================================== Теперь: отвечает за всё - метод separator в классе Neuronet PHP: public function separator(): void { $this -> namesParticles = $ignorePoints = []; $p = new Particles( $this -> im ); $x = 0; while ( $x < imagesx ( $this -> im ) ) { $y = $this -> vector_y( $x ); // если true - наткнулся на белый поинт $ignoreBool = ! isset ( $ignorePoints[imagesx ( $this -> im ) * $y + $x] ); if ( ! is_null ( $y ) && $ignoreBool ) { $p -> startPoint( $x, $y ); // метод по поиску белых соседних поинтов $ignorePoints += $p -> getPoints(); $im = $p -> getGraphicsDraw(); $binary = $this -> getBinary( $im ); // теперь не троллим HDD чтобы узнать md5 hash $hash = mt_rand () . '_' . md5 ( $binary ); $this -> namesParticles[$hash] = $binary; $this -> setResourcePointer( $hash ); $this -> im = $im; $this -> setResourcePointer(); } $x++; } } Со всем тестовым кодом можно ознакомиться. Приложу под этим постом архив. P.s: не нужно запускать весь сервер с апачем. См. start.cmd с прямой ссылкой на интерпретатор.
Найдена большая ошибка в векторе Y При достижении белого поинта, останавливал в дальнейшем поиск других белых поинтов. код немного модифицирован. PHP: public function setResource( string $name, $im ): void { $this -> images['resources'][$name] = $im; } public function separator(): void { $this -> namesParticles = $this -> ignorePoints = []; $x = 0; while ( $x < imagesx ( $this -> im ) ) { if ( $this -> vector_y( $x ) ) { //fullBlack счетчик пробела } $x++; } } private function vector_y( int $x ): bool { $y = 0; $fullBlack = true; while ( $y < imagesy ( $this -> im ) ) { if ( imagecolorat ( $this -> im, $x, $y ) && ) { $fullBlack = false; $index = imagesx ( $this -> im ) * $y + $x; if ( ! isset ( $this -> ignorePoints[$index] ) ) { $p = new Particles( $this -> im ); $p -> startPoint( $x, $y ); $this -> ignorePoints += $p -> getPoints(); $this -> setNamesParticles( $p ); } } $y++; } return $fullBlack; } private function setNamesParticles( Particles $p ): void { $im = $p -> getGraphicsDraw(); $binary = $this -> getBinary( $im ); $hash = md5 ( $binary ); $this -> namesParticles[] = [ 'hash' => $hash, 'binary' => $binary ]; $this -> setResource( $hash, $im ); }