centos7 PaddleHub人像分割模型:AI人像抠图及图像合成

2023-10-25 10:59

本文主要是介绍centos7 PaddleHub人像分割模型:AI人像抠图及图像合成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

centos 安装抠图环境:

#复制下面命令一条一条的在windows的命令行窗口里面执行,需要一些时间
#执行安装paddlehub第三步后可能会出现一些问题,解决方式在文章下方
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PaddlePaddle
pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
hub install deeplabv3p_xception65_humanseg==1.0.0

问题1:在安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PaddlePaddle 这一步之后,会自动安装opencv-python,这时候如果在centos环境下进入python,输入impot cv2会报错,windows环境应该没问题

ImportError: libSM.so.6: cannot open shared object file: No such file or directory
ImportError: libXrender.so.1: cannot open shared object file: No such file or directory
ImportError: libXext.so.6: cannot open shared object file: No such file or directory

原因是:缺少共享库,我们直接通过yum来安装libSM解决不了问题, 那是因为yum源默认提供的库是i686的, 如果我们的服务器系统是64位的,应该要安装的是x86_64版而非i686.

解决方式:

来查看一下yum默认提供的libSM, 结果如下

yum whatprovides libSM.so.6

在这里插入图片描述

可以看到默认提供的是i686的, 但是我们需要x86_64, 所以安装的时候把i686改成x86_64, 如下

sudo yum install libSM-1.2.2-2.el7.x86_64 --setopt=protected_multilib=false

剩下的就直接输入吧

sudo yum install libXrender-0.9.10-1.el7.x86_64 --setopt=protected_multilib=false
sudo yum install libXext-1.3.3-3.el7.x86_64 --setopt=protected_multilib=false

问题2:如果安装过程又出现问题,提示【SyntaxError: invalid syntax  由于用户取消而退出

解决方式: 

必须修改的两个yum配置文件

因为yum使用python2,因此替换为python3后可能无法正常工作,继续使用这个python2.7.5,因此需要修改yum相关配置文件。

(1)vi /usr/bin/yum

第一行:#!/usr/bin/python --> #!/usr/bin/python2.7

(2) vi /usr/libexec/urlgrabber-ext-down

第一行:#!/usr/bin/python --> #!/usr/bin/python2.7

完成上面两步,现在使用yum命令基本不会出现这样的错误:SyntaxError: invalid syntax  由于用户取消而退出

安装完成后,试一下可以成功导入cv2了
在这里插入图片描述

问题3: 执行 hub install deeplabv3p_xception65_humanseg==1.0.0 的时候可能会出现hub: command not found

解决方式:配置python3的环境变量,在 /etc/profile加入python的安装路径配置环境变量,具体操作可以看我的另一篇文章https://blog.csdn.net/clz979991314/article/details/107842982

代码片段: 

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib import animation
import paddlehub as hub
from PIL import Image, ImageSequence
import numpy as np
import os
import flask, json
from flask import request# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)# 合成函数
def blend_images(fore_image, output_path, base_size, color):"""将抠出的人物图像换背景fore_image: 前景图片,抠出的人物图片base_size: 图片尺寸"""# 制作指定大小的背景色base_image = Image.new("RGBA", base_size, color)# 读入图片base_image = base_image.convert('RGB')fore_image = Image.open(fore_image).resize(base_image.size)# 图片加权合成scope_map = np.array(fore_image)[:,:,-1] / 255scope_map = scope_map[:,:,np.newaxis]scope_map = np.repeat(scope_map, repeats=3, axis=2)res_image = np.multiply(scope_map, np.array(fore_image)[:,:,:3]) + np.multiply((1-scope_map), np.array(base_image))#保存图片res_image = Image.fromarray(np.uint8(res_image))print(res_image)res_image.save(output_path)# 抠图@server.route('/matting', methods=['get', 'post'])
def matting():# 测试图片路径test_path = 'D:\\image\\'# 输出路径output_path = 'D:\\image\\test\\'# 背景图片地址base_image = (295, 413)# 白色(255,255,255) 红色(182,38,38) 蓝色(67,142,219)color = (67,142,219)# 待预测图片名称test_file_name = "5"# 待预测图片后缀test_file_suffix = ".jpg"# 输入文件名称output_file_name = test_file_name + test_file_suffixtest_img_path = [test_file_name + test_file_suffix]test_img_path = [test_path + img for img in test_img_path]img = mpimg.imread(test_img_path[0]) module = hub.Module(name="deeplabv3p_xception65_humanseg")input_dict = {"image": test_img_path}# execute predict and print the resultresults = module.segmentation(data=input_dict)print(results)output_path_img = output_path + output_file_nameblend_images('humanseg_output/'+test_file_name+'.png', output_path_img, base_image, color)return output_path_imgif __name__ == '__main__':server.run(debug=True, port=8888, host='0.0.0.0')# 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问

如果安装的deeplabv3p_xception65_humanseg版本不是1.0.0,而是1.1.0或1.1.1

则使用下面的代码:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib import animation
import paddlehub as hub
from PIL import Image, ImageSequence
import numpy as np
import os
import flask, json
from flask import request
import cv2# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)# 合成函数
def blend_images(fore_image, output_path, base_size, color):"""将抠出的人物图像换背景fore_image: 前景图片,抠出的人物图片base_size: 图片尺寸"""# 制作指定大小的背景色base_image = Image.new("RGBA", base_size, color)# 读入图片base_image = base_image.convert('RGB')fore_image = Image.open(fore_image).resize(base_image.size)# 图片加权合成scope_map = np.array(fore_image)[:,:,-1] / 255scope_map = scope_map[:,:,np.newaxis]scope_map = np.repeat(scope_map, repeats=3, axis=2)res_image = np.multiply(scope_map, np.array(fore_image)[:,:,:3]) + np.multiply((1-scope_map), np.array(base_image))#保存图片res_image = Image.fromarray(np.uint8(res_image))print(res_image)res_image.save(output_path)# 抠图@server.route('/matting', methods=['get', 'post'])
def matting():# 测试图片路径test_path = 'D:/image/'# 输出路径output_path = 'D:/image/test/'# 背景图片地址base_image = (295, 413)# 白色(255,255,255) 红色(182,38,38) 蓝色(67,142,219)color = (255,255,255)colorType = flask.request.values.get('color_type')if colorType == '1':color = (182,38,38)if colorType == '2':color = (67,142,219)# 待预测图片名称# test_file_name = "5"test_file_name = flask.request.values.get('test_file_name')# 待预测图片后缀# test_file_suffix = ".jpg"test_file_suffix = flask.request.values.get('test_file_suffix')print(color)# 输入文件名称output_file_name = test_file_name + test_file_suffixtest_img_path = [test_file_name + test_file_suffix]test_img_path = [test_path + img for img in test_img_path]human_seg = hub.Module(name="deeplabv3p_xception65_humanseg")results = human_seg.segmentation(images=[cv2.imread(test_img_path[0])], visualization=True)print(results[0]['save_path'])save_path = results[0]['save_path']output_path_img = output_path + output_file_nameblend_images(save_path, output_path_img, base_image, color)return output_path_imgif __name__ == '__main__':server.run(debug=True, port=18778, host='0.0.0.0')# 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问

通过请求访问: http://127.0.0.1:18778/matting?color_type=1&test_file_name=1&test_file_suffix=.jpg

 

这篇关于centos7 PaddleHub人像分割模型:AI人像抠图及图像合成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我