学习的程序:https://github.com/xionghc/Facial-Expression-Recognition
1,image.shape返回的是图片的行数,列数,色彩通道数。
注意:参考:https://blog.csdn.net/qingyuanluofeng/article/details/51568741
(1)行数对应坐标轴上的y,即图像的高度
(2)列数对应坐标轴上的x,即图像的宽度
(3)所以shape返回的是(高度,宽度)=(y,x)
2,
faces=cascade_classifier.detectMultiScale(image,scaleFactor=1.3,minNeighbors=3)
https://blog.csdn.net/cooli7wa/article/details/53959195
简单理解就是将输入图像和训练好的图像进行图像匹配。待。。。
(1)image:我们要输入的图像
(2)scaleFactor=1.3:缩小图像的比例
(3)minNeighbors=3:是匹配成功所需要的周围矩形框的数目,每一个特征匹配到的区域都是一个矩形框,只有同时多个矩形框同时存在的时候,才认为是匹配成功。比如人脸,这个默认值是3.
3,https://www.cnblogs.com/neo-T/p/6430583.html
以上博文对 cascade_classifier.detectMultiScale讲的挺好的。
x, y, w, h = faceRect
所以在faces里面包含的是这四个数据
4,face_x = tf.placeholder(tf.float32, [None, 2304]) #定义数据类型
shape:这里定义的的是2304列,行不定
参考文章https://blog.csdn.net/cc1949/article/details/78364615?locationNum=4&fps=1
5,softmax(多分类的归一化)
http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
发现了一个高级的网站
6,saver = tf.train.Saver()
https://blog.csdn.net/qiqiaiairen/article/details/53184216
就是保存模型的参数
7,
ckpt = tf.train.get_checkpoint_state(modelPath)
https://blog.csdn.net/changeforeve/article/details/80268522
#通过checkpoint文件找到模型文件名
8,sess = tf.Session()
https://blog.csdn.net/Enchanted_ZhouH/article/details/77571939
徐其华的博客讲的很详细:https://www.cnblogs.com/denny402/p/6940134.html
创建一个会话,当上下文管理器退出时,会话关闭和资源释放都是自动完成的。
但是,tf.Session().as_default()。是当上下文管理器退出时,会话没有关闭,那么还可以通过调用会话进行run和eaval()操作
9,saver.restore(sess, ckpt.model_checkpoint_path)#模型的恢复
徐其华的博客讲的很详细:https://www.cnblogs.com/denny402/p/6940134.html
10,cv2.putText(frame, emotion, (10, index * 20 + 20), cv2.FONT_HERSHEY_PLAIN, 0.5, (0, 255, 0), 1)
这个就是要在图片上写上字。
参考文章:https://blog.csdn.net/gan_player/article/details/78155283?utm_source=debugrun&utm_medium=referral
11,报错:没有len(image.shape) > 2 and image.shape[2] == 3中的shape类型。
结果插上摄像头他就好了。
12,按下“p”键,他没有退出。可能是因为对齐方式不对。