文章目录

容我废话一下

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

效果展示

一、思路流程

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

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

二、图像转动漫

为了让大家不关心深度学习模型,已经为大家准备好了转换后的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

今天就到这哦~ 完整源码获取点击下方微信名片获取哟~

完整源码企业微信文档-在线文档https://docs.qq.com/doc/DT09rY2ppVGFITU9E

一日一技:如何用Python将 普通视频 变成 动漫视频相关推荐

  1. python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理

    一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...

  2. python文本格式上一日_一日一技:在 Python 中快速遍历文件

    一日一技:在 Python 中快速遍历文件 摄影:产品经理 厨师:产品经理 当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码: 没有子文件夹时 import os all_ ...

  3. python延时执行函数_一日一技:在 Python 中实现延迟调用

    一日一技:在 Python 中实现延迟调用 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理的生日餐 熟悉 Golang 的同学都知道,Golang 里面有一个关键词叫做def ...

  4. 如何设置计划任务程序 每6小时运行一次_如何用 Python 打造一个全自动赚钱的 YouTube 视频发布系统并月入过万(被动收益)

    前言 这篇文章将告诉你如何通过Python打造一台全自动发布YouTube视频并专区美元收益的系统. 目前我自己用的这套系统已基本稳定运行了三个月.其中一个YouTube频道从零起步到达到最低开通获利 ...

  5. python教程 网易公开课_如何用Python抓取网易公开课的视频?

    怎么办?下载APP吗?作为一个技术人员这点问题我怎么会屈服呢,正好这两天跟大家说Python,那么今天就用Python搞一下吧. 需要下载视频的网页地址: http://v.163.com/speci ...

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

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

  7. 想要自制动漫视频?Python教你把普通视频变成动漫视频

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

  8. 如何可以用 Python 轻松将普通视频变成动漫视频?

    今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果. 文章目录 一.思路流程 技术提升 二.图像转动漫 三.视频帧读取与视频帧写入 效果展示 一.思路流程 读取视频帧 将每一 ...

  9. python 做个创越火线挂_一日一技:用Python做个能挂墙上的大钟表

    今天给大家分享 1 个非常实用的 python 技能--用 Python 做个能挂墙上的大钟表,先上成果视频: 本项目用到的库主要有 pygame . math . datetime 等,另外还用到一 ...

最新文章

  1. 基于visual Studio2013解决面试题之1007鸡蛋和篮子
  2. 批量删除指定user和transaction type对应order的report
  3. 基于SLS构建RDS审计合规监控
  4. php 项目中引用对方接口_关于PHP中为什么要写接口的问题说明
  5. mongodb的条件查询笔记
  6. 《天天数学》连载01:一月一日
  7. Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
  8. 白帽子讲web安全笔记
  9. 进程线程----转自林海峰
  10. ionic介绍以及ionic环境搭建
  11. STM32中挂载SDRAM内存说明
  12. win10更改计算机dns,w10怎么修改电脑dns win10电脑修改dns的具体方法[多图]
  13. 翻棋子游戏与Nim游戏
  14. 因子分析累计贡献率_[2018年最新整理]多元统计分析之因子分析.doc
  15. [Nikon D80]适马微距
  16. 【号外20191127】微软刚刚更新了snipping tool
  17. Go : 与切片类型处理相关的代码(附完整源码)
  18. 批量图片格式转化——gif、jpg、png三种格式的图片相互转化
  19. python 获取字符串MD5值
  20. 5个高质量的自学网站,每天坚持一小时,让你受益一生!

热门文章

  1. 数据流畅驰骋:探秘Logstash在大数据领域的卓越表现【上进小菜猪大数据系列】
  2. 自定义javascript弹窗
  3. idea 与 Tomcat 有一个美妙的约定
  4. 基于知识图谱的语言模型:智能化知识分享与获取
  5. Ormlite的大概介绍
  6. Java File.createNewFile 创建文件的四种方式小笔记
  7. 传统豪华品牌引领?智能座舱进入「沉浸式娱乐体验」新周期
  8. Python 进阶视频课 - 9. 默顿模型
  9. 凯撒密码(java python)
  10. STM32单片机修改寄存器的位操作方法(全网最全)