Bil*_*ill 5 opencv face-recognition node.js
我有openCV和nodejs运行,我的目标是制作一个程序,当它看到它时拍摄一张脸的图片(已经这样做了),然后将该面部与各种面部比较到数据库以查看它是否匹配.我知道谁的脸是谁在数据库中,所以基本上我会知道谁的脸部网站拍了一张照片.我在下面得到了这个代码来拍照并保存...但我不确定如何进行测量或与另一张脸进行比较.我找到了图像比较的例子,但我想我需要进行面部比较.
var snap = function(){
Run Code Online (Sandbox Code Playgroud)
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')
})
Run Code Online (Sandbox Code Playgroud)
}); } snap()
谢谢
我相信你正在使用node-opencv库?您将需要更多步骤.你必须训练你的opencv系统,它允许你使用FaceRecongizer()中的方法"predictSync".
node-opencv库有一个FaceRecognizer对象,您首先要初始化它.
var FaceRecognizer = new cv.FaceRecognizer();
你必须阅读所有图像,创建一个特定的数组并训练你的FaceRecognizer.出于我的目的,我将每个用户保存在数据库中,并且他们获得了一个唯一的ID,我用它来创建一个特定的子文件夹,稍后会使用它.这是我的代码:
//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!");
}
});`
Run Code Online (Sandbox Code Playgroud)我敢肯定,你可以优化它,但对于一个私人项目来说它已经足够了.
培训完系统后,如果您想了解图像上的人:
cv.readImage(fileDir, function(err, im){
if(err) res.send(err);
var whoisit = FaceRecognizer.predictSync(im);
console.log("Identified image", whoisit);
});
Run Code Online (Sandbox Code Playgroud)
在我的例子中,"whoisit"对象包含用户的ID和"置信度"值,意味着openCV对于图像上的人是多么"确定".希望能帮助到你.