Организация, взаимодействующая с донорами крови, ведет учет активности доноров. Они присылают фото справок из пунктов сдачи крови, а работники организации вручную перепечатывают данные из этих справок в свои таблицы в формате csv. К этим данным относятся: дата сдачи крови, вид донорства (для каких целей сдается кровь), тип донации (безвозмездный или нет). Задача - автоматизировать процесс оцифровки необходимых данных из фотографий и сканов справок. Для проведения этой работы, организация предоставила примеры справок и получаемых из них таблиц (в количестве 16 штук).
Цель
Разработать алгоритм оцифровки данных из таблиц, напечатанных на медицинских справках формы 405-05у.
Подготовка фотографии и распознавание на ней всех символов.
- Загрузка фотографии справки
- Проверка ее размера. Если размер меньше 800px по ширине, то производится rescale фотографии с сохранением пропорций до 3000px по ширине.
- Распознавание всех символов на фото с помощью easyOCR. На выходе получается массив данных, содержащий распознанные строки.
Поиск и выделение полезных данных в виде таблицы.
- В распознанном тексте ищутся только такие строки, в которых последовательно расположены записи, соответствующие дате, типу донорства и количеству сданной крови. Проверка на соответствие проводится с помощью регулярных выражений.
- Найденные строки сшиваются в таблицу.
- Даты обрабатываются таким образом, чтобы из них получить день, месяц и год.
- Вид сданной крови и тип донорства также определяются с помощью регулярных выражений.
- Из очищенных и отфильтрованных данных (дата, вид крови и тип донации) формируется таблица в формате pd.DataFrame..
Расчет точности работы алгоритма.
- Из двух таблиц - предсказанной и реальной вытаскиваются "похожие" записи и склеиваются попарно для дальнейшего расчета метрики. Критерий "похожести" - это одинаковые первые три символа в дате донации.
- Все ячейки попарно сравниваются. Сравнение поэлементное: точность для одной ячейки рассчитывается как отношение правильно распознанных символов к общему их числу.
- Точность детектирования документа - это усредненная точность по всем ячейкам таблицы.
Описанный алгоритм обеспечил среднюю точность распознавания таблиц (accuracy) - 56%. Половина документов распознана более, чем на 70%.