如何可以用 Python 轻松将普通视频变成动漫视频?
今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。
文章目录
- 一、思路流程
- 技术提升
- 二、图像转动漫
- 三、视频帧读取与视频帧写入
效果展示
一、思路流程
- 读取视频帧
- 将每一帧图像转为动漫帧
- 将转换后的动漫帧转为视频
难点在于如何将图像转为动漫效果。这里我们使用基于深度学习的动漫效果转换模型,考虑到许多读者对这块不了解,因此我这边准备好了源码和模型,直接调用即可。
技术提升
本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
方式①、添加微信号:dkl88191,备注:来自CSDN +研究方向
方式②、微信搜索公众号: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
如何可以用 Python 轻松将普通视频变成动漫视频?相关推荐
- Python将普通视频变成动漫视频,这就是知识的力量~
嗨嗨,下午好,我是小圆 之前,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能 ...
- 想要自制动漫视频?Python教你把普通视频变成动漫视频
嗨嗨,下午好朋友们~ 之前毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但我们可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能力 ...
- 一日一技:如何用Python将 普通视频 变成 动漫视频
文章目录 容我废话一下 最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言 ...
- 魔法的尽头是科技——用Python将普通视频变成动漫视频
嗨害大家好鸭!我是小熊猫
- Python案例——将普通视频变成动漫视频
- 《玩转Python轻松过二级》配套视频免费观看地址
本文是汇总地址,有新课程会及时更新,也可以关注微信公众号"Python小屋"观看. 第1章 Python概述 微课|玩转Python轻松过二级(1.1节):Python命令式编程 ...
- 用 Python 轻松将懂车帝视频转换为文本
文 | 派森酱 来源:Python 技术「ID: pythonall」 最近在懂车帝收藏了一些感兴趣的视频,希望能整理出文字稿 观看视频,做笔记时遇到一个问题,需要反复一段一段的去看视频,再手敲整理笔 ...
- 艺术签名python_个性签名设计五十行Python轻松实现
原标题:个性签名设计五十行Python轻松实现 欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.大航海计划.BAT内推.学习资料等. 前言 ...
- 微课|玩转Python轻松过二级(2.1节):常用内置对象
适用教材: 董付国.<玩转Python轻松过二级>.清华大学出版社,2018. 第2章 运算符.表达式与内置对象 2.1 常用内置对象 图书购买链接 京东:https://item.j ...
最新文章
- Linux学习路线指南
- 2014年 12月15日 多线程编程
- 更改Linux用户的登录shell环境
- [蓝桥杯][2017年第八届真题]对局匹配
- 数据结构之基于Java的二叉树实现
- 聊聊rocketmq的FileAppender
- 软件测试之软件测试方法
- 来,同学,坐下,谈谈对Dex文件的认识
- CPU卡FM1208发卡操作流程(不带密钥验证)
- Espresso测试框架
- [Erlang] XML处理方案
- Unity--PicoVR开发--记录
- Win10左下角搜索栏以及资源管理器搜索栏无法使用(点击没有反应)
- Powerbuilder编程过程中的 DataWindow 数据窗口函数
- Android N App分屏模式完全解析(下)
- 百度快照更新的依据和规则
- python自带的编辑器是-python自带的编辑器是
- MD5的介绍,算法和C、VB、Delphi实现
- 今天用手绘板画了一个simple的,见笑老
- iSCSI与FCoE