虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?
时间:2022-07-25
本文章向大家介绍虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
人脸识别是一门比较成熟的技术。
它的身影随处可见,刷脸支付,信息审核,监控搜索等,除了这些常规操作,还可以对视频里的特定人物进行打码。
知识点:
- OpenCV
- face_recognition
- subprocess
- ffmpeg
开发环境:
- Python 3.6
- Pycharm
face_recognition
face_recognition使用世界上最简单的人脸识别工具,在Python或命令行中识别和操作人脸。
使用dlib最先进的人脸识别技术构建而成,并具有深度学习功能。该模型在Labeled Faces in the Wild基准中的准确率为99.38%。
如何安装
WIN+R 输入CMD,打开指命令提示符
pip install face_recognition
OpenCV
OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库. 无论你是做科学研究,还是商业应用,opencv都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。
如何安装
WIN+R 输入CMD,打开指命令提示符
pip install opencv-python
我们即将要打码的视频
部分代码
导入工具
import cv2
import face_recognition
import matplotlib.pyplot as plt
# %matplotlib inline # 在 jupyter 中使用的时候,去掉注释
import ffmpy3
import subprocess
import os
from PIL import Image
图像处理,自动跟踪打码
def mask_video(input_video, output_video, mask_path='mask.jpg'):
# 打码图片
mask = cv2.imread(mask_path)
# 读取视频
cap = cv2.VideoCapture(input_video)
# 读取视频参数,fps、width、heigth
CV_CAP_PROP_FPS = 5
CV_CAP_PROP_FRAME_WIDTH = 3
CV_CAP_PROP_FRAME_HEIGHT = 4
v_fps = cap.get(CV_CAP_PROP_FPS)
v_width = cap.get(CV_CAP_PROP_FRAME_WIDTH)
v_height = cap.get(CV_CAP_PROP_FRAME_HEIGHT)
# 设置写视频参数,格式为 mp4
size = (int(v_width), int(v_height))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter(output_video, fourcc, v_fps, size)
已知人脸
known_image = face_recognition.load_image_file("tmr.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
读取视频
cap = cv2.VideoCapture(input_video)
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
# 检测人脸
face_locations = face_recognition.face_locations(frame)
# print(face_locations)
# 检测每一个人脸
for (top_right_y, top_right_x, left_bottom_y, left_bottom_x) in face_locations:
unknown_image = frame[top_right_y - 50:left_bottom_y + 50, left_bottom_x - 50:top_right_x + 50]
print(face_recognition.face_encodings(unknown_image))
if face_recognition.face_encodings(unknown_image) != []:
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
# 对比结果
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
# 是仝卓,就将打码贴图。
if results[0] == True:
mask = cv2.resize(mask, (top_right_x - left_bottom_x, left_bottom_y - top_right_y))
frame[top_right_y:left_bottom_y, left_bottom_x:top_right_x] = mask
# 写入视频
out.write(frame)
else:
break
保存视频
if __name__ == '__main__':
# 将音频保存为cut.mp3
video2mp3(file_name='cut.mp4')
# 处理视频,自动打码,输出视频为output.mp4
mask_video(input_video='cut.mp4', output_video='output.mp4')
# 为 output.mp4 处理好的视频添加声音
video_add_mp3(file_name='output.mp4', mp3_file='cut.mp3')
运行代码,结果如下
- HDU 3782 xxx定律
- HDU 2566 统计硬币
- HDU 2561 第二小整数
- python基础-数据类型与变量
- HDU 2520 我是菜鸟,我怕谁
- HUST 1586 数字排列
- next_permutation(全排列算法)
- Hadoop数据分析平台实战——100HBase和MapReduce整合离线数据分析平台实战——100HBase和MapReduce整合
- Hadoop数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)离线数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)
- HUST 1588 辗转数对
- HUST 1584 摆放餐桌
- HUST 1585 排队
- 【QQ/微信个人号变身机器人】炸群+远程监控个人PC的尝试
- HUST 1583 长度单位
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- springmvc实例之修改雇员相关信息(四)
- 基于TypeScript封装Axios笔记(六)
- 蓝桥杯 k好数 java版
- 强烈推介的几个微信小程序开发小技巧,简单又实用
- 【pytorch-ssd目标检测】验证自己创建的数据集
- django-模板之自动转义autoescape(八)
- 【pytorch-ssd目标检测】测试自己创建的数据集
- 【pytorch-ssd目标检测】训练自己创建的数据集
- SwiftUI:更高级的 MKMapView
- spring AOP之重用切点表达式
- springmvc之处理模型数据SessionAttributes注解
- Spring BeanUtils属性copy
- 【pytorch-ssd目标检测】制作类似pascal voc格式的目标检测数据集
- 【pytorch-ssd目标检测】可视化检测结果
- 文件I/O