AnimeGAN动漫化模型一键应用(含动漫化小程序体验)问题

项目场景:

利用飞桨实现该应用过程中出现问题:AnimeGAN动漫化模型一键应用(含动漫化小程序体验)https://aistudio.baidu.com/aistudio/projectdetail/1308514?channelType=0&channel=0

原始代码:

#由于PaddleHub升级比较快,建议大家直接升级到最新版本的PaddleHub
!pip install paddlehub -U -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 该模型需要gpu跑,所以需要设置下gpu环境
%env CUDA_VISIBLE_DEVICES=0
%matplotlib inline

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

# 待输入图片
test_img_path = ["./test.jpg"]

# 展示图片
img1 = mpimg.imread(test_img_path[0]) 
plt.figure(figsize=(10,10))
plt.imshow(img1) 
plt.axis('off') 
plt.show()

# 转换为宫崎骏《起风了》风格图片

import cv2
import paddlehub as hub

# 模型加载
# use_gpu:是否使用GPU进行预测

model = hub.Module('animegan_v1_hayao_60', use_gpu=True)

# 模型预测
result = model.style_transfer(images=[cv2.imread('./test.jpg')],visualization=True)

问题描述:

  1. 安装问题,运行时提示
ModuleNotFoundError: No module named 'filelock'
  1. 调用paddlehub函数问题
TypeError: __new__() takes 1 positional argument but 2 were given
  1. cv2图像显示问题
error: (-206) Unrecognized or unsupported array type in function cvGetMat
  1. 其它
(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

原因分析:

前2个问题并未作思考,觉得是官方教程便直接GitHub提问,获得了解答。
第3个问题将最后得出的结果result和读取时的img1进行了比较,发现result是个list,img1是array,将result改为array仍然报错,打印了两者的shape,发现result比img1多了一维,即在数组外多了一层[]。


解决方案:

  1. 安装要求文档

您好,请安装paddle>=2.0.0, paddlehub>=2.0.0,您可以先安装下必要的包,用 pip install -r requirements.txt. 其中requirements.txt 可参考https://github.com/PaddlePaddle/PaddleHub/blob/release/v2.0/requirements.txt
或者将paddle和paddlehub卸载,然后重新安装,目前您存在的问题是缺少依赖包。

  1. 更改函数调用方式

您好,您使用模型时候传入的参数错误导致的,调用方式应为
model = hub.Module(name=‘animegan_v1_hayao_60’, use_gpu=True)
您查看的官方教程是匹配的1.8版本的paddle和paddlehub,目前2.0版本的paddlehub调用模型时候需要指定name。

  1. 更改cv2.imshow()的输入
import numpy as np
result = np.array(result)
result = np.squeeze(result)
# 之后再用cv2.imshow输出
cv2.imshow('test', tt)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 其它注意事项
    图片路径不应包含中文,否则会报错。

修改后代码:

#由于PaddleHub升级比较快,建议大家直接升级到最新版本的PaddleHub
!pip install paddlehub -U -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 该模型需要gpu跑,所以需要设置下gpu环境
%env CUDA_VISIBLE_DEVICES=0
%matplotlib inline

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

# 待输入图片
test_img_path = ["./test.jpg"]

# 展示图片
img1 = mpimg.imread(test_img_path[0]) 
plt.figure(figsize=(10,10))
plt.imshow(img1) 
plt.axis('off') 
plt.show()

# 读取图片存储
import cv2
import paddlehub as hub
img0 = cv2.imread('C:/Users/Lenovo/Downloads/test.jpg')

# 转换为宫崎骏《起风了》风格图片
# 模型加载
# use_gpu:是否使用GPU进行预测
model = hub.Module(name='animegan_v1_hayao_60', use_gpu=True)
# 模型预测
result1 = model.style_transfer(images=[img0],visualization=True)

# 转换为新海诚《你的名字》、《天气之子》风格图片
model = hub.Module(name='animegan_v2_shinkai_33', use_gpu=True)
result2 = model.style_transfer(images=[img0],visualization=True)

# 转换为今敏《红辣椒》风格图片
model = hub.Module(name='animegan_v2_paprika_74', use_gpu=True)
result3 = model.style_transfer(images=[img0],visualization=True)

import numpy as np
t1 = np.array(result1)
tt1 = np.squeeze(t1)
t2 = np.array(result2)
tt2 = np.squeeze(t2)
t3 = np.array(result3)
tt3 = np.squeeze(t3)
# cv2.imshow('test', tt)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
cv2.imwrite('C:/Users/Downloads/tt1.jpg', tt1)
cv2.imwrite('C:/Users/Downloads/tt2.jpg', tt2)
cv2.imwrite('C:/Users/Downloads/tt3.jpg', tt3)

你可能感兴趣的:(paddlepaddle)