如何用Python将普通视频变成动漫视频

yizhihongxing

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

效果展示

在这里插入图片描述

一、思路流程

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

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

二、图像转动漫

为了让大家不关心深度学习模型,已经为大家准备好了转换后的onnx类型模型。接下来按顺序介绍运行onnx模型流程。

安装onnxruntime库

pip install onnxruntime
# 源码及Python资料教程、电子书领取群 279199867

 

如果想要用GPU加速,可以安装GPU版本的onnxruntime:

pip install onnxruntime-gpu

 

需要注意的是:

onnxruntime-gpu的版本跟CUDA有关联,具体对应关系如下:

 

如何用Python将普通视频变成动漫视频

 

 

当然,如果用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].name


def 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*255
    out = np.clip(out, 0, 255).astype(np.uint8)
    return out

def preprocess(rgb):
    pad_w = 0
    pad_h = 0
    h,w,__ = rgb.shape
    N = 2**3
    if h%N!=0:
        pad_h=(h//N+1)*N-h
    if 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整除。

单帧效果展示

如何用Python将普通视频变成动漫视频
如何用Python将普通视频变成动漫视频
如何用Python将普通视频变成动漫视频

三、视频帧读取与视频帧写入

这里使用Opencv库,提取视频中每一帧并调用回调函数将视频帧回传。在将图片转视频过程中,通过定义VideoWriter类型变量WRITE确保唯一性。具体实现代码如下:

import cv2
from tqdm import tqdm

WRITER = None
def write_frame(frame, out_path, fps=30):
    global WRITER
    if 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将普通视频变成动漫视频 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 为了防止这个网站消失,我连夜用Python离线了上万张图片

    之前好多高质量网站都不见了,肯定是你们整活整多了,趁你们不注意,我先悄悄多保存点~ 事前准备 让我们开始今天的操作 1、环境配置** 安装一个Python和pycharm就好了 2、模块使用 requests # 数据请求 parsel # 解析模块 (提取数据)   这两个模块没有安装的话,先安装一下,win+R 输入cmd 按回车弹出命令提示符窗口,输入…

    Python开发 2023年4月2日
    00
  • 程序员最浪漫的表白方式,将情书写在她的照片里,Python简直太厉害啦~

    这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。 为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的,不过谁让他是我表弟呢(请我洗jio),于是教给他程序员的终极浪漫绝招,先假装给女神拍照,然后再把情书写到她的照片上打印出来送给她,嘿嘿~ 实现步骤 想要实现把情书写在像素中,那么我们就需要用到pillow这个神器。 众所周知,图…

    Python开发 2023年4月2日
    00
  • Python自动化办公:让程序自动分析数据制作报表,并发送邮箱

    序言 作为数据分析师,我们需要经常制作统计分析图表。但是报表太多的时候往往需要花费我们大部分时间去制作报表。这耽误了我们利用大量的时间去进行数据分析。但是作为数据分析师我们应该尽可能去挖掘表格图表数据背后隐藏关联信息,而不是简单的统计表格制作图表再发送报表。既然报表的工作不可免除,那我们应该如何利用我们所学的技术去更好的处理工作呢?这就需要我们制作一个Pyt…

    Python开发 2023年4月2日
    00
  • 重温Python基础——变量

    哈喽兄弟们,今天我们来复习下变量。 首先尝试在一个hello_world.py文件中使用变量,在文件开头添加一行代码,并对第二行代码进行修改,如下所示: message=”hello world” print(message) # Python源码/教程领取扣君羊:279199867 运行这个程序,会与 print(“hello world”) 相同。 我们…

    Python开发 2023年4月2日
    00
  • Python实现将Excel表格内容批量分离导出为PDF文件

    上一篇咱们实现了多个表格数据合并到一个表格,本次咱们来学习如何将表格数据分开导出为PDF文件。 部分数据     然后需要安装一下这个软件 wkhtmltopdf 效果展示     将每个数据单独导出为一个PDF     代码实现 import pdfkit import openpyxl import os # Python学习交流群 815624229 …

    2023年4月2日
    00
  • 为了快速了解原神,我用Python爬取了原神所有角色信息!

    原神是由米哈游制作发行的一款开放世界冒险游戏,号称全球玩家5600W,可以说是非常热门了,朋友都说好玩,哎,但我就是不玩,就是皮…       但是,今天我就要用python来打开“原神世界”的大门!探索一下游戏角色! 话不多说直接开整! 准备工作 这是本次需要使用到 的工具 nodejs pyexecjs requests 编辑器:pycharm环境:Py…

    Python开发 2023年3月31日
    00
  • 重温Python基础——数

    哈喽,兄弟们,本文带大家来复习一下Python基础中的数。 在编程中,经常会使用到数。在一些计算题中,或者其他的可视化数据等。Python能够根据不同用法处理它们 1、整数 在Python中可对整数执行加减乘除运算(+ – * /),使用两个乘号表示乘方(**) a=3 b=4 print(a+b) print(a-b) print(a*b) print(a…

    Python开发 2023年4月2日
    00
  • 聊天尬住了?教你用Python一键获取斗图表情包,从此摇身变海王

    很多兄弟在聊天上没有下太多的功夫,导致自己聊天的时候很容易尬住,然后就不知道聊啥了,这时候合适表情包分分钟就能救场,但是一看自己收藏的表情包,好家伙,两只手都数得过来。 所以今天来给兄弟们分享一下爬取表情包的代码,再也不用尬聊了! 给大家看看我朋友的尬聊场面     本次目标 网站:发表情 网不好 ,没加载出来,表弟又在当老六,看不该看的抢我网速!!! 使用…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部