第3周团队博客

本周团队完成了Js脸部图像处理,眼部图像正则化,cnn模型改进,Hibernate学习与使用等工作。

Js脸部图像处理

具体请见@zekdot
利用clmtrackr.js来帮助寻找脸部,脸部坐标图如下:
第3周团队博客
这里分为左眼和右眼进行处理,由于用户的脸可能是倾斜的,所以应该找出眼睛各边界的最值,同时由于可能存在的误差,应该适当扩展边界。

在合适的范围内,眼睛的X轴方向基本由眼角确定边界,但是Y轴则可能是由两眼角或眼睛上部确定的,所以需要取三点最值来确定边界。效果如下:
第3周团队博客
接下来灰度化
Y=0.2998∗R+0.587∗G+0.114∗B

以这个亮度值Y YY表达图像的灰度值。

根据这个公式,我们可以写一个函数来处理每一个像素点,将RGB转换为亮度值。效果如下:
第3周团队博客
最后增强对比度是为了在一定程度上去除不同光照的影响,采用直方图均衡化法,效果如下:
第3周团队博客

CNN模型改进

详见@AFXBR@Jemary
在新读的Eye Tracking for Everyone这篇论文中,作者通过cnns的训练实现了在手机和平板上的视线追踪功能,而且误差在1cm左右,精度较高。

而且对比于之前看的论文(Appearance-Based Gaze Estimation in the Wild)中需要坐标系变换和摄像头位置等参数进行图像的预处理等步骤,新阅读论文中在训练之前需要的图像预处理参数更少,而且由于我们也缺少摄像头等对应的参数,不容易实现原来的方法,我们决定采用新的模型结构在原数据集上进行一下测试
新的模型结构如下图所示:
第3周团队博客
因为原数据集,缺少脸部完整的图像信息,因此在实际使用该模型的时候,我们只使用了左右眼部经过标准化后的图像,利用两个眼部图像分别进行卷积操作,最后喂入全连接层。
测试结果如下图所示
第3周团队博客
在同样100轮的训练下,accuracy可以看出有较明显的提升,接下来考虑进行更多轮数的训练并且尝试加入更多的特征。

面部图像正则化

详见@米老鼠与刘老根
使用python语言实现了面部图像的正则化,代码分为3部分:负责正则化图像的normalizeImg函数,把头部旋转角度向量和旋转矩阵互相转换的rodrigues函数,以及调用前两者正则化图像的normalize_data函数。
其中使用了warpPerspective函数,是将成像投影到一个新的视平面的函数,即可以将摄像机以一定角度拍摄的人脸图像转化为平行于人脸拍摄的图像。
效果如下:
第3周团队博客

Hibernate学习与使用

详见@Jemary
就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。

“比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择mybatis就会加快许多,而且语句的管理也比较方便。”

  • Mybatis优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。

  • Hibernate优势

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

  • Summary:

Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。