opencv 人脸识别,并抓拍

# -*- coding: utf-8 -*-
import cv2
import imutils
from crop_img import crop_and_save_image
import datetime
# 加载摄像头
cap = cv2.VideoCapture(0)
# 创建人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 初始化人数计数器
num_people = 0  # 画面中人的数量
init_people = 0  #
all_people = 0   # 整个视频中出现的人的数量
i = datetime.datetime.now()   # 现在的时间
i_pre = i.second-4    # 避免重复检测的参照时间
while True:# 读取摄像头数据ret, frame = cap.read()# 调整图像大小frame = imutils.resize(frame, width=500)# 转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 检测人脸faces = face_cascade.detectMultiScale(gray, 1.3, 3)i = datetime.datetime.now()# 绘制人脸矩形框for (x, y, w, h) in faces:# 当画面中的检测到的人脸有变化时才进行抓拍人脸if init_people != len(faces):# print("second*********:", i.second, i_pre)# 拍判断画面中人脸数变化是否大于2秒,若大于进行新的抓拍,否则则认为为检测抖动不抓拍if abs(i.second - i_pre) % 60 > 2:# print("second:", i.second, i_pre)# 总人数加1all_people += 1# print("faces:", len(faces))# print("hhhhhhhhhhhh")# 进行抓拍人脸cropped_image = crop_and_save_image(frame, int(x*0.9), int(y*0.9), int(w*1.4), int(h*1.4))  # 裁剪人脸else:# 校验画面人数init_people = len(faces)# 绘制人脸检测框cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 当 faces中的人脸序列全部检测完,才进行更新init_people与i_pre# 更新重复检测时间,校验画面人数if len(faces) != 0:i_pre = datetime.datetime.now().second  # 获取当前的时间init_people = len(faces)if len(faces) == 0:# i_pre = datetime.datetime.now().secondinit_people = 0# 更新人数计数器num_people = len(faces)# 在图像上显示人数cv2.putText(frame, "Number of People: {}".format(num_people), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255),2)# 显示图像cv2.imshow('frame', frame)# 按下q键退出if cv2.waitKey(1) & 0xFF == ord('q'):break
print(all_people)
# 释放摄像头并关闭窗口
cap.release()
crop_and_save_image 函数:
import cv2
import os
import datetimedef crop_and_save_image(image, x, y, width, height):""":param image:  图片:param x:      裁剪区域的左上角 x 坐标:param y:      裁剪区域的左上角 y 坐标:param width:  裁剪区域的宽度:param height: 裁剪区域的高度"""# 裁剪图片cropped_image = image[y:y+height, x:x+width]# 显示裁剪的图片cv2.imshow('cropped_image', cropped_image)# 保存文件夹output_folder = '../imag/'save_name = '{}m{}s.jpg'# 创建文件夹,如果不存在,则创建os.makedirs(output_folder, exist_ok=True)i = datetime.datetime.now()  # 获取当前的时间# 拼接保存地址  -- 注意: format中不能存在中文字符,负责无法保存output_path = os.path.join(output_folder, save_name.format(i.minute, i.second))# 将当前检测时间信息打印在保存的图片上cv2.putText(cropped_image, "{}/{}/{} {}:{}:{}".format(i.year, i.month, i.day, i.hour, i.minute, i.second), (20, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 200, 0),2)# 保存当前抓拍到的人脸图片cv2.imwrite(output_path, cropped_image)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,

通过kettle采集数据时,表输入的组件,查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改…

网络协议--广播和多播

12.1 引言 在第1章中我们提到有三种IP地址:单播地址、广播地址和多播地址。本章将更详细地介绍广播和多播。 广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主…

安卓开发实例:方向传感器

调用手机的方向传感器&#xff0c;X轴&#xff0c;Y轴&#xff0c;Z轴的数值 activity_sensor.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.c…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点&#xff1a;快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1&#xff1a;不同类型字段导出Sample2&#xff1a;…

ChatGLM系列七:LangChain+ChatGLM-6B

背景介绍 在开发过程中&#xff0c;我们经常会遇到需要构建基于本地知识库的问答系统的问题。这种系统需要能够根据用户提供的问题&#xff0c;在本地的知识库中查找并返回相关答案。然而&#xff0c;要实现这样的功能并不容易&#xff0c;涉及到语言模型的选择、知识库的管理…

Vsan数据恢复—Vsan存储断电导致虚拟机无法启动的数据恢复案例

Vsan分布式存储故障&检测&#xff1a; 异常断电导致一台vsan存储设备上层虚拟机无法启动。 将故障Vsan存储上的所有磁盘编号后取出&#xff0c;由北亚企安的硬件工程师对vsan存储上的所有硬盘进行物理故障检测&#xff0c;经过检测没有发现硬盘存在物理故障。 vsan存储结构…

问界新M7也扛起“遥遥领先”大旗,华为究竟做对了什么?

循着时间脉络&#xff0c;华为似乎正在实现全方面的“遥遥领先”。 继Mate 60系列手机产品的强势回归之后&#xff0c;华为参与的汽车项目也登上了“热搜榜”。近段时间&#xff0c;问界新M7正处于“卖爆”状态。 据了解&#xff0c;2023年9月12日&#xff0c;华为发布了问界…

公网IP怎么设置?公网ip有哪些优点和缺点?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。其中&#xff0c;公网IP的设置成为了一个备受关注的话题。本文将详细介绍公网IP的设置方法以及公网IP的优点和缺点。 一、公网IP设置方法 1. 路由器设置 在家庭或企业网络中&#xff0c;路由器通常是最重…

vue3实现一个滚动分页加载瀑布流列表

项目框架&#xff1a;vue3JSvite 瀑布流框架&#xff1a;vue-waterfall-next 问了chatGPT&#xff0c;对于vue3有哪些好用的瀑布流插件&#xff0c;回答如下&#xff1a; 对于 Vue 3&#xff0c;有一些瀑布流插件可供选择。以下是几个常用的 Vue 3 瀑布流插件&#xff1a; vue…

day44

什么是前端 前端是所有跟用户直接打交道的都可以称之为是前端 比如&#xff1a;pc页面、手机页面、平板页面、汽车显示屏等等显示出来的都是前端内容 什么是后端&#xff1f; 就是一堆代码&#xff0c;用户不能够直接看到&#xff0c;不直接与用户打交道的都是后端 常见的后端…

【Linux】开发工具

目录 Linux编译器-gcc/g使用执行命令&#xff1a;我们的.o和库是如何链接的? make/Makefile依赖关系、依赖方法 Linux编译器-gcc/g使用 gcc只能编译c语言&#xff0c;g可以编译c语言也可以编译g 背景知识&#xff1a; 预处理&#xff08;进行宏替换)编译&#xff08;生成汇编)…

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态&#xff0c;荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景&#xff0c;将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类&#xff0c;包…

JS清除字符串中的空格

一、replace()方法 replace方法在字符串中搜索值或正则表达式&#xff0c;返回已替换值的新字符串&#xff0c;不会更改原始字符串。 去除字符串内所有的空格&#xff1a;str str.replace(/\s*/g,“”) 去除字符串内两头的空格&#xff1a;str str.replace(/^\s*|\s*$/g,“…

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法

相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息&#xff0c;尤其是采用SSD固态硬盘的MacBook系列&#xff0c;120G的硬盘空间本就捉襟见肘&#xff0c;使用一段时间后&#xff0c;即使自己没有存放很多大文件&#xff0c; Mac的磁盘很快就满了。那么&#xff…

使用python实现http协议的方法

要使用Python编写一个接口&#xff0c;其入参格式为x-www-form-urlencoded&#xff0c;你可以使用requests库。requests库是一个流行的HTTP库&#xff0c;它使得发送HTTP请求变得非常简单。 下面是一个简单的示例&#xff0c;展示如何使用requests库发送一个POST请求&#xff…

【面试经典150 | 链表】两数相加

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;模拟 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到…

全栈经验总结(不间断更新)

1.当后端传回来的值为列表套字典[{"id":1,"num":"1"},{"id":2"num":"3"}]&#xff0c;如果要在vue3里面渲染图片&#xff0c;可以这样操作 <el-form-item label"图片&#xff1a;"><el-uploa…

IDEA运行项目报错:Command line is too long的解决办法

文章目录 1.报错现象2.解决办法验证3.最佳实践4.问题原因5.参考文献1.报错现象 在idea中启动一个spring cloud项目时,编译完成后直接报错,报错内容如下: Error running XXXApplication:Command line is too long. Shorten command line for XXXApplication or also for Sp…