我运行的是openCV和nodejs,我的目标是制作一个程序,在看到面孔时(已经这样做)拍摄一张面孔的图片,然后将该面孔与各种面孔进行比较,以查找是否匹配。我会知道数据库中谁是谁,所以基本上我会知道该站点为谁拍照。我在下面获得了这段代码来拍照并保存...但是我不确定如何获取测量值或与另一张脸进行比较。我找到了用于图像比较的示例,但是我想我需要进行脸部比较。
var snap = function(){
vid.read(function(err,im){
im.detectObject(cv.FACE_CASCADE,{},function(err,faces){
console.log("FACES", faces)
if (faces.length == 0){
console.log("No Faces")
return false;
}
var face = faces[0]
, ims = im.size()
var im2 = im.roi(face.x, face.y, face.width, face.height)
/*
im.adjustROI(
-face.y
, (face.y + face.height) - ims[0]
, -face.x
, (face.x + face.width) - ims[1])
*/
im2.save('out.jpg')
})
});
}
折断()
谢谢
最佳答案
我相信您正在使用node-opencv库?您将需要更多步骤。您必须训练自己的opencv系统,然后才能使用FaceRecongizer()中的方法“predictSync”。
node-opencv库具有您首先初始化的FaceRecognizer对象。
var FaceRecognizer = new cv.FaceRecognizer();
这是我的代码:
//Cold start training for opencv
var uploadDir = path.join(global.appRoot, "/uploads");
fs.readdir(uploadDir, function(err, files){
if(err) throw new Error(err);
if(files.length > 0){ //There are some user related image folders
files.forEach(function(subfolder, index, array){
if(subfolder != ".DS_Store" ){ //Issue with Mac, test on Linux-VM
//We are now iterating over each subfolder
var subFolderDir = path.join(uploadDir, "/"+subfolder);
var images = fs.readdirSync(subFolderDir);
//console.log(images);
images.forEach(function(image, index, array){//Get Matrix Objekt for each image to train OpenCV
if(image != ".DS_Store"){
var imageDir = path.join(subFolderDir, "/"+image);
cv.readImage(imageDir, function(err, im){
var channels = im.channels();
if(channels >=3){
var labelNumber = parseInt(subfolder); //Create labelnumber; Account-Id starts by 1, labels for openCV start with 0
cvImages.push(new Array(labelNumber,im)); //Add image to Array
}
});
}
});
}
});
if(cvImages.length > 3){
console.log("Training images (we have at least 3 images)", cvImages);
FaceRecognizer.trainSync(cvImages);
}else{
console.log("Not enough images uploaded yet", cvImages);
}
}else{
console.log("There are no images uploaded yet!");
}
});`
我敢肯定,您可以对其进行优化,但是对于一个私有(private)项目来说已经足够了。
训练完系统后,如果您想了解图像上的人:
cv.readImage(fileDir, function(err, im){
if(err) res.send(err);
var whoisit = FaceRecognizer.predictSync(im);
console.log("Identified image", whoisit);
});
在我的案例中,“whoisit”对象包含用户的ID和“confidence”值,这意味着openCV如何“确定”图像上的人。
希望能帮助到你。
关于node.js - 使用opencv和node比较2个面孔的相似度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21647573/