嗨嗨,下午好朋友们~

之前毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但我们可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。

效果展示


怎么样, 还是ok的吧,那接下来一起来学习一下吧 ~

一、思路流程

  1. 读取视频帧
  2. 将每一帧图像转为动漫帧
  3. 将转换后的动漫帧转为视频

难点在于如何将图像转为动漫效果。这里我们使用基于深度学习的动漫效果转换模型,考虑到许多读者对这块不了解,因此我这边准备好了源码和模型,直接调用即可。

不想看文章细节的可以直接来着里 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教你把普通视频变成动漫视频相关推荐

  1. python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...

    鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频? 前言 半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的 ...

  2. 资深程序员教你,用python入门的知识抓取抖音短视频,太厉害了

    抖音短视频可以说是当下最流行的自媒体平台,而python编程同样也是目前最流行的编程语言. 今天,就让一位大厂的资深程序员,用最简单的方式,使用python抓取抖音短视频. 到时候我会把所有的源代码都 ...

  3. python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  4. m3u8解析_Python多进程教你下载M3U8加密或非加密视频!

    m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成. 相信大家都看过m3u8格式文件的内容,我们直来对比一下有什么不 ...

  5. 教你如何简便下载网站上的视频

    教你如何简便下载网站上的视频 利用you-get可以下载的国外网站: 利用you-get可以下载的国内网站: 接下来就具体介绍如何下载: 一.下载视频 1.安装you-get 如果之前没装过you-g ...

  6. python爬虫教程-Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门!

    原标题:Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门! Python简直就是万能的,你用Python都做过哪些事? 用网页看各大网站的VIP视频,用python下载? 用Pytho ...

  7. Python将普通视频变成动漫视频,这就是知识的力量~

    嗨嗨,下午好,我是小圆 之前,毒教材被曝光引发争议,那些编写度教材的人着实可恶.咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫.所以今天的目标是让任何具有python语言基本能 ...

  8. 微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~

    微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~ 千古文章一大抄,在微信公众号的运营当中,免不了会复制别人的内容,不过很多时候遇到有视频的图文内容时,我总希望能找到视频原地址,然 ...

  9. python将视频像素抓取替换导出mosaic效果的文本视频

    python将视频像素抓取替换导出mosaic效果的文本视频 第一次写博客,关于python的. 全网关于这种视频的的合成代码几乎没有,所以我提供了一套这样的思路. 完成过程很痛苦.因为全网类似的太少 ...

最新文章

  1. 体验Office 2013预览版
  2. ASP.NET 获取客户端IP (无视代理)
  3. J.U.C系列(五)BlockingQueue的使用
  4. SpringBoot+Vue整合WebSocket实现前后端消息推送
  5. thymeleaf体验
  6. 安装mysql8.0.20,报错“找不到VCRUNTIME140_1.dll”
  7. Linux 压缩和解压命令
  8. JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)
  9. 9008线刷_小米红米手机新机9008模式怎么进入?小米线刷救砖模式
  10. 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
  11. try-catch lasterr
  12. HTML表格实现固定表头 内容滚动
  13. Android 视频缩放/放大
  14. 滑窗口统计基因组GC含量的分布
  15. 把PC上的蓝牙适配器模拟成蓝牙GPS(转贴)
  16. 用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小 (2).ppt...
  17. OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)
  18. 大数据学习环境搭建系列(二)虚拟机软件Vmware的安装
  19. 在阿里当外包,是一种什么工作体验?
  20. erdas空间建模_ERDAS批处理的一个简单的空间模型建立

热门文章

  1. c语言2字节16进制转10进制,C语言中十六进制转十进制两种实现方法
  2. 面向5G C-RAN组网的机房配置标准与模型
  3. excel打开大文件很卡
  4. python——保留字
  5. LaTex itemize enumerate 枚举 编号使用
  6. [Luogu P3288] [BZOJ 3597] [SCOI2014]方伯伯运椰子
  7. SpringBoot+Vue生产环境打包
  8. flameshot截图工具没有插入文字的功能
  9. 450位骨科医生迎来“人机大战”,不敌阿里云AI系统
  10. 【数据库】聚合和排序