当前位置: 首页 > news >正文

Python可以解码吗,解码打码是如何实现的

前言

咳咳,进来的铁汁都是抱着学习的心态进来看的吧,咱今天不讲解解码,咱来说说python如何来实现打码功能~

这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦

最近重温了一档综艺节目 至于叫什么 这里就不细说了

老是看着看着就会看到一堆马赛克,由于太好奇了就找了一下原因,结果是因为某艺人塌房了…虽然但是 看综艺的时候满影响美观的

那今天就在这分享一下 视频打码功能如何用python来实现

在这里插入图片描述

准备工作

环境咱们还是使用 Python3.8 和 pycharm2021 即可

实现原理

  1. 将视频分为音频和画面
  2. 画面中出现人脸和目标比对,相应人脸进行打码
  3. 处理后的视频添加声音

模块

手动安装一下 cv2 模块 ,pip install opencv-python 安装
安装遇到报错,可以私信我

素材工具

我们需要安装一下 ffmpeg 音视频转码工具

在这里插入图片描述

代码解析

导入模块

import cv2  
import face_recognition  # 人脸识别库  99.7%    cmake  dlib  face_recognition
import subprocess

视频转为音频

def video2mp3(file_name):""":param file_name: 视频文件路径:return:"""outfile_name = file_name.split('.')[0] + '.mp3'cmd = 'ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_nameprint(cmd)subprocess.call(cmd, shell=False)

进行打码

# 源码领取:309488165 ###
def mask_video(input_video, output_video, mask_path='mask.jpg'):""":param input_video: 需打码的视频:param output_video: 打码后的视频:param mask_path: 打码图片:return:"""# 读取图片mask = cv2.imread(mask_path)# 读取视频cap = cv2.VideoCapture(input_video)# 视频  fps  width  heightv_fps = cap.get(5)v_width = cap.get(3)v_height = cap.get(4)

设置写入视频参数 格式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)for (top_right_y, top_right_x, left_bottom_y, left_bottom_x) in face_locations:print((top_right_y, top_right_x, left_bottom_y, left_bottom_x))unknown_image = frame[top_right_y - 50:left_bottom_y + 50, left_bottom_x - 50:top_right_x + 50]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)# [True]# 贴图if results == [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] = maskout.write(frame)else:break

音频添加到画面

def video_add_mp3(file_name, mp3_file):""":param file_name: 视频画面文件:param mp3_file:  视频音频文件:return:"""outfile_name = file_name.split('.')[0] + '-f.mp4'subprocess.call('ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 ' + outfile_name, shell=False)

完整代码

点击文末名片领取即可

在这里插入图片描述

最后

认真看完的宝子就是来学习的,哈哈

刚开始接触python的宝子可以点击文末名片领取学习资料以及基础教程哦

http://www.lryc.cn/news/11742.html

相关文章:

  • Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`
  • 机试_3_数据结构(一)_习题
  • 《Hadoop篇》------HDFS与MapReduce
  • 网络爬虫简介
  • 通过4个月的自动化学习,现在我也拿到了25K的offer
  • 分库分表了解
  • docker中 gitlab 安装、配置和初始化
  • 有哪些好用的C++Json库?
  • Docker 快速上手学习入门教程
  • 深度学习笔记:误差反向传播(1)
  • 锁相环(1)
  • 2023金三银四跳槽必会Java核心知识点笔记整理
  • 二十四节气—雨水,好雨知时节,当春乃发生。
  • 为什么要使用数据库?
  • 【原创】java+swing+mysql图书管理系统设计与实现
  • 图论 —— 强连通分量
  • 计算机网络(二):物理层和链路层,通道复用,MAC地址,CSMA/CD协议,PPP点对点协议
  • 英语基础-定语从句的特殊用法及写作应用
  • [数据结构]---八大经典排序算法详解
  • Go语言设计与实现 -- 反射
  • 利用5G工业网关实现工业数字化的工业互联网解决方案
  • 朋友当上项目测试组长了,我真的羡慕了
  • element-ui实现动态添加表单项并实现事件触发验证验证
  • ThreadLocal 内存泄漏问题
  • 【算法】两道算法题根据提供字母解决解码方法和城市的天际线天际线问题
  • Python-TCP网络编程基础以及客户端程序开发
  • 超低成本DDoS攻击来袭,看WAF如何绝地防护
  • CF1795E Explosions? (单调栈)
  • C++——二叉树排序树
  • 深拷贝浅拷贝的区别?如何实现一个深拷贝?