视频人脸识别马赛克处理
文章目录
- 前言
- 一、实现思路?
- 二、Coding
- 三、实现效果
前言
前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。
偶尔我们也会有需求在视频中将人脸马赛克化,opencv也提供了相应的方法来实现这个功能。
一、实现思路?
视频究其本质是图像按照一定的帧率去播放。如果需要将视频中的人脸马赛克化,那么我们可以逐帧输出图像后进行识别人脸再对其马赛克化,最终将所有的图像再按一定的帧率组合播放。
二、Coding
#识别视频人脸并增加马赛克
#实现原理:cv2读取视频后逐帧识别人脸并增加马赛克/贴图,处理完毕后保存视频import cv2
# laod opencv schema
classifier = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")#实践下来貌似这个schema匹配度最高
blockimg = "block.jpg"#贴图路径#马赛克化
def do_mosaic(frame, x, y, w, h, neighbor=20):fh, fw = frame.shape[0], frame.shape[1]if (y + h > fh) or (x + w > fw):returnfor i in range(0, h - neighbor, neighbor): # 关键点0 减去neightbour 防止溢出for j in range(0, w - neighbor, neighbor):rect = [j + x, i + y, neighbor, neighbor]color = frame[i + y][j + x].tolist() # 关键点1 tolistleft_up = (rect[0], rect[1])right_down = (rect[0] + neighbor - 1, rect[1] + neighbor - 1) # 关键点2 减去一个像素cv2.rectangle(frame, left_up, right_down, color, -1)#贴图处理
def do_blockpic(frame, x, y, w, h):resizeimg = cv2.imread(blockimg)resizeimg_f = cv2.resize(resizeimg,(w,h))frame[y:y+h, x:x+w] = resizeimg_f#识别人脸
def do_identifyFace(frame):color = (0, 255, 0)gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # convert to grey# begin to identify facefaceRects = classifier.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3, minSize=(32, 32))if len(faceRects): # get faces if above zerofor faceRect in faceRects: # loop each facex, y, w, h = faceRect#do_blockpic(frame, x, y, w, h)do_mosaic(frame, x, y, w, h)#main starts
srcVideo = "srcVideo.mp4"#源视频
savedVideo = "savedVideo.mp4"#处理后的视频
cap = cv2.VideoCapture(srcVideo)if not cap.isOpened():print("error to open source video")exit()print("got source video")
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
fcount = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print("total frames %s"%fcount)#获取所有帧数
writer = cv2.VideoWriter(savedVideo, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), int(fps), (int(w), int(h)))print("start handle source video")
i = 0
while cap.isOpened():success, frame = cap.read()while success:do_identifyFace(frame)print("finish frame %s"%i)writer.write(frame)#cv2.imwrite("frame%s.jpg"%i, frame)i += 1success, frame = cap.read()if (cv2.waitKey(20) & 0xff) == ord('q'):breakcap.release()print("finish handle source video")
writer.release()
cv2.destroyAllWindows()
三、实现效果
处理后的视频效果
相关文章:
视频人脸识别马赛克处理
文章目录 前言一、实现思路?二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化,opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…...
2023-12-27 Python PC获取鼠标位置,移动鼠标到相应的位置 定时自动模拟鼠标点击,用于简单测试app用
一、核心源码如下: import pyautogui import timepyautogui.moveTo(600, 800) for i in range(20):time.sleep(0.1)x, y pyautogui.position()print("mouse position:", x, y)pyautogui.click()二、定时自动模拟鼠标点击,模拟键盘按键 impo…...
如何解决服务器CA证书过期的问题
一、问题的提出 最近在学习VPS,在Linux系统里给服务器安装某项服务时,在服务的log里看到下面的错误信息: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2023-12-25T04:42:38-05:00 is a…...
计算机基础面试题总结
47、OSI、TCP/IP、五层协议的体系结构以及各层协议 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。 五层协议&…...
【算法练习】leetcode链表算法题合集
链表总结 增加表头元素倒数节点,使用快慢指针环形链表(快慢指针)合并有序链表,归并排序LRU缓存 算法题 删除链表元素 删除链表中的节点 LeetCode237. 删除链表中的节点 复制后一个节点的值,删除后面的节点&#x…...
2023.12.28每日一题
LeetCode每日一题 2735.收集巧克力 2735. 收集巧克力 - 力扣(LeetCode) 介绍 看题目看不懂,在评论区看到一个大哥解释,瞬间明白了。 一张桌子上有n件商品围成一圈,每件都有一个价签,它们构成数组nums。…...
231227-9步在RHEL8.8配置本地yum源仓库
Seciton 1:参考视频 RHEL8配置本地yum源仓库-安徽迪浮_哔哩哔哩_bilibili Seciton 2:具体操作 🎯 第1步:查看光驱文件/dev/sr0是否已经挂载?此处已挂在 [lgklocalhost ~]$ df -h 🎯 第1步:查看…...
5. 创建型模式 - 单例模式
亦称: 单件模式、Singleton 意图 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一…...
机器学习之人工神经网络(Artificial Neural Networks,ANN)
人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…...
GetLastError()详细介绍
GetLastError() 是 Windows 操作系统提供的一个函数,用于获取调用线程最近一次发生的错误码。这个函数的定义如下: DWORD GetLastError(void); 调用 GetLastError() 函数可以帮助开发人员在发生错误时获取错误的详细信息,从而进行适当的错…...
【unity3D-粒子系统】粒子系统主模块-Particle System篇
💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍:粒子系统的主模块,是必需的模块&#x…...
Windows搭建FTP服务器教学以及计算机端口介绍
目录 一. FTP服务器介绍 FTP服务器是什么意思? 二.Windows Service 2012 搭建FTP服务器 1.开启防火墙 2.创建组 编辑3.创建用户 4.用户绑定组 5.安装ftp服务器 编辑6.配置ftp服务器 7.配置ftp文件夹的权限 8.连接测试 三.计算机端口介绍 什么是网络…...
安防视频监控系统EasyCVR实现H.265视频在3秒内起播的注意事项
可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,同时…...
CNN实现对手写字体的迭代
导入库 import torchvision import torch from torchvision.transforms import ToTensor from torch import nn import matplotlib.pyplot as plt 导入手写字体数据 train_dstorchvision.datasets.MNIST(data/,trainTrue,transformToTensor(),downloadTrue) test_dstorchvis…...
docker学习笔记01-安装docker
1.Docker的概述 用Go语言实现的开源应用项目(container);克服操作系统的笨重;快速部署;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统;Docker通过隔离机制,每个容器间是互相隔离…...
【《设计模式之美》】如何取舍继承与组合
文章目录 什么情况下不推荐使用继承?组合相比继承有哪些优势?使用组合、继承的时机 本文主要想了解: 为什么组合优于继承,多用组合少用继承。如何使用组合来替代继承哪些情况适用继承、组合。有哪些设计模式使用到了继承、组合。 …...
一步到位:用Python实现PC屏幕截图并自动发送邮件,实现屏幕监控
在当前的数字化世界中,自动化已经成为我们日常生活和工作中的关键部分。它不仅提高了效率,还节省了大量的时间和精力。在这篇文章中,我们将探讨如何使用Python来实现一个特定的自动化任务 - PC屏幕截图自动发送到指定的邮箱。 这个任务可能看…...
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
为什么要使用MQ? 在Spring Boot Event这篇文章中已经通过Guava或者SpringBoot自身的Listener实现了事件驱动,已经做到了对业务的解耦。为什么还要用到MQ来进行业务解耦呢? 首先无论是通过Guava还是Spring Boot自身提供的监听注解来实现的事…...
oracle ORA-01704: string literal too long ORACLE数据库clob类型
当oracle数据表中有clob类型字段时候,insert或update的sql语句中,超过长度就会报错 ORA-01704: string literal too long update xxx set xxx <div><h1>123</h1></div> where id 100;可以修改为 DECLAREstr varchar2(10000…...
微星主板强刷BIOS(以微星X370gaming plus 为例)
(前两天手欠,用U盘通过微星的M-flash升级BIOS 升级过程中老没动静就强制关机了 然后电脑就打不开了) 几种强刷主板BIOS的方式 在网上看到有三种强刷BIOS的方式分别是: 使用夹子编程器 (听说不太好夹)使用微星转接线编程器(只能用于微星主板࿰…...
24小时运行不中断:OpenClaw+GLM-4.7-Flash构建个人资讯聚合器
24小时运行不中断:OpenClawGLM-4.7-Flash构建个人资讯聚合器 1. 为什么需要个人资讯聚合器 每天早上打开手机,总会被各种新闻推送淹没。财经、科技、行业动态...信息过载已经成为现代人的通病。作为一个技术从业者,我发现自己花费在筛选有效…...
语音转文字工具推荐:FireRedASR Pro实测,识别准确率超高
语音转文字工具推荐:FireRedASR Pro实测,识别准确率超高 1. 为什么我们需要专业的语音转文字工具? 在日常工作和学习中,语音转文字的需求无处不在。从会议记录到采访整理,从课程笔记到灵感记录,手动转录不…...
工业数据采集避坑指南:Java+Utgard实现OPC DA高可靠通信的3个关键技巧
工业数据采集避坑指南:JavaUtgard实现OPC DA高可靠通信的3个关键技巧 在工业自动化领域,OPC DA(OLE for Process Control Data Access)协议作为连接工业设备和信息系统的桥梁,其稳定性直接关系到生产数据的完整性和实时…...
GetQzonehistory:你的QQ空间回忆一键备份终极指南
GetQzonehistory:你的QQ空间回忆一键备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春岁月的QQ空间说说不小心丢失?从青涩的…...
OpenClaw性能优化:降低Qwen3-VL:30B多模态任务的Token消耗
OpenClaw性能优化:降低Qwen3-VL:30B多模态任务的Token消耗 1. 问题背景:多模态任务的高Token消耗困境 上周我在飞书群里测试OpenClaw对接Qwen3-VL:30B模型时,遇到了一个典型问题:当同事上传一张产品设计图要求分析时,…...
MediaPipe人体骨骼检测:零配置Web应用,上传图片秒出骨架图
MediaPipe人体骨骼检测:零配置Web应用,上传图片秒出骨架图 1. 引言:一键式骨骼检测的便捷体验 想象一下这样的场景:健身教练需要快速分析学员的动作姿势,医生希望直观展示患者的骨骼姿态,或者动画师需要参…...
cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色
cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色 1. 引言:让历史重现色彩的魅力 黑白照片承载着珍贵的记忆,但缺乏色彩总让人感觉少了些什么。想象一下,如果能将祖辈的老照片恢复成彩色,看到他们当年…...
MWGA 双线编译技术方案:一份代码,双端生成
核心技术原理MWGA 的双线编译基于模块化架构与跨平台编译引擎,实现「一份代码,双向生成」。代码分层: 将代码划分为核心业务逻辑层与端侧 UI 适配层。核心层包含数据模型、算法、权限校验等通用功能,纯 C# 编写且不依赖端侧 API&a…...
AI原生应用开发:边缘设备上的实时目标检测实现
AI原生应用开发:边缘设备上的实时目标检测实现关键词:AI原生应用开发、边缘设备、实时目标检测、计算机视觉、深度学习摘要:本文聚焦于AI原生应用开发中在边缘设备上实现实时目标检测这一重要课题。详细介绍了边缘设备实时目标检测的核心概念…...
AI显微镜-Swin2SR惊艳效果展示:电子包浆表情包高清还原作品集
AI显微镜-Swin2SR惊艳效果展示:电子包浆表情包高清还原作品集 你有没有遇到过这种情况?在网上看到一个特别有趣的表情包,但图片糊得连五官都看不清,上面还叠加了无数层水印和压缩痕迹,俗称“电子包浆”。想保存下来当…...
