开启人脸识别功能后,考生在进入考试页面后会显示一个摄像头,通过摄像头会定时对屏幕前拍照取样,然后通过Ajax传入后端进行保存,保存后会调用人脸识别的代码进行人脸识别,识别完成之后会生成一个人脸识别的日志,以供老师后续对学生考试是否作弊提供依据。
流程图
后端相关代码
@csrf_exempt
def get_user_img(request):
img_value = request.POST["n1"]
media_name = "media/"
# 获取当前试卷id
# print(request.POST["n2"])
exam_object = Exam.objects.filter(id=request.POST["n2"]).first()
print("图片来啦!")
ima_name = "user_recognition_img/user_" + str(request.session["info"]["id"]) + "_" + datetime.now().strftime(
"%m%d%H%M%S") + ".jpg"
print(ima_name)
img = base64.b64decode(img_value)
fh = open(media_name + ima_name, "wb")
fh.write(img)
fh.close()
# 获取原来的图片
user_current = UserInfo.objects.filter(id=request.session["info"]["id"]).first()
user_img = user_current.image.address
img_root = "E:/Anti_cheating_examination_system/"
user_img_initial = img_root + "media/" + str(user_img)
address_image_1 = user_img_initial
address_image_2 = img_root + str(media_name + ima_name)
result = get_face_recognition_result(address_image_1, address_image_2)
print("结果是", result)
# 添加比对记录
PictureRecognition.objects.create(address=ima_name, name=request.session["info"]["name"],
name_id=request.session["info"]["id"],
exam_info_id=exam_object,
recognition_results=result)
return HttpResponse("已获取图片!")