ИИ для распознавания корейского рукописного текста
Конкукский университет. Старший, Мультимедийное программирование - Курсовой проект (Индивидуальный проект)
1. Введение
«Можно ли выучить корейский почерк человека с помощью искусственной нейронной сети?»
Даже когда пишут одни и те же буквы, стиль почерка каждого человека слегка отличается. Стиль почерка людей, которых заставляют писать или которые пишут во время отрыжки, оставляет следы, отличные от обычного, что делает его очень надежным доказательством. Эта уникальность и делает подпись уникальной. В важных документах и на экзаменах очень важно проверять почерк на подлинность.
Поскольку почерк используется для подтверждения личности, он уникален, но если есть два разных почерка, имеющих лишь незначительные различия, людям трудно различить разницу невооруженным глазом. Поэтому я хотел реализовать модель искусственного интеллекта для распознавания корейского рукописного текста.
(1-1) Входные данные
- Корейский почерк от 10 человек
- Картинка выше написана разными людьми. (Вы можете видеть, что это одни и те же буквы, но немного разные.)
(1-2) Цель
- 10 человек (3 члена семьи, 7 близких друзей)
- BSN (Сона Бан), CHW (Ховон Чхве), KBJ (Бомджун Ким), KJH (Джунхён Квон), LJH (Чонхо Ли), LSE (Сынгон Ли), PJH (Джонхёк Пак), PSM (Сангмун Пак), SHB( Сок Хёнбин), SWS (Усуб Шин)
(1-3) Ожидаемая область применения
- Проверка почерка государственной экспертизы и важных документов.
- OCR (оптическое распознавание символов)
2. Создание базы данных
2-1. Однобуквенные данные
(1) я прочитал
- Использован шаблон, предоставленный компанией Ongle-leap, занимающейся дизайном шрифтов.
- Включены все комбинации корейских букв.
(2) Нерезкая маска
- Использовал нерезкую маску, чтобы отточить почерк.
(3) Преобразование оттенков серого
(4) Проверка гистограммы и применение 1-го порога
- Порог устанавливается с помощью гистограммы, и изображение преобразуется в бинарный вид на основе порога.
- (В этом примере порог установлен на 150 от 0 до 255)
(5) Применить ФНЧ
- Чтобы извлечь положение почерка, необходимо сгладить почерк через ФНЧ, чтобы обнажился контур.
- Установите соответствующий размер ядра и примените LPF к бинаризованным изображениям через cv2.filter2D.
- Чем меньше размер ядра, тем легче обнаружить более мелкие единицы, такие как гласные и согласные, и чем больше размер ядра, тем легче обнаружить контур самой буквы.
- (Пример касается ядра 21x21)
(6) Проверка гистограммы и применение второго порога
- Установите порог через гистограмму изображения, сглаженного с помощью LPF, затем бинаризация выполняется еще раз на основе порога.
- (Пример порогового значения: 230)
(7) Извлечение контура и координат, обрезка изображения
- Небольшой контур, не являющийся буквой, не был извлечен.
- Координаты x,y и значения w,h были извлечены из извлеченного контура, а координаты были рассчитаны заново с помощью квадрата, чтобы характеристики рукописного ввода не были максимально потеряны, поскольку позже их пришлось изменить до размеров 64х64.
- По вычисленным координатам изображение было обрезано до квадратной формы.
(8) Записать
- 81 однобуквенная информация на человека
- всего: собрано 810 однобуквенных данных,
2-2. Двухбуквенные данные
- Двухбуквенные данные были созданы путем объединения различных однобуквенных данных, каждая из которых масштабировалась соответствующим образом.
- Чтобы уменьшить потерю информации об объектах при изменении размера, была создана функция img_concat(img1, img2), которая использовалась для соединения изображений и формирования их в квадраты.
- Получено 6480 двухбуквенных данных на каждую цель (81P2).
2-3. Трехбуквенные данные
- Трехбуквенные данные были получены путем объединения однобуквенных и двухбуквенных данных, каждая из которых масштабировалась соответствующим образом.
- Получено 7980 трехбуквенных данных на каждую цель.
2-4. Фактические рукописные данные из заметок
- Данные были получены в результате фактических записей объекта.
- Получено 30 фактических рукописных данных на каждую цель.
3. 1-й результат
Данные поезда: Тестовые данные = 9:1
Используемые данные = Однобуквенный(81) + Двухбуквенный(500) + Трехбуквенный(500) + Фактический почерк(30)
n.Epoch = 20, Размер пакета = 50, Скорость обучения = 0,01
Настройка слоев
- Результат
- Потеря=0,7819, Точность=0,72.
- Результат для тестовых данных = 0,6503
4. 2-й результат
Данные поезда: Тестовые данные = 9:1
Используемые данные = Однобуквенный(81) + Двухбуквенный(1000) + Трехбуквенный(1300) + Фактический почерк(30)
n.Epoch = 20, Размер пакета = 150, Скорость обучения = 0,04
Настройка слоев
- Результат
- Потеря=0,0397, Точность=0,9908.
- Результат для тестовых данных = 0,9360
5. Анализ результатов
По сравнению с первым результатом все вторые результаты были значительно улучшены. Я думаю, что причина улучшения результатов заключается в следующем.
(5-1) Увеличение объема данных, используемых для обучения
- В первой попытке на одну цель было использовано 1111 данных, а во второй попытке — 2411 данных, что более чем в два раза больше.
- Поскольку обучение и оценка проводились на основе большего количества данных, можно было уловить более тонкие характеристики почерка объекта.
(5-2) Изменения на уровне искусственной нейронной сети
- Во второй попытке были изменены размер маски свертки и размер пула.
- Размер маски свертки был уменьшен до меньшего размера, чем раньше, чтобы передать очень мелкие характеристики рукописного ввода.
- Уменьшена потеря характеристик почерка в процессе обучения за счет уменьшения размера пула.
- Кроме того, чтобы содержать больше информации о рукописном вводе в качестве параметров, количество узлов в полностью подключенном режиме было увеличено со 128 до 256.
(5-3) Увеличение размера партии и скорости обучения