Распознавание рукописных цифр на основе метода ближайшего соседа (с включенным исходным кодом Python)

Python

Этот код эксперимента был загруженХлеба много, пожалуйста, нажмите, чтобы купить, или обратите внимание на официальный аккаунт [All Code Farmers], ответьте [ближайшим соседям] и получите его бесплатно в течение ограниченного времени!

Обзор эксперимента

В этом эксперименте для идентификации и обнаружения рукописных цифр с соответствующими алгоритмами используются OpenCV, Python и другие инструменты.Для обучения могут быть предоставлены обучающие наборы и тестовые наборы, а для тестирования могут быть введены рукописные шрифты.

Выполнив этот эксперимент самостоятельно, я могу значительно улучшить свое понимание Python и OpenCV, а также освоить технологию извлечения признаков рукописных цифр и метод сопоставления шаблонов ближайших соседей.

Экологическая записка

Система: виндовс 10

Программное обеспечение: PyCharm Community Edition 2020.2.2 x64

Язык: питон 3.6

Среда: cv2, numpy, matplotlib.pyplot, время

набор данных

Этот набор данных состоит из 100 изображений, чисел 0-9, 10 изображений для каждого числа, 8 обучающих наборов и 2 тестовых наборов. следующее:

0-1Рис. 1. Нулевая цифра 1-1Рисунок 2 Номер один
2-1Рисунок 3 Номер два 3-1Рисунок 4 Номер три

Значение терминов

Учебный набор: параметры модели можно обучить, чтобы модель соответствовала правильной функции прогнозирования.

Набор тестов: протестируйте обученную модель, чтобы оценить способность итоговой модели к обобщению.

Набор проверки: используется для настройки гиперпараметров и контроля за переобучением модели.

Заявление о потребностях

Экспериментальный контент

\ 1. Научиться использовать метод сканирования строк и столбцов для получения подпрограммы верхнего, нижнего, левого и правого положения рукописных цифр.

\ 2. Разработайте алгоритм извлечения признаков для рукописных цифр и напишите соответствующую программу извлечения признаков.

3. Напишите программу распознавания рукописных цифр, основанную на сопоставлении с шаблоном ближайшего соседа.

Экспериментальные результаты и анализ

Запишите входные числа 0-9, каждое с 10, соответствующие результаты распознавания после запуска программы и проведите углубленный анализ результатов.

\ 1. Запишите визуализацию извлечения признаков каждого образца.

\ 2. Запишите нормированные собственные значения, соответствующие выборке.

\ 3. Подсчитайте правильную скорость распознавания каждого числа. Глубокий анализ ошибочно идентифицированных ситуаций.

дизайн программного обеспечения

1. Схема конструкции системы

img

список функций

Имя функции Краткое описание функции Краткое описание функционального интерфейса
ImgToNp() Импортируйте путь изображения в матрицу. Вход: Нет Выход: Матрица пути изображения
outFeature() Обработайте функции признаков и пометьте их. Вход: матрица пути изображения. Выход: набор матриц обучающих изображений и набор меток.
star() Программа выполняет циклическое тестирование и вывод в соответствии с заданной структурой. Вход: набор матриц обучающих изображений и набор меток. Выход: результат обучения.
TestImgToNp() Введите тестовые изображения и преобразуйте их в матрицы. Вход: адрес тестового изображения. Выход: матрица тестового изображения.
outfeatureImg() Карта выходных признаков и собственные значения. Входные данные: набор матриц обучающих изображений. Выходные данные: сохранить карту признаков и значение признака в файл. \

Введение кода

(1) Код Mainapp.py

mainapp.py — основная программа, и в нее включены функции из списка функций в таблице 1.

После запуска программа сначала использует функцию ImgToNp(), чтобы преобразовать 80 образцов изображений в папке 0-9 в папке img в матрицу, сохранить ее в переменной и вернуть.

image-20201128202625504

image-20201128202640461

image-20201128202720385

image-20201128202731144

4. Экспериментальные результаты

После запуска mainapp.py окно вывода выглядит следующим образом:

\1.   图片地址以导入矩阵...... 

\2.   准备提取特征...... 

\3.   特征以存储于feature矩阵...... 

\4.   准备贴标签...... 

\5.   标签以贴完...... 

\6.   是否输出特征图与特征值?y/n: 

При вводе y программа выводит значения функций и карты функций 80 образцов, которые хранятся в «./fandimg/{0-9}» и «./fandimg/featureArray/{0-9}». соответственно. Как показано ниже:

4imgimg

程序继续运行,输出框输出:
1.	3-9.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[3. 7. 1.]]但是正确结果为:3  
2.	4-9.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[1. 1. 1.]]但是正确结果为:4  
3.	5-10.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[5. 1. 1.]]但是正确结果为:5  
4.	6-10.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[1. 1. 1.]]但是正确结果为:6  
5.	7-9.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[1. 1. 1.]]但是正确结果为:7  
6.	8-9.bmp 这张图判断错误了,系统判断为:3 最接近的三个结果为:[[8. 9. 3.]]但是正确结果为:8  
7.	8-10.bmp 这张图判断错误了,系统判断为:9 最接近的三个结果为:[[8. 9. 9.]]但是正确结果为:8  
8.	9-9.bmp 这张图判断错误了,系统判断为:1 最接近的三个结果为:[[9. 7. 1.]]但是正确结果为:9  


f