用LBPH分类器上面的两次输出都分辨囸确但是用Eigen和Fisher两种分类识别器,在默认参数情况下上面的测试就都分类为1了,没有正常识别出来 测试样本是yale人像库的01和02号人像。 |
俗话说:
不基于需求的敲代码都是耍流氓
首先需要准备人脸的训练数据,这个在官方的Github可以下载到,这里用:
然后有请世界上最傻最天真,最美丽最善良的Girl登场
:
本想全用Kotlin写的,不过发现Kotlin竟然无法自动生成JNI函数...
但我又懒得找id,就混着用吧,使用TolyCV提供native方法
//识别矩陣返回脸的矩形列表很多教程都把代码塞到JNI的cpp里,感觉看着太混乱太难受了
根据單一职责原则,这里定义一个FaceDetector类
专门用于识别传入的图片数组
并通过detectorFace
方法进行识别后返回识别到的结果集这样思路就清晰多了。
其实上面已经识别出人脸并到存到一个vector中。现在把它在图像上画出来
根据不同的模型数据可以检测到不同的部位,比如眼睛:
检测也会出现误差此时可以通过一些判断来筛选结果,比如先检测人脸之外的部分可以过濾
或者根据两眼间距,计算出不可能的矩形将其剔除,这也是图片识别比较好玩的地方
现在需求是:
根据一张照片(尺寸任意)截取人脸及周围,并裁成规定的尺寸如两寸:413*626
就像这样:
新定义一个native方法faceDetectorResize方法进行执行该功能,返回一个处理过的图片
这里只针对一个人脸,多个人脸可以采取问题分化的思想。
首先要解决的是区域的问题:这个Rect是何许人也?如果你对一个对象有疑惑debug是不二人选
知道这些信息,就很容易构建目标區域(红色区域),剩下的就是裁切红色区域了
Mat类重载
()运算符
可以传入一个矩形,实现是通过构造生成一个新Mat
这样就完成了既定比例的裁切并保证人脸始终在中上部。
另外有一点需要注意:
当矩形范围超出Mat会报错
,应该可以通过添白来处理,Mark一下
最后只剩重设尺寸了,
注意把你画的矩形线给去掉,不然会输出到结果中
OK,打完收工再也不怕妹子让我帮她设置图片尺寸了。
对于大批量形形色色的人物照片,想要裁剪规整一个for循环搞定,程序是绝佳劳动力