python简单实现人脸检测/跟随

import cv2

# 加载人脸识别器的模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 打开摄像头
cap = cv2.VideoCapture(0)

# 初始化人脸框位置
prev_faces = []

# 定义绘制带圆角矩形边框的函数
def draw_rounded_rectangle(img, x, y, w, h, radius, color, thickness):
    # 画上面的边框
    cv2.line(img, (x + radius, y), (x + w - radius, y), color, thickness)
    # 画下面的边框
    cv2.line(img, (x + radius, y + h), (x + w - radius, y + h), color, thickness)
    # 画左边的边框
    cv2.line(img, (x, y + radius), (x, y + h - radius), color, thickness)
    # 画右边的边框
    cv2.line(img, (x + w, y + radius), (x + w, y + h - radius), color, thickness)
    # 画左上角的圆弧
    cv2.ellipse(img, (x + radius, y + radius), (radius, radius), 180, 0, 90, color, thickness)
    # 画右上角的圆弧
    cv2.ellipse(img, (x + w - radius, y + radius), (radius, radius), 270, 0, 90, color, thickness)
    # 画右下角的圆弧
    cv2.ellipse(img, (x + w - radius, y + h - radius), (radius, radius), 0, 0, 90, color, thickness)
    # 画左下角的圆弧
    cv2.ellipse(img, (x + radius, y + h - radius), (radius, radius), 90, 0, 90, color, thickness)
# 定义平滑处理人脸位置的函数
def smooth_faces(faces, prev_faces=None, alpha=0):
    if prev_faces is None or len(prev_faces) == 0:
        return faces

    smoothed_faces = []
    for (x, y, w, h) in faces:
        found = False
        for (prev_x, prev_y, prev_w, prev_h) in prev_faces:
            if x - 30 <= prev_x <= x + 30 and y - 30 <= prev_y <= y + 30:
                smoothed_x = int(alpha * x + (1 - alpha) * prev_x)
                smoothed_y = int(alpha * y + (1 - alpha) * prev_y)
                smoothed_w = int(alpha * w + (1 - alpha) * prev_w)
                smoothed_h = int(alpha * h + (1 - alpha) * prev_h)
                smoothed_faces.append((smoothed_x, smoothed_y, smoothed_w, smoothed_h))
                found = True
                break

        if not found:
            smoothed_faces.append((x, y, w, h))

    return smoothed_faces

# 连续未检测到人脸的帧计数器
no_face_count = 0
max_no_face_count = 100  # 连续未检测到人脸的最大帧数

while True:
    # 读取摄像头图像
    ret, frame = cap.read()

    if not ret:
        # 如果无法读取摄像头图像,则退出循环
        break

    # 将图像转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    # 平滑处理人脸位置
    faces = list(faces)
    faces = smooth_faces(faces, prev_faces, alpha=0.3)
    prev_faces = faces.copy()

    # 在图像上绘制带圆角矩形边框
    if len(faces) > 0:
        for (x, y, w, h) in faces:
            # 绘制带圆角矩形边框
            radius = int(min(w, h) / 10)
            draw_rounded_rectangle(frame, x, y, w, h, radius, (18, 153, 255), 2)
            # 在人脸框上方显示文本信息
            text = "Face"
            font = cv2.FONT_HERSHEY_SIMPLEX
            font_scale = 0.8
            thickness = 2
            text_size, _ = cv2.getTextSize(text, font, font_scale, thickness)
            text_x = x + int((w - text_size[0]) / 2)
            text_y = y - 10
            cv2.putText(frame, text, (text_x, text_y), font, font_scale, (18, 153, 255), thickness, cv2.LINE_AA)
    # 显示图像
    cv2.imshow('Face Detection', frame)

    # 按下ESC键退出循环
    if cv2.waitKey(1) == 27:
        break

# 释放摄像头和关闭窗口
cap.release()
cv2.destroyAllWindows()



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pip安装opencv-python不成功

一个比较笨但还算有效的方法&#xff1a;如果你的python版本较低&#xff0c;如现在2023-07-04使用python3.6环境&#xff0c;使用pip默认安装会是最新的4.8.0.7版本&#xff0c;但事实上这个版本不支持py3.6环境&#xff0c;所以你需要去这里查支持py3.6的最近的一个版本是什么…

从 AI 增强到大模型,企业使用数据的方式又将如何变化?

AI&#xff08;Artificial Intelligence&#xff0c;人工智能&#xff09;的发展不过百年&#xff0c;却已经深刻影响着人们的思维和见解&#xff0c;并逐渐关联到每个人生活和工作的方方面面。从最初的规则引擎和引入统计学方法&#xff0c;到基于知识表示和推理机制的专家系统…

VScode中的插件

开启VScode中最简单的内部浏览器 - 可以访问外网 - Browser Preview 插件安装&#xff1a; 插件使用&#xff1a;由下角 - 状态栏 - VS Browser按钮 live sass compiler-vscode插件将scss编译为css live sass compiler是VSCode扩展&#xff0c;可以实时地将SASS / SCSS文件…

POSTGRESQL SQL 执行用 IN 还是 EXISTS 还是 ANY

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到3群&#xff08;共…

【youcans动手学模型】MobileNet 模型-CIFAR10图像分类

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】MobileNet 模型-CIFAR10图像分类 1. MobileNet 卷积神经网络模型1.1 模型简介1.2 论文介绍 2. 在 PyTorch 中定义 MobileNet V1 模型类2.1 深度可分离卷积&#xff08;DSC&…

转换流~~

乱码如何解决&#xff1a; 使用字符输入转换流可以提取文件&#xff08;GBK&#xff09;的原始字节流&#xff0c;原始字节不会存在问题然后把字节流以指定编码转换成字符输入流&#xff0c;这样字符输入流中的字符就不乱码了 1&#xff1a;字符输入转换流 字符转换输入流&a…

uni-App踩坑记录

​ 1、uni自己封装的axios在真机中失效&#xff0c;发不出请求 uniapp中使用axios 需要配置适配器 (添加适配器有点费劲&#xff0c;直接封装uni自带请求也可以) axios-adapter-uniapp传送门 axios.defaults.adapter function(config) { //自己定义个适配器&#xff0c;用来…

2023年生猪行业研究报告

第一章 行业概况 生猪是指猪类动物中未经加工的、原始的、活体的猪&#xff0c;通常是指用于肉类生产的猪。生猪在全球范围内都是主要的肉类来源之一。它们的肉质丰富&#xff0c;营养价值高&#xff0c;同时还能用来制作各种加工肉类产品&#xff0c;如火腿、香肠等。 生猪养…

AR试穿试戴相关SDK或平台

1.火山引擎 链接 咨询过平台收费比较高几十万一年而且还是起步价 2.Geenee 链接 geenee在衣服、裤子、头饰以及鞋子方面可以实现试穿。 3.Wanna 链接 Wanna 试衣、试包、试鞋及手表都可以&#xff0c;我试过鞋子的试穿效果还不错 4.DeepAR …

nginx进行反向代理

Nginx是一个开源的高性能Web服务器和反向代理服务器。它最初是由Igor Sysoev在2004年开发的&#xff0c;现在由一个全球性的社区维护和支持。 Nginx的主要特点包括&#xff1a; 高性能&#xff1a;Nginx使用事件驱动模型&#xff0c;可以处理高并发请求&#xff0c;具有出色的…

信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复)信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网…

常微分方程(ODE)求解方法总结(续)

常微分方程&#xff08;ODE&#xff09;求解方法总结&#xff08;续&#xff09; 1 隐式方法2 多步法2.1 二阶方法2.1.1 非自启动修恩方法2.2 开型和闭型积分公式2.3 高阶多步法 1 隐式方法 常微分方程&#xff08;ODE&#xff09;求解方法总结 里面介绍了我称为“正常思路”的…

C/C++的发展历程和未来趋势

文章目录 C/C的起源C/C的应用C/C开发的工具C/C未来趋势 C/C的起源 C语言 C语言是一种通用的高级编程语言&#xff0c;由美国计算机科学家Dennis Ritchie在20世纪70年代初期开发出来。起初&#xff0c;C语言是作为操作系统UNIX的开发语言而创建的。C语言的设计目标是提供一种功…

Transformer时间序列:PatchTST引领时间序列预测进

Transformer时间序列&#xff1a;PatchTST引领时间序列预测进 引言为什么transformer框架可以应用到时间序列呢统计学模型深度学习模型 PatchTSTPatchTST模型架构原理。通道独立性Patchingpatching的优点Transformer编码器 利用表示学习改进PatchTST使用PatchTST模型进行预测初…

【RabbitMQ】

一、概念 MQ&#xff08;消息队列&#xff09;&#xff1a;是指在消息传送过程中保存消息的容器&#xff0c;用于分布式系统之间的通信 生产者&#xff1a;是发送消息的用户应用程序。 队列&#xff1a;是存储消息的缓冲区。 消费者&#xff1a;是接收消息的用户应用程序。 1…

(嵌入式)STM32G061C8T6、STM32G061C6T6、STM32G061C8U6 64MHz 64KB/32KB 闪存(MCU)

STM32G0 32位微控制器 (MCU) 适合用于消费、工业和家电领域的应用&#xff0c;并可随时用于物联网 (IoT) 解决方案。这些微控制器具有很高的集成度&#xff0c;基于高性能ARM Cortex-M0 32位RISC内核&#xff0c;工作频率高达64MHz。该器件包含内存保护单元 (MPU)、高速嵌入式内…

mysql 视图

视图&#xff0c;是虚拟存在的表&#xff0c;视图中的数据在数据库中实际不存在&#xff0c;视图只保存查询SQL的逻辑&#xff0c;不保存查询结果 建表sql DROP TABLE IF EXISTS w_dict; CREATE TABLE w_dict (id int(0) NOT NULL AUTO_INCREMENT,label varchar(255) CHARACT…

go开源项目slgserver源码分析

个人博客地址: https://cxx001.gitee.io 前言 项目开源地址&#xff1a;https://github.com/llr104/slgserver 比较适合作为go语言入门学习项目或轻量级游戏项目&#xff0c;整体的项目结构和编码质量还是可以的。不过距离商业项目还是差点意思&#xff0c;如服务负载、容灾这…

弗迪科技携手纷享销客共建CRM系统,数智化升级加速“灯塔工厂”征程

当前&#xff0c;全球新一轮科技革命正和产业升级融合发展&#xff0c;数字化技术成为各行各业升级发展的重要推动力。 自2018年起&#xff0c;世界经济论坛与麦肯锡咨询公司发起“灯塔工厂”项目&#xff0c;全球严选制造业数字化转型典范作为“数字化制造”和“全球化4.0”的…

360测试开发技术面试题目

目录 一、java方面 二、Linux方面 三、数据库方面 四、性能测试方面 五、HTTP协议方面 六、其他 总结&#xff1a; 最近面试了360测试开发的职位&#xff0c;将面试题整理出来分享~ 一、java方面 1、java重载和重写的区别 重载overloading 多个方法、相同的名字&#x…