vue实现人脸比对
Vue 实现人脸比对的方法
使用 TensorFlow.js 和 Face-api.js
安装必要的依赖库:
npm install face-api.js tensorflow.js
在 Vue 组件中引入 face-api.js:
import * as faceapi from 'face-api.js';
加载模型并初始化:
async loadModels() {
await faceapi.nets.tinyFaceDetector.loadFromUri('/models');
await faceapi.nets.faceLandmark68Net.loadFromUri('/models');
await faceapi.nets.faceRecognitionNet.loadFromUri('/models');
}
检测和比对两张图片中的人脸:
async compareFaces(image1, image2) {
const img1 = await faceapi.fetchImage(image1);
const img2 = await faceapi.fetchImage(image2);
const detection1 = await faceapi.detectSingleFace(img1).withFaceLandmarks().withFaceDescriptor();
const detection2 = await faceapi.detectSingleFace(img2).withFaceLandmarks().withFaceDescriptor();
if (!detection1 || !detection2) return 0;
const distance = faceapi.euclideanDistance(detection1.descriptor, detection2.descriptor);
const similarity = (1 - distance) * 100;
return similarity.toFixed(2);
}
使用 OpenCV.js
安装 OpenCV.js:

npm install opencv.js
在 Vue 组件中引入 OpenCV.js:
import cv from 'opencv.js';
检测和比对两张图片中的人脸:
compareFaces(image1, image2) {
const src1 = cv.imread(image1);
const src2 = cv.imread(image2);
const gray1 = new cv.Mat();
const gray2 = new cv.Mat();
cv.cvtColor(src1, gray1, cv.COLOR_RGBA2GRAY);
cv.cvtColor(src2, gray2, cv.COLOR_RGBA2GRAY);
const faceCascade = new cv.CascadeClassifier();
faceCascade.load('haarcascade_frontalface_default.xml');
const faces1 = new cv.RectVector();
const faces2 = new cv.RectVector();
faceCascade.detectMultiScale(gray1, faces1);
faceCascade.detectMultiScale(gray2, faces2);
if (faces1.size() === 0 || faces2.size() === 0) return 0;
const face1 = faces1.get(0);
const face2 = faces2.get(0);
const similarity = cv.matchTemplate(gray1, gray2, cv.TM_CCOEFF_NORMED).data[0];
return (similarity * 100).toFixed(2);
}
使用第三方 API(如 Face++)
安装 axios:

npm install axios
调用 Face++ API:
import axios from 'axios';
async compareFaces(image1, image2) {
const formData = new FormData();
formData.append('api_key', 'YOUR_API_KEY');
formData.append('api_secret', 'YOUR_API_SECRET');
formData.append('image_file1', image1);
formData.append('image_file2', image2);
const response = await axios.post('https://api-us.faceplusplus.com/facepp/v3/compare', formData);
return response.data.confidence;
}
注意事项
确保在 public 文件夹中放置 face-api.js 的模型文件,路径为 /models。
对于 OpenCV.js,需要将 haarcascade_frontalface_default.xml 文件放在 public 文件夹中。
使用第三方 API 时,注意保护 API 密钥,避免前端直接暴露敏感信息。






