前言
数字识别是计算机视觉领域中的一个重要任务,它涉及将输入的手写数字图像分类为特定的数字。实时数字识别具有广泛的应用,包括手写数字识别、自动识别信用卡号码等。本教程将介绍如何使用 OpenCV(Open Source Computer Vision Library)和卷积神经网络(Convolutional Neural Network,CNN)来实现实时数字识别。
OpenCV 是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法,包括图像处理、特征检测、对象跟踪等功能。CNN 是一种深度学习模型,已被广泛用于图像识别任务,特别是在数字识别方面取得了很大的成功。
通过本教程,您将学习到如何利用 OpenCV 和 CNN 构建一个实时数字识别系统,并了解数字识别背后的基本原理和技术。希望本教程能够帮助您在实践中掌握图像处理和深度学习技术,为您的项目和研究提供帮助和启发
关于CNN的介绍
Python版本要求 : 3.6 3.7 其他自测。
我所安装的库 :
opencv 4.2.0.32
numpy 1.1.81
sklearn
keras 2.3.1
matplotlib 3.1.3
TensorFlow 2.0.0
训练模型
1.初始操作
对数据集进行数量导出,并创建数组。
import cv2
import numpy as np
import os
##############################
path = 'myData'
images=[]
classNo=[]
##############################
myList = os.listdir(path)
print("总class:",len(myList))
noOfClasses = len(myList)
print('import class...')
for x in range(0,noOfClasses):
myPiclist = os.listdir(path + '/' + str(x))
for y in myPiclist:
curImg = cv2.imread(path + '/' + str(x) + '/' + y)
curImg = cv2.resize(curImg,(32,32))
images.append(curImg)
classNo.append(x)
print(x,end=' ')
print('')
#print(x)
#print(len(images))
#print(len(classNo))
images = np.array(images)
classNo = np.array(classNo)
print(images.shape) #(10160,32,32,3)
2.将数据集分为 training testing validation
添加库
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
numOfSamples=[]
testRatio = 0.2
valRatio = 0.2
X_train,X_test,Y_train,Y_test = train_test_split(images,classNo,test_size=testRatio)
X_train,X_validation,Y_train,Y_validation = train_test_split(X_train,Y_train,test_size= valRatio)
print(X_train.shape)
print(X_test.shape)
print(X_validation.shape)
for x in range (0,noOfClasses):
#print(len(np.where(Y_train == x)[0]))
numOfSamples.append(len(np.where(Y_train == x)[0]))
print(numOfSamples)
用直方图plot出各个ID对应的图片数量
plt.figure(figsize=(10,5))
plt.bar(range(0,noOfClasses),numOfSamples )
plt.title('No of Images for e