За последние 24 часа нас посетил 18091 программист и 1592 робота. Сейчас ищут 728 программистов ...

Нейросеть Часть 1 Full PHP - Разделение на фрагменты img text

Тема в разделе "Решения, алгоритмы", создана пользователем MouseZver, 3 авг 2020.

  1. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    Входу тапки.

    Выдрал часть функционала своей нейросетки для улучшения, заодно показать механизм по разбиению текста не на буквы, а на фрагменты (частицы).

    Ранее упоминал (изображением) в одном из постов, механизм по разделению найденных букв.

    [​IMG]

    Такой способ деления на буквы было глупым некомпетентным, например если встречалась буква J.

    2020-08-02_23-26-22.png

    Получалась буква "Lj" - это не есть хорошо.

    ==============================================================================

    Теперь:

    Безымянный 1.gif

    отвечает за всё - метод separator в классе Neuronet
    PHP:
    1.     public function separator(): void
    2.     {
    3.         $this -> namesParticles = $ignorePoints = [];
    4.    
    5.         $p = new Particles( $this -> im );
    6.    
    7.         $x = 0;
    8.    
    9.         while ( $x < imagesx ( $this -> im ) )
    10.         {
    11.             $y = $this -> vector_y( $x ); // если true - наткнулся на белый поинт
    12.        
    13.             $ignoreBool = ! isset ( $ignorePoints[imagesx ( $this -> im ) * $y + $x] );
    14.        
    15.             if ( ! is_null ( $y ) && $ignoreBool )
    16.             {
    17.                 $p -> startPoint( $x, $y ); // метод по поиску белых соседних поинтов
    18.            
    19.                 $ignorePoints += $p -> getPoints();
    20.            
    21.                 $im = $p -> getGraphicsDraw();
    22.            
    23.                 $binary = $this -> getBinary( $im ); // теперь не троллим HDD чтобы узнать md5 hash
    24.            
    25.                 $hash = mt_rand () . '_' . md5 ( $binary );
    26.            
    27.                 $this -> namesParticles[$hash] = $binary;
    28.            
    29.                 $this -> setResourcePointer( $hash );
    30.            
    31.                 $this -> im = $im;
    32.            
    33.                 $this -> setResourcePointer();
    34.             }
    35.        
    36.             $x++;
    37.         }
    38.     }
    Со всем тестовым кодом можно ознакомиться. Приложу под этим постом архив. :)

    P.s: не нужно запускать весь сервер с апачем. См. start.cmd с прямой ссылкой на интерпретатор.
     

    Вложения:

    • GD.zip
      Размер файла:
      6,8 КБ
      Просмотров:
      4
    #1 MouseZver, 3 авг 2020
    Последнее редактирование: 3 авг 2020
    artoodetoo и denis01 нравится это.
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    Найдена большая ошибка в векторе Y
    При достижении белого поинта, останавливал в дальнейшем поиск других белых поинтов.

    код немного модифицирован.
    PHP:
    1.     public function setResource( string $name, $im ): void
    2.     {
    3.         $this -> images['resources'][$name] = $im;
    4.     }
    5.    
    6.     public function separator(): void
    7.     {
    8.         $this -> namesParticles = $this -> ignorePoints = [];
    9.        
    10.         $x = 0;
    11.        
    12.         while ( $x < imagesx ( $this -> im ) )
    13.         {
    14.             if ( $this -> vector_y( $x ) )
    15.             {
    16.                 //fullBlack счетчик пробела
    17.             }
    18.            
    19.             $x++;
    20.         }
    21.     }
    22.    
    23.     private function vector_y( int $x ): bool
    24.     {
    25.         $y = 0;
    26.        
    27.         $fullBlack = true;
    28.        
    29.         while ( $y < imagesy ( $this -> im ) )
    30.         {
    31.             if ( imagecolorat ( $this -> im, $x, $y ) &&  )
    32.             {
    33.                 $fullBlack = false;
    34.                
    35.                 $index = imagesx ( $this -> im ) * $y + $x;
    36.                
    37.                 if ( ! isset ( $this -> ignorePoints[$index] ) )
    38.                 {
    39.                     $p = new Particles( $this -> im );
    40.                    
    41.                     $p -> startPoint( $x, $y );
    42.                    
    43.                     $this -> ignorePoints += $p -> getPoints();
    44.                    
    45.                     $this -> setNamesParticles( $p );
    46.                 }
    47.             }
    48.            
    49.             $y++;
    50.         }
    51.        
    52.         return $fullBlack;
    53.     }
    54.    
    55.     private function setNamesParticles( Particles $p ): void
    56.     {
    57.         $im = $p -> getGraphicsDraw();
    58.        
    59.         $binary = $this -> getBinary( $im );
    60.        
    61.         $hash = md5 ( $binary );
    62.        
    63.         $this -> namesParticles[] = [
    64.             'hash' => $hash,
    65.             'binary' => $binary
    66.         ];
    67.        
    68.         $this -> setResource( $hash, $im );
    69.     }