Сейчас я пытаюсь создать систему распознавания цифр, используя OpenCV. В WEB (и даже на qaru.site/info/2933/...) есть много статей и примеров. Я решил использовать классификатор KNN, потому что это решение является самым популярным в WEB. Я нашел базу данных рукописных цифр с обучающим набором из 60 тыс. Примеров и с частотой ошибок менее 5%.
Я использовал этот учебник в качестве примера того, как работать с этой базой данных с помощью OpenCV. Я использую точно такую же технику и тестовые данные (t10k-images.idx3-ubyte
). У меня 4% ошибка. Но когда я пытаюсь классифицировать свои собственные цифры, у меня гораздо большая ошибка. Например:
- распознается как 7
- и распознаются как 5
- и распознаются как 1
- распознается как 8
И так далее (я могу загрузить все изображения, если это необходимо).
Как вы можете видеть, все цифры имеют хорошее качество и легко узнаваемы для человека.
Поэтому я решил сделать предварительную обработку перед классификацией. Из таблицы на сайт базы данных MNIST Я обнаружил, что люди используют методы округления, шумоподавления, размытия и смещения пикселей. К сожалению, почти все ссылки на статьи нарушены. Поэтому я решил сделать такую предварительную обработку самостоятельно, потому что я уже знаю, как это сделать.
Сейчас мой алгоритм выглядит следующим образом:
- Erode image (Я думаю, что мои оригинальные цифры тоже шероховатая).
- Удалить небольшие контуры.
- Порог и размытие изображения.
- Центральная цифра (вместо переключения).
Я думаю, что в моей ситуации нет необходимости в работе, потому что все цифры обычно вращаются. А также я понятия не имею, как найти правильный угол поворота. Поэтому после этого у меня есть следующие изображения:
- также 1
- 3 (не 5, как это было раньше)
- 5 (не 8)
- 7 (прибыль!)
Итак, такая предварительная обработка мне немного помогла, но мне нужны лучшие результаты, потому что, на мой взгляд, такие цифры должны быть распознаны без проблем.
Может ли кто-нибудь дать мне какие-либо советы по предварительной обработке? Спасибо за любую помощь.
P.S. Я могу загрузить исходный код (С++).