<CV>Padding Resize

说明

  • 利用padding像素0的方式,在原始图像窄边进行填充,以此保证图片的原始比例

CODE

	def __init__(self, imageSize: int = 512, device: str = "cpu"): ...
	
	def __resize(self, image: np.ndarray, interpolation: int = cv2.INTER_AREA) -> Union[np.ndarray, bool]:
        """
        对输入图像数据进行resize
        @param image: 需要resize的图像数据
        @param interpolation: 插值方式,cv2.INTER_AREA, cv2.INTER_CUBIC, cv2.INTER_LINEAR
        @return: resize之后需要返回的数据
        """
        height, width = image.shape[:2]

        if width > height:
            height = int(height * self
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于VSCode的人脸识别考勤系统的代码需要分为两部分:前端和后端。前端主要以HTML、CSS和JavaScript为主,后端主要以Python为主。 前端代码: ```html <!DOCTYPE html> <html> <head> <title>人脸考勤系统</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/layui/2.5.6/layui.js"></script> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/layui/2.5.6/css/layui.css"> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h2>人脸考勤系统</h2> <div class="row"> <div class="col-md-6"> <div class="card"> <div class="card-header">考勤签到</div> <div class="card-body"> <form> <div class="form-group"> <label for="username">用户名:</label> <input type="text" class="form-control" id="username" placeholder="请输入用户名"> </div> <div class="form-group"> <label for="password">密码:</label> <input type="password" class="form-control" id="password" placeholder="请输入密码"> </div> <div class="form-group"> <button type="button" class="btn btn-primary" onclick="signIn()">签到</button> </div> </form> </div> </div> </div> <div class="col-md-6"> <div class="card"> <div class="card-header">考勤记录</div> <div class="card-body"> <table class="table table-striped"> <thead> <tr> <th>用户名</th> <th>签到时间</th> </tr> </thead> <tbody id="attendance-list"> </tbody> </table> </div> </div> </div> </div> </div> <script src="main.js"></script> </body> </html> ``` ```css body { background-color: #f2f2f2; } .container { margin-top: 50px; } .card-header { font-weight: bold; font-size: 20px; } .card-body { padding: 20px; } .form-group { margin-bottom: 20px; } .table { margin-top: 20px; } .table th, .table td { text-align: center; } .table th { font-weight: bold; font-size: 16px; } ``` 后端代码: ```python import cv2 import os import numpy as np import datetime import face_recognition import base64 from flask import Flask, jsonify, request app = Flask(__name__) # 加载已知人脸编码 known_face_encodings = [] known_face_names = [] for file in os.listdir("known_faces"): if file.endswith(".jpg"): image = face_recognition.load_image_file("known_faces/" + file) encoding = face_recognition.face_encodings(image)[0] known_face_encodings.append(encoding) known_face_names.append(os.path.splitext(file)[0]) attendance_records = [] @app.route("/") def home(): return "Welcome to Face Recognition Attendance System!" @app.route("/api/signIn", methods=["POST"]) def signIn(): # 提取请求中的用户名和密码 username = request.form.get("username") password = request.form.get("password") # 验证用户名和密码 if username != "admin" or password != "123456": return jsonify({"status": "fail", "message": "用户名或密码错误"}) # 打开摄像头 camera = cv2.VideoCapture(0) # 循环读取视频流 while True: ret, frame = camera.read() if not ret: break # 将图片大小缩小为原来的1/4,加快识别速度 small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # 将图片从BGR格式转换为RGB格式 rgb_small_frame = small_frame[:, :, ::-1] # 在图片中识别人脸 face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) # 遍历所有检测到的人脸 for face_encoding in face_encodings: # 判断是否为已知人脸 matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # 绘制人脸识别框 top, right, bottom, left = face_locations[0] top *= 4 right *= 4 bottom *= 4 left *= 4 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # 绘制人脸名称 cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1) # 记录考勤记录 now = datetime.datetime.now() attendance_records.append({"name": name, "time": now.strftime("%Y-%m-%d %H:%M:%S")}) # 保存考勤记录到文件 with open("attendance_records.txt", "a") as f: f.write("{}\t{}\n".format(name, now.strftime("%Y-%m-%d %H:%M:%S"))) # 将考勤记录转换为Base64编码,以便前端显示 attendance_list = [] for record in attendance_records: attendance_list.append({"name": record["name"], "time": record["time"]}) attendance_list_str = str(attendance_list) attendance_list_bytes = attendance_list_str.encode("utf-8") attendance_list_base64 = base64.b64encode(attendance_list_bytes).decode("utf-8") # 返回考勤记录给前端 return jsonify({"status": "success", "attendance_list": attendance_list_base64}) # 显示视频流 cv2.imshow("Video", frame) # 按下q键退出循环 if cv2.waitKey(1) & 0xFF == ord("q"): break # 释放摄像头并关闭窗口 camera.release() cv2.destroyAllWindows() return jsonify({"status": "fail", "message": "未检测到人脸"}) if __name__ == "__main__": app.run(debug=True) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值