考试系统基本功能已经实现,还需要增加人脸识别登陆的功能,从chatgpt加了些代码进去,点击人脸识别没有反应
我增加了如下代码:
1.login.html
登录界面增加人脸识别按钮并引用js
<button type="button" id="face-recognition-button" class="btn btn-face float-right">人脸登录</button>
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>
<script src="{% static 'js/face_recognition.js' %}"></script>
<script async src="../../static/login/haarcascade_frontalface_default.xml"></script>
2.face_recognition.js
js文件的代码
// face_recognition.js
const knownFaces = ['1001.jpg', '1002.jpg', '1003.jpg'];
let faceIndex = 0;
const recognitionButton = document.getElementById('face-recognition-button');
const faceCascade = new cv2.CascadeClassifier('static/login/haarcascade_frontalface_default.xml');
let cap, stream, context, isRecognizing;
recognitionButton.addEventListener('click', async () => {
if (isRecognizing) return;
isRecognizing = true;
await startCamera();
setInterval(async () => {
try {
const result = await recognizeFace();
if (result !== null) {
console.log(result);
// 自动填入学号并提交表单
document.getElementsByName('username')[0].value = result;
document.getElementsByName('password')[0].value = '1000'; // 注意:此处需要指定一个默认密码
document.querySelector('form').submit();
}
} catch (error) {
console.error(error);
}
}, 1000);
});
async function startCamera() {
const videoFeed = document.createElement('video');
videoFeed.setAttribute('autoplay', '');
videoFeed.setAttribute('muted', '');
videoFeed.setAttribute('playsinline', '');
document.body.appendChild(videoFeed);
try {
stream = await navigator.mediaDevices.getUserMedia({ video: true });
videoFeed.srcObject = stream;
context = canvas.getContext('2d');
cap = new cv2.VideoCapture(videoFeed);
} catch (error) {
console.error(error);
}
}
async function recognizeFace() {
return new Promise((resolve, reject) => {
const frame = new cv2.Mat();
cap.read(frame);
cv2.cvtColor(frame, frame, cv2.COLOR_RGBA2GRAY);
const faces = new cv2.RectVector();
faceCascade.detectMultiScale(frame, faces);
if (faces.size() > 0) {
const roi = new cv2.Mat(frame, faces.get(0));
const resized = new cv2.Mat();
cv2.resize(roi, resized, new cv2.Size(100, 100), 0, 0, cv2.INTER_LINEAR);
// 根据已知人脸图片文件名来判断是否为合法用户
const result = knownFaces.indexOf(`${faceIndex}.jpg`) >= 0 ? faceIndex : null;
faceIndex++;
resolve(result);
} else {
resolve(null);
}
});
}
3.网页显示找不到js文件
仅仅增加了这两部分,在点击人脸登录时没有反应,问题出在哪里呢
不知道你这个问题是否已经解决, 如果还没有解决的话: