人脸识别:
完成以下人脸识别功能。
创建一个人脸库,实现人脸库的类FaceDatabase。
支持随时向人脸库中增加特征向量,实现接口add(name, vector);
支持随时删除人脸库中的人员,实现接口delete(name);
支持随时更新人脸库中的特征向量,实现接口update(name, vector);
支持,从人脸库中搜索所有相似度符合要求的人脸search(similarity, vector)。-- 返回值是人员名称的数组。
特征向量:每个人脸经过算法提取后,可以得到一串数据(浮点数),这里是一个长度为10的数组,如:
v1 = [0 , 1 , 2 , 3, 4 , 5 , 6 , 7 , 8 , 9];
v2 = [0 , 1 , 2 , 3, 4 , 5 , 6 , 7 , 8 , 9];
v1[i]和v2[i]是0到100之间的float
v1、v2相似度公式:
相似度s的范围是0到100之间的float
示例:
var faceDB = new FaceDatabase();
//添加姓名为lilei特征向量(0,1,2,3,4,5,6,7,8,9)到人脸库
faceDB.add(‘lilei’, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
//添加姓名为hanmeimei特征向量(0,1,2,3,4,5,6,7,8,9)到人脸库
faceDB.add(‘hanmeimei’, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
//更新lilei的特征向量为(1,1,2,3,4,5,6,7,8,9)
faceDB.update(‘lilei’, [1, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
//搜索和(0,1,2,3,4,5,6,7,8,9)相似度90.0%(包含90.0%)以上的人
faceDB.search(90, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); //返回值[‘hangmeimei’]
faceDB.delete(‘hanmeimei’);
faceDB.search(0.0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); //返回值[‘lilei’]
function FaceDatabase () {
var obj = {
};
var vectors = [];
var names = [];
obj.add = function (name, vector) {
if (name === '') alert('name不能为空');
vectors.push(vector);
names.push(name);
};
obj.delete = function (name) {
if (name === '') alert('name不能为空');
if (names