今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。

文章目录

  • 一、思路流程
  • 技术提升
  • 二、图像转动漫
  • 三、视频帧读取与视频帧写入

效果展示

一、思路流程

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

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

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过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 轻松将普通视频变成动漫视频?相关推荐

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

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

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

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

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

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

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

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

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

  6. 《玩转Python轻松过二级》配套视频免费观看地址

    本文是汇总地址,有新课程会及时更新,也可以关注微信公众号"Python小屋"观看. 第1章  Python概述 微课|玩转Python轻松过二级(1.1节):Python命令式编程 ...

  7. 用 Python 轻松将懂车帝视频转换为文本

    文 | 派森酱 来源:Python 技术「ID: pythonall」 最近在懂车帝收藏了一些感兴趣的视频,希望能整理出文字稿 观看视频,做笔记时遇到一个问题,需要反复一段一段的去看视频,再手敲整理笔 ...

  8. 艺术签名python_个性签名设计五十行Python轻松实现

    原标题:个性签名设计五十行Python轻松实现 欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.大航海计划.BAT内推.学习资料等. 前言 ...

  9. 微课|玩转Python轻松过二级(2.1节):常用内置对象

    适用教材: 董付国.<玩转Python轻松过二级>.清华大学出版社,2018. 第2章  运算符.表达式与内置对象 2.1  常用内置对象 图书购买链接 京东:https://item.j ...

最新文章

  1. Linux学习路线指南
  2. 2014年 12月15日 多线程编程
  3. 更改Linux用户的登录shell环境
  4. [蓝桥杯][2017年第八届真题]对局匹配
  5. 数据结构之基于Java的二叉树实现
  6. 聊聊rocketmq的FileAppender
  7. 软件测试之软件测试方法
  8. 来,同学,坐下,谈谈对Dex文件的认识
  9. CPU卡FM1208发卡操作流程(不带密钥验证)
  10. Espresso测试框架
  11. [Erlang] XML处理方案
  12. Unity--PicoVR开发--记录
  13. Win10左下角搜索栏以及资源管理器搜索栏无法使用(点击没有反应)
  14. Powerbuilder编程过程中的 DataWindow 数据窗口函数
  15. Android N App分屏模式完全解析(下)
  16. 百度快照更新的依据和规则
  17. python自带的编辑器是-python自带的编辑器是
  18. MD5的介绍,算法和C、VB、Delphi实现
  19. 今天用手绘板画了一个simple的,见笑老
  20. iSCSI与FCoE

热门文章

  1. 开源新作!疯狂java讲义第四版
  2. 调用阿里云接口一键实现人像动漫化
  3. 浅谈美式与日式角色扮演游戏的差异与融合
  4. G. Snake Rana 容斥原理
  5. 全视频格式通吃?NDS影音卡iPLAYER即将上市
  6. 设计模式-模板方法模式-java-中文版
  7. 【flutter】AndroidStudio 如何签名打包,步骤
  8. java输出镂空金字塔
  9. 【星曈科技】OpenMv笔记——单颜色彩色识别
  10. 笔记本电脑和台式电脑在家里没有装网也可以上网(真后悔现在才看到...,因为我安了网线)