![Розпізнавання простий капчи gocr і php, stackoff (капчі) Розпізнавання простий капчи gocr і php, stackoff](https://images-on-off.com/images/128/raspoznavanieprostoykapchigocriphpstacko-3f8b598b.jpg)
При проходженні одного з завдань на програмування була дана капча. яку потрібно було розпізнати в перебігу 15 секунд. Вручну ввести дані нереально, оскільки складається вона з 96 символів, алфавітом є 16-ковий значення. Так, така ось довга капча 🙂 Але завдання тому і в гілці програмування, значить будемо вирішувати.
Зовні зображення виглядає так:
В гідність алгоритму генерації можна віднести дрібні символи і їх кількість. В іншому ж розгадати таку не складе труднощів. Розпізнавання даної капчи, як і будь-який інший у вигляді зображення можна виконати різними способами. Я вирішив скористатися готовою OCR. Це така штука, яка більшу частину роботи робить за нас. Провівши експерименти з різними софтом призначеним для оптичного розпізнавання символів, зупинився на gOCR. Дана програма існує під всі поширені операційні системи, але що більш приємно - є в репозиторіях Убунту (на якій побудований дистрибутив BackBox).
установка gOCR
Я звик користуватися менеджером пакетів APT, тому:
Встановивши гоцр, можна перевірити його працездатність виконавши в терміналі gocr <опции> / Шлях / до / зображенню
Оскільки в нашому випадку базою є значення 0-9 і a-f, задамо їх через параметр -C.
![Розпізнавання простий капчи gocr і php, stackoff (капчі) Розпізнавання простий капчи gocr і php, stackoff](https://images-on-off.com/images/128/raspoznavanieprostoykapchigocriphpstacko-b5d0ce80.jpg)
Не погано. Успішно розпізнані майже всі символи за винятком четвірки, дев'ятки і нуля, які я виділив червоним. Можна було б залишити і так, але так справа не піде, залишати цю справу на rand () долі погана затія. Тому у нас є два шляхи:
- навчити gocr для точного розпізнавання проблемних символів
- використовувати свій варіант для корекції
Я вибрав другий шлях, оскільки займатися пошуком інформації про навчання gOCR'a бажання не було. Вибір припав на PHP і модуль GD.
Вирізавши 0, 4 і 9 в окремі файли я приступив до бидло КОДІНГ.
Для початку викличемо через shell_exec gocr і переведемо символи в масив.
Потім будемо проходити по отриманої рядку, і якщо ннаткнулісь на спірне символ, який може бути 0, 4 або дев'яткою - викликаючи нашу функцію getChar (позиція) передавши в якості аргументу позицію символу в рядку.
Завдання функції полягає в порівнянні шматка зображення, отриманого з повною капчи з усіма вирізаними мною символами вручну. Якщо кількість білих пікселів в обох шматках на однакових позиціях більше 8 штук, то Перезаписуємо $ answer [$ pos].
Під кінець виведемо результат після обробки.