背景介绍
图像处理在工程和科研中都具有广泛的应用,例如:图像处理是机器视觉的基础,能够提高人机交互的效率,扩宽机器人的使用范围;在科研方面,相关学者把图像处理与分子动力学相结合,实现了多晶材料、梯度结构等裂纹扩展路径的预测,具体见深度学习在断裂力学中的应用,以此为契机,偷偷学习一波图像处理相关的技术,近期终于完成了相关程序的调试,还是很不错的,😄~
程序主要的功能如下:1、通过程序控制摄像头进行手势图像的采集;2、对卷积网络进行训练,得到最优模型参数;3、对采集到的手势进行判断,具体如下图所示:
附:后续需要学习的内容主要包括:1、把无线数据传输集成到系统内部;2、提高程序在复杂背景下识别的准确率。
补充材料
1、图像抓取:安装OpenCV、Python PIL等库函数,实现图片的显示、保存、裁剪、合成以及滤波等功能,实验中采集的训练样本主要包含五类,每类200张,共1000张,图像的像素为440*450;通过image.resize命令,把图片大小统一变为227*227,图像采集过程具体如下所示:
12年的笔记本,依然可以安装Pycharm,TensorFlow,OpenCV等,性能还是不错的,😅
import cv2 as cv
capture=cv.VideoCapture(0)
ret,frame=capture.read()
img=frame[img_y:(img_y+height),img_x:(img_x+width)]
cv.imshow("frame",img)
cv.imwrite("E:/python/data"+'ges_1'+str(num)+".jpg",img)
其中,VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“…/test.avi”);ret,frame是获cap.read()方法的两个返回值。其中,ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False,frame就是每一帧的图像,是个三维矩阵,默认的像素值为640*480;img_x、img_y分别表示图像裁剪的起始位置。
2、图像识别:基于机器学习方法进行图像识别通常分为几个阶段:人工设计特征,提取特征和用分类器进行分类,人工设计特征和提取特征非常复杂和困难,而深度学习方法通过构建深层神经网络结构,将这繁琐的步骤全权交给神经网络,不需要过多的人工干预,极大提高了识别效率。其中,卷积神经网络主要由卷积层、池化层、激活函数等几部分组成,具体如下所示:
卷积神经网络相对于传统的全连接网络,其网络参数变量大大减少,降低了由于参数过多引起的过拟合现象的发生,padding=”same”表示原图像经过卷积操作后得到的特征图与原图尺寸一致;padding=”valid”表示不适用全 0 填充,原图经过卷积操作后尺寸将发生变化。
池化层主要对特征数据进行降维,极大的提高了数据的抗干扰能力,常见的池化层有最大池化与均值池化。
随着训练次数的增加,手势识别的准确率不断提高,最终达到98%以上,具有较好的识别效果;第二张图可知,随着模型训练次数的不断增加,损失函数逐渐减小,其具体的迭代过程与有限元求取过程类似,本文中采用AdamOptimizer算法,具体参见https://blog.csdn.net/lomodays207/article/details/84027365
附1:数据手套(Data Glave)是一种常见的研究手势识别技术的硬件设备,其内置了大量的传感器,可以很容易获取到手掌和手套的位置,该方法具有精度高、反应速度快等优点,然而该方法具有较高的成本。近些年来,随着计算机技术的发展,各类图像处理算法应运而生,使得准确识别人体手势成为了可能,大大缩减了人与机器的距离。