一个牛X小编,用Python将普通视频变成动漫,这也太厉害了吧
Posted 彳余大胆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个牛X小编,用Python将普通视频变成动漫,这也太厉害了吧相关的知识,希望对你有一定的参考价值。
前言
最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有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_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
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 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大法带大家分析一下这些神作,看看这些神作到底在讲些神马。
人生苦短,我用Python。小编利用Python网络爬虫爬取了豆瓣网,将网站上关于这三部动漫的评论全部抓取下来,之后通过Python的第三方库jieba分词进行词频统计和分析,最后通过matplotlib库和wordcloud库将关键词制作成词云进行可视化展示。
词云是神魔?"词云"这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于近日提出。"词云"就是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染",从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
话不多说,直接上图,下图是《海贼王》的豆瓣评论词云可视化展示图。
《海贼王》豆瓣评论词云
对于《海贼王》来说,世界,梦想,搞笑,感动,冒险,自由等关键词是大家对这部热血动漫的评价。在人物展现了,路飞、索隆和艾斯榜上有名。路飞这个贯穿这个海贼王的名字毫无疑问出现的次数最多,接下来是大剑豪索隆和死去的艾斯。
路飞是草帽海贼团船长,由于他的标志性特征是一顶草帽,因此常被直接称呼为草帽小子或草帽路飞,他的梦想是找到传说中的One Piece,成为海贼王。
《海贼王》人物---路飞
索隆是草帽海贼团第一位伙伴,职位是剑士,团内三主力之一,11位超新星的其中一人,悬赏金额在香波第诸岛排行第10名,特征是绿色头发(短发)、黑色的头巾(大多缠在左手臂上)、绿色的腰带(肚兜)和左耳配戴了三个耳环。
《海贼王》人物---索隆
艾斯是日本动漫《海贼王》里的虚构人物,统称为“火拳”,是主角蒙奇·D·路飞的义兄,已逝。他的形象是黑发,常戴着一顶橘色的帽子,在帽子上有奸笑和难过这两种表情图案,而且帽子的绳子绑着一个骷髅头的牌子,是白胡子海贼团第二队队长,实力不凡。曾被一度邀请加入七武海。后被黑胡子击败,并且交与海军,关押在海底大监狱。后因为保护路飞用身体去挡海军大将赤犬的岩浆拳,结果被贯穿了身体。内脏也被烧伤,船医通过检查发现其内脏已被烧坏无法医治,因伤势过重死亡。
《海贼王》人物---艾斯
下图是《火影忍者》的豆瓣评论词云可视化展示图。
《火影忍者》豆瓣评论词云
毋庸置疑,喜欢《火影忍者》的人不枚胜举,大家对这部动漫的喜爱度和评价也较高。从词云可视化来看,原创、剧情、拖沓、越来越、太长等相对负面的词有蛮多的。究其原因,那就是剧情拖沓,到后面有让人看不下去的感觉,甚至给人一种烂尾的感觉。但是总体上来说,小伙伴们对该剧的评价还是偏向于喜欢的~~~
在人物方面,主人公鸣人和他的好基友佐助很明显的出现在词云中。鸣人是日本动漫《火影忍者》的主角。火之国木叶隐村的忍者,四代目火影波风水门和二代九尾人柱力漩涡玖辛奈之子,六道仙人次子阿修罗转世。最后他成功控制了体内的九尾查克拉,并在第四次忍界大战中与佐助携手抗敌,成为了拯救世界的英雄。最后,鸣人终于实现自己的梦想,成为了火影。
《火影忍者》人物---鸣人
佐助是日本动漫《火影忍者》中的第二男主角。火之国木叶隐村宇智波一族的天才忍者,六道仙人长子因陀罗的转世。后来战争结束后,佐助因使世界和平的道路和鸣人不同,而在终结之谷与鸣人进行了宿命的一战,两败俱伤 。佐助最终被鸣人所感动,认同了鸣人使世界和平的道路,并重新成为木叶的一员。之后为了更加看清现在的世界开始了独自一人的赎罪之旅。
《火影忍者》人物---佐助
下图是《死神》的豆瓣评论词云可视化展示图。
《死神》豆瓣评论词云
《死神》,看到这个名字都觉得毛骨悚然,好怕怕的赶脚。死神是日本心理悬疑推理漫画《Death Note》(《死亡笔记》)中的角色。死神拥有死亡笔记,名字被写在这本笔记上的人就会死。从词云可视化上来看,剧情、动画、漫画、热血、原创、完结、蓝染、尸魂界等元素强调的比较多。
在人物方面,蓝染鹤立鸡群。蓝染是死神当中幕后最大的BOSS,拥有很强的力量,想成为改变整个世界的至高无上的神,不相信任何人,除了银。因为他认为银跟他一样,只有银才了解他。他想拥有力量,更强的力量。他和市丸银既是知己,又是唯一了解彼此的人,市丸银跟随他也是有目的的。只不过起初蓝染不知道罢了 不过,蓝染的死跟市丸银是没有关系的,但也不能说是绝对没有关系的,因为只有银比任何人都了解蓝染的,蓝染目前在TV版动画中还没有死亡。在漫画连载中仅仅只是被封印了,也没有死亡。
《死神》人物---蓝染
通过上面的词云可视化展示,小编相信你肯定知道了《海贼王》、《火影忍者》和《死神》三步巨作想表达的主旨了。不难发现,这三部动漫巨著都是热血动漫,从评论中关于热血的认同度占有很大的比重。果不其然,在我们观看这三部神剧的时候,也确实感受到了热血,里面的人物一言不合就干架,正所谓不热血,不少年~~~
以上的分析仅代表小编个人的看法,欢迎小伙伴们拍砖~~~
想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/
以上是关于一个牛X小编,用Python将普通视频变成动漫,这也太厉害了吧的主要内容,如果未能解决你的问题,请参考以下文章
用Python做词云可视化带你分析海贼王火影和死神三大经典动漫
用Python做词云可视化带你分析海贼王火影和死神三大经典动漫
用 Python 制作可视化 GUI 界面,一键实现多种风格的照片处理
用 Python 制作可视化 GUI 界面,一键实现将头像转成动漫风!
动漫制作技巧如何制作动漫视频
Python爬虫爬取腾讯视频动漫专区的动漫及其描述