文章目录

  • 容我废话一下
  • 一、思路流程
  • 二、图像转动漫
  • 三、视频帧读取与视频帧写入

容我废话一下

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

完整源码获取点击下方微信名片获取哟~

给大家推荐一套爬虫教程,涵盖常见大部分案例,非常实用!

代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习丨学以致用丨下一个Python大神就是你!

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

  1. 一日一技:如何用Python将 普通视频 变成 动漫视频

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

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

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

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

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

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

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

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

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

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

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

  7. 魔法的尽头是科技——用Python将普通视频变成动漫视频

    嗨害大家好鸭!我是小熊猫

  8. Python案例——将普通视频变成动漫视频

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

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

  10. Python爬虫:ZzzFun动漫视频网

    提醒:转载请标明作者和原文链接!!! CSDN个人主页: 高智商白痴 原文地址: https://blog.csdn.net/qq_44700693/article/details/109924262 ...

最新文章

  1. 计算机等级必须在学校考吗,计算机等级考试可以跳过一级考二级吗
  2. 大容量类 Redis 存储的场景补充-pika
  3. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)
  4. android发送短信指定收件人,android-发送短信给收件人
  5. Dilated/Atrous conv 空洞卷积/多孔卷积
  6. HDFS的API操作-获取FileSystem方式
  7. constructor of OfflineInterface.js
  8. azure api 管理_具有Azure功能的无服务器API
  9. springboot——概述
  10. 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
  11. Spring MVC+MyBatis中Spring没有接管Mybatis的事务
  12. matlab虚拟现实之工具介绍(修改)
  13. docker容器跨宿主机通信
  14. mac 安装mysql5.7_mac 安装 mysql 5.7
  15. git代码管理可视化工具 :Sourcetree(mac环境)
  16. 简单控制台项目:电影购票系统
  17. 最新版O泡易支付系统平台 PHP源码 第三方第四方免签支付平台系统 全开源可二开
  18. 数据库分页LIMIT
  19. 飞鸽原创博客,真正的飞鸽官方博客
  20. 深入理解RunLoop

热门文章

  1. VRRP原理及配置方法
  2. GLES3.0中文API-glMemoryBarrier
  3. ansi 软件测试,VB中的Unicode和Ansi格式
  4. 谈谈我们熟悉但未必了解的磁带库
  5. B端产品经理基本介绍
  6. 强烈推荐 20 个免费和开源数据可视化工具
  7. 办公用品管理系统服务器版,求索办公用品管理系统 2019
  8. 万字Spring框架学习总结(附核心代码详细注释)
  9. Scrum敏捷开发流程
  10. GIS 如何求多边形的内接最大圆