如何用Python将普通视频变成动漫视频
文章目录
- 容我废话一下
- 一、思路流程
- 二、图像转动漫
- 三、视频帧读取与视频帧写入
容我废话一下
最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。
效果展示
一、思路流程
- 读取视频帧
- 将每一帧图像转为动漫帧
- 将转换后的动漫帧转为视频
难点在于如何将图像转为动漫效果。这里我们使用基于深度学习的动漫效果转换模型,考虑到许多读者对这块不了解,因此我这边准备好了源码和模型,直接调用即可。不想看文章细节的可以直接拖到文章末尾,获取源码。
二、图像转动漫
为了让大家不关心深度学习模型,已经为大家准备好了转换后的onnx类型模型。接下来按顺序介绍运行onnx模型流程。
安装onnxruntime库
pip install onnxruntime
如果想要用GPU加速,可以安装GPU版本的onnxruntime:
pip install onnxruntime-gpu
需要注意的是:
onnxruntime-gpu的版本跟CUDA有关联,具体对应关系如下:
当然,如果用CPU运行,那就不需要考虑那么多了。考虑到通用性,本文全部以CPU版本onnxruntime。
运行模型
先导入onnxruntime库,创建InferenceSession对象,调用run函数。
如下所示
import onnxruntime as rt
sess = rt.InferenceSession(MODEL_PATH)
inp_name = sess.get_inputs()[0].name
out = sess.run(None, {inp_name: inp_image})
具体到我们这里的动漫效果,实现细节如下:
import cv2
import numpy as np
import onnxruntime as rt # MODEL = "models/anime_1.onnx"
MODEL = "models/anime_2.onnx"sess = rt.InferenceSession(MODEL)
inp_name = sess.get_inputs()[0].namedef infer(rgb):rgb = np.expand_dims(rgb, 0)rgb = rgb * 2.0 / 255.0 - 1 rgb = rgb.astype(np.float32) out = sess.run(None, {inp_name: rgb})out = out[0][0]out = (out+1)/2*255out = np.clip(out, 0, 255).astype(np.uint8)return outdef preprocess(rgb):pad_w = 0pad_h = 0h,w,__ = rgb.shapeN = 2**3if h%N!=0:pad_h=(h//N+1)*N-hif w%2!=0:pad_w=(w//N+1)*N-w# print(pad_w, pad_h, w, h)rgb = np.pad(rgb, ((0,pad_h),(0, pad_w),(0,0)), "reflect")return rgb, pad_w, pad_h
其中, preprocess函数确保输入图像的宽高是8的整数倍。这里主要是因为考虑到深度学习模型有下采样,确保每次下采样能被2整除。
单帧效果展示
三、视频帧读取与视频帧写入
这里使用Opencv库,提取视频中每一帧并调用回调函数将视频帧回传。在将图片转视频过程中,通过定义VideoWriter类型变量WRITE确保唯一性。具体实现代码如下:
import cv2
from tqdm import tqdmWRITER = None
def write_frame(frame, out_path, fps=30):global WRITERif WRITER is None:size = frame.shape[0:2][::-1]WRITER = cv2.VideoWriter(out_path,cv2.VideoWriter_fourcc(*'mp4v'), # 编码器fps,size)WRITER.write(frame)def extract_frames(video_path, callback):video = cv2.VideoCapture(video_path)num_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))for _ in tqdm(range(num_frames)):_, frame = video.read()if frame is not None:callback(frame)else:break
完整源码获取点击下方微信名片获取哟~
给大家推荐一套爬虫教程,涵盖常见大部分案例,非常实用!
代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习丨学以致用丨下一个Python大神就是你!
如何用Python将普通视频变成动漫视频相关推荐
- 一日一技:如何用Python将 普通视频 变成 动漫视频
文章目录 容我废话一下 最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言 ...
- Python将普通视频变成动漫视频,这就是知识的力量~
嗨嗨,下午好,我是小圆 之前,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能 ...
- 想要自制动漫视频?Python教你把普通视频变成动漫视频
嗨嗨,下午好朋友们~ 之前毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但我们可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能力 ...
- 如何可以用 Python 轻松将普通视频变成动漫视频?
今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果. 文章目录 一.思路流程 技术提升 二.图像转动漫 三.视频帧读取与视频帧写入 效果展示 一.思路流程 读取视频帧 将每一 ...
- 如何设置计划任务程序 每6小时运行一次_如何用 Python 打造一个全自动赚钱的 YouTube 视频发布系统并月入过万(被动收益)
前言 这篇文章将告诉你如何通过Python打造一台全自动发布YouTube视频并专区美元收益的系统. 目前我自己用的这套系统已基本稳定运行了三个月.其中一个YouTube频道从零起步到达到最低开通获利 ...
- python教程 网易公开课_如何用Python抓取网易公开课的视频?
怎么办?下载APP吗?作为一个技术人员这点问题我怎么会屈服呢,正好这两天跟大家说Python,那么今天就用Python搞一下吧. 需要下载视频的网页地址: http://v.163.com/speci ...
- 魔法的尽头是科技——用Python将普通视频变成动漫视频
嗨害大家好鸭!我是小熊猫
- Python案例——将普通视频变成动漫视频
- python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...
鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频? 前言 半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的 ...
- Python爬虫:ZzzFun动漫视频网
提醒:转载请标明作者和原文链接!!! CSDN个人主页: 高智商白痴 原文地址: https://blog.csdn.net/qq_44700693/article/details/109924262 ...
最新文章
- 计算机等级必须在学校考吗,计算机等级考试可以跳过一级考二级吗
- 大容量类 Redis 存储的场景补充-pika
- python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)
- android发送短信指定收件人,android-发送短信给收件人
- Dilated/Atrous conv 空洞卷积/多孔卷积
- HDFS的API操作-获取FileSystem方式
- constructor of OfflineInterface.js
- azure api 管理_具有Azure功能的无服务器API
- springboot——概述
- 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
- Spring MVC+MyBatis中Spring没有接管Mybatis的事务
- matlab虚拟现实之工具介绍(修改)
- docker容器跨宿主机通信
- mac 安装mysql5.7_mac 安装 mysql 5.7
- git代码管理可视化工具 :Sourcetree(mac环境)
- 简单控制台项目:电影购票系统
- 最新版O泡易支付系统平台 PHP源码 第三方第四方免签支付平台系统 全开源可二开
- 数据库分页LIMIT
- 飞鸽原创博客,真正的飞鸽官方博客
- 深入理解RunLoop