В настоящее время компьютерное зрение интенсивно применяется для автоматизации процессов обработки визуальной информации, в том числе в образовательной и инженерной сферах. Блок-схемы остаются одним из наиболее наглядных способов проектирования алгоритмов, особенно в процессе обучения программированию. Они позволяют абстрагироваться от синтаксиса конкретного языка и сосредоточиться на логике решения задачи. Однако ручное преобразование блок-схемы в программный код является трудоемким. Автоматическое распознавание рукописных или печатных блок-схем с последующей генерацией кода способно значительно ускорить разработку и облегчить обучение.
Существует ряд работ, посвященных распознаванию блок-схем. Например, в исследовании Montellano et al. [1] используется Faster R-CNN и грамматический анализ для генерации C-кода. Другие подходы [2, 3] применяют CNN для классификации элементов и нейронные сети для учета связей. Однако многие из этих решений ориентированы на онлайн распознавание.
В данной работе предлагается автономная система для преобразования статического изображения блок-схемы в код Python. Основными вкладами являются: Интеграция современной модели YOLO для определения фигур и стрелок. Использование EasyOCR и постобработки для извлечения текста. Генерация Python-кода с сохранением структуры ветвлений. Графический интерфейс для интерактивной работы.
Разработанный преобразователь состоит из пяти основных модулей: Загрузка модели YOLO, загрузка изображения, определение фигур, извлечение текста, генерация кода. Графический интерфейс реализован на Tkinter и позволяет отображать исходное изображение, а также сгенерированный код в многострочном текстовом поле.
Для распознавания геометрических элементов используется YOLO в реализации ultralytics. Выбор YOLO обусловлен балансом между скоростью и точностью для объектов небольшого размера, таких как стрелки и текст внутри фигур. В процессе определения для каждого обнаруженного объекта извлекаются координаты, центр, тип фигуры и уверенность. Важной особенностью является необходимость определения стрелок. В отличие от работы [1], где использовалась Faster R-CNN с VGG-16, в нашем подходе YOLO обучается непосредственно на размеченных стрелках с направлением.
Для извлечения текстовых надписей применяется библиотека EasyOCR, которая использует CNN + LSTM архитектуру. В отличие от подхода Puigcerver [4], использованного в эталонной статье, наша система не требует отдельной нейросети для классификации символов, что упрощает реализацию, хотя может снижать точность на рукописном тексте с плохим почерком. В будущем планируется интеграция дообучаемого OCR с механизмом постоянного обучения, как описано в [1].
Модель YOLOv8n обучалась на 500 размеченных изображениях в течение 50 эпох. Средняя точность составила 84.2% по всем классам. Самые низкие показатели оказались у стрелок вверх (72%) и влево (68%) из-за частого перекрытия с линиями рамок. Для сравнения, в работе [1] средняя точность по фигурам также была высокой, но стрелки распознавались хуже (около 70%).
На тестовых изображениях с печатным текстом (шрифт Arial, размер 12-14 pt) EasyOCR достиг точности символов 94% и CER (Character Error Rate) 6%. На рукописных блок-схемах точность упала до 67%, что соответствует результатам, приведенным в [1] (66.7% для модели Puigcerver). Таким образом, для промышленного использования требуется адаптация OCR под почерк пользователя.
Из 56 тестовых изображений корректный ориентированный граф был построен для 42 (75%). Из них для 36 (64% от общего числа) был сгенерирован синтаксически верный код Python, который успешно выполнялся. На рисунке 1 показан пример входного изображения, а на рисунке 2 – сгенерированный код.

Рисунок 1. Пример входной блок-схемы (факториал)

Рисунок 2. Сгенерированный Python-код
В отличие от системы Montellano et al. [1], которая генерирует C-код и имеет 45% полностью успешных выполнений (правильный граф + код без ошибок), наша система достигла 64% успешных генераций. Это объясняется более надежным определением текста (EasyOCR против самодельной CNN+LSTM) и использованием современной YOLO вместо Faster R-CNN. Однако подход [1] лучше работает с рукописными стрелками за счет специализированного обучения на кривых линиях.
Список литературы
- C. D. B. Montellano, C. O. F. Campos Garcia, R. O. Cruz Leija. "Recognition of Handwritten Flowcharts using Convolutional Neural Networks". International Journal of Computer Applications, 2022
- W. Szwoch and M. Mucha. "Recognition of Hand Drawn Flowcharts". Advances in Intelligent Systems and Computing, vol. 184, pp. 65–72, 2013
- J. I. Herrera Camara. "Flow2Code: from hand-drawn flowcharts to code execution". Master thesis, Texas A&M University, 2017
- J. Puigcerver. "Are Multidimensional Recurrent Layers Really Necessary for Handwritten Text Recognition?". 14th IAPR International Conference on Document Analysis and Recognition (ICDAR), Kyoto, 2017, pp. 67–72
- S. Ren, K. He, R. Girshick, J. Sun. "Faster R-CNN: Towards real-time object detection with region proposal networks". Advances in Neural Information Processing Systems, 2015
- B. Schafer, M. Keuper, H. Stuckenschmidt. "Arrow RCNN for handwritten diagram recognition". IJDAR, vol. 24, pp. 3–17, 2021
- U. Marti and H. Bunke. "The IAM-database: An English Sentence Database for Off-line Handwriting Recognition". Int. Journal on Document Analysis and Recognition, vol. 5, pp. 39–46, 2002


