Проект автоматичексого распознования сканированных тестов для учебного заведения для 4х уровней подготовки (различные варианты ответов)
образец анкеты:
Основная идея - в анкете 6 черных квадратов, по которым отсканированное изображение поворачивается и преобразуется (warpPerspective) в нормированное изображение.
В нормированном изображении необходимые квадраты имеют абсолютные координаты, что позволяет легко находить bounding box интересующего элемента.
В полях фамилии и имени, кода учителя дополнительно убираются точки.
Для распознования цифр используется cnn (за основу взята статья https://medium.com/@ravivaishnav20/handwritten-digit-recognition-using-pytorch-get-99-5-accuracy-in-20-k-parameters-bcb0a2bdfa09) Для распознавания букв и ответов используются resnet50 и resnet18 соответственно с заменой последнего слоя под задачу.
Для обучения русскому алфавиту за основу был взят датасет https://github.com/GregVial/CoMNIST дополненный картинками с рабочих анкет. Для ответов датасет сформирован с рабочих анкет. (оба датасета в архиве в релизе, в папке train ноутбуки для обучения)
Обучение проводилось на google colaboratory, обработка анкет - на vm с centos7
Рабочая структура директории проекта
- OCR
- src
- 02_test
- image1.jpeg
- ...
- imageN.jpeg
- 02_test
- data
- файлы dict для cnn из архива в релизе
- dst
- здесь будут результирующие файлы
- main.py - основной файл
- ocr.py - класс реализующий обработку
- results.csv - создаваемый файл
- src
для запуска необходимы torch, torch-vision, pandas, numpy
В результате запуска main.py формируется csv файл.
- fio - распознаная фамилия и имя
- teacher - код учителя
- level - распознанный уровень
- sum - кол-во правильных ответов
- err - ошибочные ответы
- filename - имя результирующего файла в папке dst
В результирующем файле нормированное изображение с отмеченными неправильными ответами.
Пример: