动手学AI系列文章介绍了用opencv调用摄像头的方法和用训练神经网络识别手写数字的方法。
如何把这两者结合起来,使用神经网络能识别摄像头拍摄到的图像呢?
一、保存及调用训练好的神经网络模型:
在上篇文章代码的末尾加上两行代码,用于保存神经网络模型。
import h5py
model.save('picturelearn.h5')
在以后的程序中,就只要调用此模型,进行手写数字识别。
调用神经网络模型:
from keras.models import load_model
model=load_model('picturelearn.h5')
二、识别摄像头拍摄的手写数字
使用网络前,要捕获摄像头图片,并对图片进行处理与识别。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
# 从摄像头读取一帧,ret是表明成功与否
ret, frame = cap.read()
if ret:
cv2.imshow('frame',frame)
#处理图片
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#灰度图
number=gray[50:330,180:460]#截取图片中间部分(数字区域)
little=cv2.resize(number,(28,28),interpolation=cv2.INTER_CUBIC)#图片大小改成28*28
ret,thresh=cv2.threshold(little,127,255,cv2.THRESH_BINARY_INV)#二值化,反转
X=thresh.reshape(1,784).astype('float32')#修改成神经网络所要求的数据形状
x=X/255#归一化
result=model.predict(x)[0]#识别
res=np.argmax(result)#提取识别结果
print(res)#显示识别结果
else:
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
领取专属 10元无门槛券
私享最新 技术干货