用树莓派4b构建深度学习应用(14) 素描线稿篇

这一篇来看一下最近抖音上看到一个批量提取线稿的视频,掌握其核心原理,我们用 OpenCV 就很容易实现一个更快速的方案。

前言

上一篇我们完成了一对戴口罩和脱面罩的互补应用,这一篇来看一下最近抖音上看到一个批量提取线稿的视频,掌握其核心原理,我们用 OpenCV 就很容易实现一个更快速的方案。

Photoshop 提取线稿

最近刷抖音看见一个视频

实现原理

要将一张图片转为线稿图,基本要经历以下几个步骤:

将彩色图转换成灰度图

对灰度图进行求其反

做高斯模糊

颜色减淡融合到灰度图

OpenCV 提取线稿

为了方便看图片效果,这次我们用 jupyter notebook 来做。

1. 导入库文件

import cv2 
from matplotlib import pyplot as plt 
%matplotlib inline 

2. 显示原图

input_img = cv2.imread("image.jpg") 
plt.figure(figsize=(10,7)) 
plt.imshow(cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB)) 

3. 转灰度图

gray_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY) 
plt.figure(figsize=(10,7)) 
plt.imshow(cv2.cvtColor(gray_img, cv2.COLOR_BGR2RGB)) 

4. 灰度图反色

inv_gray_img = 255 - gray_img 
plt.figure(figsize=(10,7)) 
plt.imshow(cv2.cvtColor(inv_gray_img, cv2.COLOR_BGR2RGB)) 

5. 高斯模糊

 ksize=21 
sigma=0 
blur_img = cv2.GaussianBlur(inv_gray_img, ksize=(ksize, ksize), sigmaX=sigma, sigmaY=sigma) 
plt.figure(figsize=(10,7)) 
plt.imshow(cv2.cvtColor(blur_img, cv2.COLOR_BGR2RGB)) 

6. 颜色减淡融合

 sketch_img = cv2.divide(gray_img, 255 - blur_img, scale=256)  # 颜色减淡融合 
plt.figure(figsize=(15,10)) 
plt.imshow(cv2.cvtColor(sketch_img, cv2.COLOR_BGR2RGB)) 
几行代码就搞定了,要比速度的话,那 Python+OpenCV 就没有输过。

( PS 的设计师别打我!)

sketchKeras 提取线稿

上面 OpenCV 的方法虽然简单,但仔细看发髻和袖口处的线条还是不够清晰,那么我们用神经网络的方式再来实现一下。

1. 源码下载

git clone https://github.com/lllyasviel/sketchKeras.git 
下载权重文件 mod.h5,放到项目目录下


2. 分析网络结构

sketchKeras 是一个 u-net 类型的网络, 作者没有公布模型结构,但我们可以通过 tensorboard 用其 Keras 的模型文件来解读一下其网络结构形式。

先把 keras 转成 pb 文件
python keras_to_tensorflow.py --input_model="mod.h5" --output_model="mod.pb" 
然后就能用 tensorboard 导入模型
mkdir logs 
python3 tensorboard_graph.py 
项目下生成 logs 目录就导出了计算图
tensorboard --logdir=logs/ --host=127.0.0.1 
我们可以看到就是一个典型的 unet 架构,输入 [3 * 512 * 512 * 1] 不停的下采样到 [3 * 32 * 32 * 512],然后再上采样回来的过程。


也可以安装一个 Netron,解读网络会更方便些。


3. 预处理

输入原始图片,先 resize 成 384*512(长或宽一边为 512),然后转灰度图,再做高斯模糊,两者相减之后,最后归一化处理成 [3, 512, 512, 1] 的 Tensor,就完成了预处理。
from_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)  

4. 推理输出

上面分析过,神经网络输出是 [3, 512, 512, 1],需要按比例裁剪到原始尺寸,然后降噪处理后就得到我们需要的线框图了。
# 模型推理 (3, 512, 512, 1) 
line_mat = mod.predict(light_map, batch_size=1) 
# 去除 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), :] 
show_active_img_and_save('sketchKeras_colored', line_mat, 'sketchKeras_colored.jpg') 
line_mat = np.amax(line_mat, 2) 
# 降噪 
show_active_img_and_save_denoise_filter2('sketchKeras_enhanced', line_mat, 'sketchKeras_enhanced.jpg') 
show_active_img_and_save_denoise_filter('sketchKeras_pured', line_mat, 'sketchKeras_pured.jpg') 
show_active_img_and_save_denoise('sketchKeras', line_mat, 'sketchKeras.jpg') 


完美!

如果遇到 load_model requires h5py 报错的话,安装一下 h5py 即可。
sudo apt-get install libhdf5-dev 
pip install h5py 

 

可以看到,用 sketchKeras 转换的线稿笔顺会更清晰些,而 sketchKeras_colored 包含了颜色的要素,这对后续图片上色会有很大帮助。


- 本文内容来自网络,如有侵权,请联系本站处理。

2023-01   阅读(9)   评论(0)
 标签: 人工智能

涨知识
3D打印

3D打印技术是增材制造技术,它利用计算机将需打印的物体3D模型切成一系列一定厚度的“薄片”,3D打印机自下而上地制造出每一层“薄片”,最后叠加成形出三维的实体物件。

评论:
相关文章
Jetbot基础教程-图像回归法实现循路功能

如果要面向“赛道”类的竞速型的循路应用,那么 Jetbot 范例中的 road_following 项目会更加适合,这个项目使用图像回归(Image Regression)的深度学习技术,是一种统计学上非常有用的数学模型。


用树莓派4b构建深度学习应用(8) Openvino篇

这一篇我们介绍一下在树莓派上部署 OpenVINO 神经棒,进一步提升AI的推理速度。


6000字人工智能科普,高中生都能读懂

本文是《人工智能基础(高中版)》的读书笔记,这本书的配图非常好,把难以理解的概念图形化,所以读后感会引用书中的图片(图片版权归商汤科技所有)。


一项新研究显示:ChatGPT 正在削弱我们的脑力

麻省理工最新发布的一项开创性研究表明,过度依赖像 ChatGPT 这样的工具,会导致认知功能大幅下降。


《中小学人工智能通识教育指南(2025年版)》全文发布

近日,教育部基础教育教学指导委员会正式发布《中小学人工智能通识教育指南(2025年版)》。



MaixCube

MaixCube 是基于Sipeed M1n 模块(主控:Kendryte K210)开发的一款集学习开发和商用一体的人脸识别产品。



Tflite-micro在ESP32实现离线命令识别

本文会介绍如何使用TensorFlow Lite构建一个本地语音识别系统,内容包括语音前端处理、语音识别模型的训练以及如何将其转换为TensorFlow Lite格式并部署到ESP32。


TinyML:在边缘侧实现超低功耗机器学习

分布最广的物联网设备往往体积很小、电量有限。它们被作为终端硬件,通过嵌入式传感器采集各种数据;计算能力有限,对功耗极为敏感。这类设备也能实现机器学习吗?

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。