不会画线稿?PaddlePaddle让你秒变灵魂画手!

2023-11-08 02:40

本文主要是介绍不会画线稿?PaddlePaddle让你秒变灵魂画手!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不会画线稿?PaddlePaddle让你秒变灵魂画手!

目录

  • 不会画线稿?PaddlePaddle让你秒变灵魂画手!
    • PaddleHub转换
  • 一、效果展示
    • 图片效果
    • 视频效果
  • 二、实现步骤
    • 1.导入必要的库和模型
    • 2.处理视频
    • 3.图片线稿化
    • 4.合并视频
    • 5.合并音频
    • 点我进入项目-不会画线稿?PaddlePaddle让你秒变灵魂画手!

线稿可以让空无一物的画纸产生正形负形,更能以长短虚实、疏密深淡、张弛得当之势自然勾勒物象之形、神、光、色、体积、质感等,不同造诣的画者能驾驭出不同的画面,难度之大深不可测,变化多端甚是神奇。

线描技法源远流长,可以追溯到我们中国画的白描,中国古代有许多白描大师,如顾恺之、李公麟等都为我国留下了文艺瑰宝。

但线稿的另一种意义是从某个图片转变而来,只有黑色线条,便于临摹,十分方便。

PaddleHub转换

由开发者Mr.郑先生_提供
【PaddleHub模型贡献】一行代码实现从彩色图提取素描线稿转换成PaddleHub让大家更方便的使用

一、效果展示

图片效果


视频效果

原始视频链接:
https://player.bilibili.com/player.html?aid=373068021&bvid=BV14Z4y1g7uG&cid=264240737&page=1

原视频

将视频内容转换为线稿:
https://player.bilibili.com/player.html?aid=800614383&bvid=BV1zy4y1v7kQ&cid=262900480&page=1

paddle带你将视频线稿化

二、实现步骤

1.导入必要的库和模型

import cv2
from scipy import ndimage
from model import Model
import numpy as np
import os
os.environ['CUDA_VISIBLE_DEVICES']='0'
model = Model('inference_model',use_gpu=True,use_mkldnn=False,combined=False)

2.处理视频

将视频按帧进行处理,并保存到images文件夹中。

def transform_video_to_image(video_file_path, img_path):'''将视频中每一帧保存成图片'''video_capture = cv2.VideoCapture(video_file_path)fps = video_capture.get(cv2.CAP_PROP_FPS)count = 0while(True):ret, frame = video_capture.read() if ret:cv2.imwrite(img_path + '%d.jpg' % count, frame)count += 1else:breakvideo_capture.release()print('视频图片保存成功, 共有 %d 张' % count)return fps
fps = transform_video_to_image('shipin.mp4', 'images/')

3.图片线稿化

from function import *for home, dirs, files in os.walk('images'):for filename in files:fullname = os.path.join(home, filename)from_mat = cv2.imread(fullname)width = float(from_mat.shape[1])height = float(from_mat.shape[0])new_width = 0new_height = 0if (width > height):from_mat = cv2.resize(from_mat, (512, int(512 / width * height)), interpolation=cv2.INTER_AREA)new_width = 512new_height = int(512 / width * height)else:from_mat = cv2.resize(from_mat, (int(512 / height * width), 512), interpolation=cv2.INTER_AREA)new_width = int(512 / height * width)new_height = 512from_mat = from_mat.transpose((2, 0, 1))light_map = np.zeros(from_mat.shape, dtype=np.float)for channel in range(3):light_map[channel] = get_light_map_single(from_mat[channel])light_map = normalize_pic(light_map)light_map = resize_img_512_3d(light_map)light_map = light_map.astype('float32')line_mat = model.predict(np.expand_dims(light_map, axis=0).astype('float32'))# 去除 batch 维度 (512, 512, 3)line_mat = line_mat.transpose((3, 1, 2, 0))[0]# 裁剪 (512, 384, 3)line_mat = line_mat[0:int(new_height), 0:int(new_width), :]line_mat = np.amax(line_mat, 2)# 降噪show_active_img_and_save_denoise(line_mat, './output/' + filename)print('图片' + filename + '已经完成')
print('全部图片转换成功。')

4.合并视频

def combine_image_to_video(comb_path, output_file_path, fps=30, is_print=False):'''合并图像到视频'''fourcc = cv2.VideoWriter_fourcc(*'MP4V')    file_items = os.listdir(comb_path)file_len = len(file_items)# print(comb_path, file_items)if file_len > 0 :temp_img = cv2.imread(os.path.join(comb_path, file_items[0]))img_height, img_width = temp_img.shape[0], temp_img.shape[1]out = cv2.VideoWriter(output_file_path, fourcc, fps, (img_width, img_height))for i in range(file_len):pic_name = os.path.join(comb_path, str(i)+".jpg")if is_print:print(i+1,'/', file_len, ' ', pic_name)img = cv2.imread(pic_name)out.write(img)out.release()
combine_image_to_video('output', 'work/mp4_analysis.mp4', fps)

5.合并音频

#音频获取
def getMusic(video_name):"""获取指定视频的音频"""# 读取视频文件video = VideoFileClip(video_name)# 返回音频return video.audio
#音频添加
def addMusic(video_name, audio,output_video):"""实现混流,给video_name添加音频"""# 读取视频video = VideoFileClip(video_name)# 设置视频的音频video = video.set_audio(audio)# 保存新的视频文件video.write_videofile(output_video)from moviepy.editor import *
addMusic('work/mp4_analysis.mp4',getMusic('shipin.mp4'),'work/mp4_analysisnew.mp4')

点我进入项目-不会画线稿?PaddlePaddle让你秒变灵魂画手!

这篇关于不会画线稿?PaddlePaddle让你秒变灵魂画手!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367447

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

看完这个不会配置 logback ,请你吃瓜!

之前在 日志?聊一聊slf4j吧 这篇文章中聊了下slf4j。本文也从实际的例子出发,针对logback的日志配置进行学习。 logack 简介 logback 官网:https://logback.qos.ch/ 目前还没有看过日志类框架的源码,仅限于如何使用。所以就不说那些“空话”了。最直观的认知是: logback和log4j是一个人写的springboot默认使用的日志框架是

在项目开发中,jsp页面不会少了,如何公用页面(添加页面和修改页面)和公用样式代码(css,js)?

在项目开发中,如何公用添加页面和修改页面? <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><html><head><title>岗位设置</title><%@ include file="/WEB-INF/jsp/public/common.jspf"%></head><body> <!-- 标

涉密电脑插U盘会不会被发现?如何禁止涉密电脑插U盘?30秒读懂!

在涉密电脑插U盘的那一瞬间,你是否也好奇会不会被发现?涉密电脑的安全监控可是滴水不漏的!想知道如何彻底禁止涉密电脑插U盘?简单几招搞定,轻松锁死外部设备,信息安全无懈可击! 涉密电脑插U盘会不会被发现? 涉密电脑是否会在插入U盘时被发现,需要根据具体情况来判断。在一些情况下,涉密电脑可能没有安装任何监控软件或安全工具,插入U盘可能不会立即触发警告。然而,随着信息安全管理的不断升级,越来越多

是谁还不会flink的checkpoint呀~

1、State Vs Checkpoint State:状态,是Flink中某一个Operator在某一个时刻的状态,如maxBy/sum,注意State存的是历史数据/状态,存在内存中。 Checkpoint:快照点, 是Flink中所有有状态的Operator在某一个时刻的State快照信息/存档信息 一句话概括: Checkpoint就是State的快照 目的:假设作业停止了,下次启动的

深度学习(十一)-PaddlePaddle

PaddlePaddle PaddlePaddle(Parallel Distributed Deep Learning,中文名飞桨) 是百度公司推出的开源、易学习、易使用的分布式深度学习平台 源于产业实践,在实际中有着优异表现 支持多种机器学习经典模型 优点 易用性。语法简洁,API的设计干净清晰 丰富的模型库。借助于其丰富的模型库,可以非常容易的复现一些经典方法 全中文说明文档

全网第一 | Flink学习面试灵魂40问答案,文末有福利!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 来源:王知无 作者:王知无 By 暴走大数据 场景描述:这是一份Flink学习面试指北。看看你搞清楚自己的定位没有? 关键词:Flink 学

全网第一份 | Flink学习面试灵魂40问,看看你能答上来几个?

《2021年最新版大数据面试题全面开启更新》 答案将在下期给出。   概念和基础篇   简单介绍一下Flink Flink相比传统的Spark Streaming有什么区别?和Spark中的structured streaming 相比呢?Flink相比ss和storm有什么优势? Flink的组件栈是怎么样的? Flink的基础编程模型了解吗?