Python3 OpenCV 人脸识别、录像、抓图

可以使用usb摄像头、rtsp流进行录像、人脸识别操作、人脸抓图

haarcascade_frontalface_default.xml文件下载

所需积分/C币: 0opencv-master-Python文档类资源-CSDN下载

#!/usr/bin/python3
# encoding: utf-8
import datetime
import time
from loguru import logger
import cv2
import os

# haarcascade_frontalface_default.xml文件路径
face_cascade = cv2.CascadeClassifier("D:\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_default.xml")

rtsp = "rtsp://admin:root1234@192.168.1.108:554/cam/realmonitor?channel=1&subtype=0"
video = cv2.VideoCapture(1)  # 调用摄像头,PC电脑中0为内置摄像头,1为外接摄像头
judge = video.isOpened()  # 判断video是否打开
# 获取摄像头分辨率
size = (int(video.get(3)), int(video.get(4)))
if int(video.get(3)) == 0 and int(video.get(4)) == 0:
    logger.error("未找到摄像头")
    exit()
fps = video.get(5)  # 获取摄像头帧率
logger.info("摄像头分辨率: " + str(size) + "  帧率:" + str(fps))
# 保存视频
code = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')  # 编码格式

# 全局变量
global out


# fps = 10  # 保存视频的帧率
def videos():
    # 保存视频的路径和名字
    filename = open(str(time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(int(time.time())))) + '.avi',
                    'w')
    filename.close()
    filename =  str(time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(int(time.time())))) + '.avi'
    logger.info("文件创建时间: " + filename)
    out = cv2.VideoWriter(filename, code, fps, size, isColor=True)  # 保存视频的视频流
    if not (out.isOpened()):  # 判断视频流是否创建成功
        print('out is not opened')
    return out, filename


# 画面添加时间戳
def show_time(frame):
    font = cv2.FONT_HERSHEY_PLAIN
    datet = str(datetime.datetime.now())
    frame = cv2.putText(frame, datet, (30, 30), font, 1, (235, 230, 210), 1, cv2.LINE_AA)
    return frame


# face检测
def face(frame):
    # 图像灰度处理
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 设定人脸识别参数
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3)
    facenum = len(faces)
    if facenum > 0:
        for faceRect in faces:
            x, y, w, h = faceRect
            # -------- 在人脸周围绘制矩形
            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
        logger.info("人脸数量:" + str(facenum))
        # 截图
        cv2.imwrite(str(time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(int(time.time())))) + ".png", frame)


def main():
    # 不需要录像注释掉
    v = videos()
    while judge:
        ret, frame = video.read()
        show_time(frame)
        face(frame)

        # qt预览展示---------linux需要注释---------按q退出
        cv2.imshow('Output', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            exit()

        # 不需要录像注释掉
        v[0].write(frame)  # 将图像写入视频流,生成视频
        # 录像文件大于50切掉
        if os.path.getsize(v[1]) / float(1024 * 1024) >= 50:
            break


main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值