想要自制动漫视频?Python教你把普通视频变成动漫视频
嗨嗨,下午好朋友们~
之前毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但我们可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。
效果展示
怎么样, 还是ok的吧,那接下来一起来学习一下吧 ~
一、思路流程
- 读取视频帧
- 将每一帧图像转为动漫帧
- 将转换后的动漫帧转为视频
难点在于如何将图像转为动漫效果。这里我们使用基于深度学习的动漫效果转换模型,考虑到许多读者对这块不了解,因此我这边准备好了源码和模型,直接调用即可。
不想看文章细节的可以直接来着里 https://jq.qq.com/?_wv=1027&k=D6zXd965 获取源码。
二、图像转动漫
为了让大家不关心深度学习模型,已经为大家准备好了转换后的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
ok分享到这里就结束了,赶紧去试试吧
对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/
想要自制动漫视频?Python教你把普通视频变成动漫视频相关推荐
- python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...
鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频? 前言 半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的 ...
- 资深程序员教你,用python入门的知识抓取抖音短视频,太厉害了
抖音短视频可以说是当下最流行的自媒体平台,而python编程同样也是目前最流行的编程语言. 今天,就让一位大厂的资深程序员,用最简单的方式,使用python抓取抖音短视频. 到时候我会把所有的源代码都 ...
- python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- m3u8解析_Python多进程教你下载M3U8加密或非加密视频!
m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成. 相信大家都看过m3u8格式文件的内容,我们直来对比一下有什么不 ...
- 教你如何简便下载网站上的视频
教你如何简便下载网站上的视频 利用you-get可以下载的国外网站: 利用you-get可以下载的国内网站: 接下来就具体介绍如何下载: 一.下载视频 1.安装you-get 如果之前没装过you-g ...
- python爬虫教程-Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门!
原标题:Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门! Python简直就是万能的,你用Python都做过哪些事? 用网页看各大网站的VIP视频,用python下载? 用Pytho ...
- Python将普通视频变成动漫视频,这就是知识的力量~
嗨嗨,下午好,我是小圆 之前,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能 ...
- 微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~
微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~ 千古文章一大抄,在微信公众号的运营当中,免不了会复制别人的内容,不过很多时候遇到有视频的图文内容时,我总希望能找到视频原地址,然 ...
- python将视频像素抓取替换导出mosaic效果的文本视频
python将视频像素抓取替换导出mosaic效果的文本视频 第一次写博客,关于python的. 全网关于这种视频的的合成代码几乎没有,所以我提供了一套这样的思路. 完成过程很痛苦.因为全网类似的太少 ...
最新文章
- 体验Office 2013预览版
- ASP.NET 获取客户端IP (无视代理)
- J.U.C系列(五)BlockingQueue的使用
- SpringBoot+Vue整合WebSocket实现前后端消息推送
- thymeleaf体验
- 安装mysql8.0.20,报错“找不到VCRUNTIME140_1.dll”
- Linux 压缩和解压命令
- JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)
- 9008线刷_小米红米手机新机9008模式怎么进入?小米线刷救砖模式
- 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
- try-catch lasterr
- HTML表格实现固定表头 内容滚动
- Android 视频缩放/放大
- 滑窗口统计基因组GC含量的分布
- 把PC上的蓝牙适配器模拟成蓝牙GPS(转贴)
- 用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小 (2).ppt...
- OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)
- 大数据学习环境搭建系列(二)虚拟机软件Vmware的安装
- 在阿里当外包,是一种什么工作体验?
- erdas空间建模_ERDAS批处理的一个简单的空间模型建立
热门文章
- c语言2字节16进制转10进制,C语言中十六进制转十进制两种实现方法
- 面向5G C-RAN组网的机房配置标准与模型
- excel打开大文件很卡
- python——保留字
- LaTex itemize enumerate 枚举 编号使用
- [Luogu P3288] [BZOJ 3597] [SCOI2014]方伯伯运椰子
- SpringBoot+Vue生产环境打包
- flameshot截图工具没有插入文字的功能
- 450位骨科医生迎来“人机大战”,不敌阿里云AI系统
- 【数据库】聚合和排序