Python 调用USB摄像头识别人脸进行打卡

python 复制代码
import cv2
import pyttsx3
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import datetime

def draw_circle(event,x,y,flasgs,param):
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(frame,(x,y),50,(255,0,0),-1)

# font=cv2.FONT_ITALIC
def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "simsun.ttc", textSize, encoding="utf-8")
    # 绘制文本
    draw.text(position, text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
# 初始化语音合成引擎
engine = pyttsx3.init()
# 加载人脸识别模型
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
# 设置园的直径
diameter = 360
# 读取视频流
while True:
    # 逐帧捕获
    ret, frame = cap.read()
    # 在帧上画一个白色的圆
    # 获取圆的宽度和高度
    height,width = frame.shape[:2]
    # 计算圆的半径
    radius = int((diameter / 2)*(width / 640))
    # 计算圆的中心位置
    center = (int(width / 2),int(height / 2 ))
    # 绘制圆圈
    cv2.circle(frame,center,radius,(255,255,255),thickness=5)
    # 获取当前时间并将其显示在窗口中
    now = datetime.datetime.now()
    weekdays = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
    weekday = weekdays[now.weekday()]
    # 将画面转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 检测人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

    # 如果检测到人脸
    if len(faces) > 0:
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            # 播放语音提示
            engine.say('打卡成功')
        engine.runAndWait()
        engine.endLoop()
        engine.stop()
    else:
        # 播放语音提示
        engine.say('打卡失败')
        engine.runAndWait()
        # engine.endLoop()
        # engine.stop()
        #
    frame = cv2AddChineseText(frame, now.strftime('%Y-%m-%d %H:%M:%S')+ " "+ weekday,(10,10),(255,255,255),30)
    # 显示画面
    cv2.imshow('frame', frame)

    # 按下'q'键退出循环 = 27
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源
cap.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()

需要的 haarcascade_frontalface_default.xml 文件,下载

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

相关推荐
qq_570398574 小时前
Three.js基础使用-案例
开发语言·javascript·ecmascript
Suxing94 小时前
C语言基础分享:C语言文件操作:从“写日记”到“拍电影”的存盘指南
c语言·开发语言
2601_962099084 小时前
python flask sqlalchemy连接数据库流程介绍
数据库·python·flask·教程·sqlalchemy
右耳朵猫AI4 小时前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
2601_962293244 小时前
python接口自动化(二十八)--html测试 报告——下(详解)
python·接口自动化·编码问题·htmltestrunner·报告优化
烂蜻蜓4 小时前
Flask入门教程(附录):模板渲染API——Jinja2集成全解析
后端·python·flask
2601_962387824 小时前
Python CUDA 编程 - 2 - Numba 简介
python·numpy·cuda·jit编译器·numba
统计学小王子4 小时前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
z落落7 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#
智能体与具身智能13 小时前
TVA具身智能的概念、架构与应用(19)
人工智能·python·具身智能