新闻中心
轻量级人像分割模型PP-HumanSeg树莓派部署
本文介绍将PP-HumanSeg-Lite轻量级人像分割模型部署到树莓派的流程。先克隆PaddleSeg仓库、安装相关工具并下载预训练模型,接着导出静态图模型并转为ONNX格式,最后编写预测代码。将相关文件夹打包至树莓派,即可运行实现实时人像分割。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

轻量级人像分割模型PP-HumanSeg模型树莓派部署
人像分割是图像分割领域的高频应用,PaddleSeg推出在大规模人像数据上训练的人像分割系列模型PP-HumanSeg,包括超轻量级模型PP-HumanSeg-Lite,满足在服务端、移动端、Web端多种使用场景的需求。本项目将PP-HumanSeg-Lite模型转为onnx并部署到树莓派,实现人像抠图效果。效果如下图所示(这里只露个半脸):
一、介绍
本项目将PaddleSeg的轻量级人像分割模型转换为onnx,将其部署到树莓派实现实时人像分割。树莓派环境如下:
硬件:
树莓派4B
摄像头一个
软件
Ubuntu Desktop 21.10
onnxruntime
opencv-python
二、具体流程
1、克隆paddleseg仓库
In [ ]# step 1: git clone %cd ~/ !git clone https://gitee.com/PaddlePaddle/PaddleSeg.git
2、安装paddleseg
In [ ]# step 2: install paddleseg!pip install paddleseg
3、下载预训练模型
In [ ]# step 3: 下载预训练模型%cd ~/PaddleSeg/contrib/PP-HumanSeg !python pretrained_model/download_pretrained_model.py
4、导出静态图模型
需要加上input_shape,本项目部署的模型是PP-HumanSeg-Lite,该模型的输入图片大小是192x192,如果要部署其他模型,需要更改model_path和config路径,。
Motiff妙多
Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”
334
查看详情
In [ ]
# step 4: 导出静态图模型%cd ~/PaddleSeg/contrib/PP-HumanSeg !python ../../export.py \ --config configs/fcn_hrnetw18_small_v1_humanseg_192x192_mini_supervisely.yml \ --model_path pretrained_model/fcn_hrnetw18_small_v1_humanseg_192x192/model.pdparams \ --s*e_dir export_model/fcn_hrnetw18_small_v1_humanseg_192x192 \ --with_softmax --input_shape 1 3 192 192
5、onnx转换
In [ ]# step 5:转为onnx模型# ① 安装paddle2onnx!pip install paddle2onnxIn [ ]
# ② 转换为onnx%cd ~/PaddleSeg/contrib/PP-HumanSeg
! paddle2onnx --model_dir ./export_model/fcn_hrnetw18_small_v1_humanseg_192x192/ \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--s*e_file onnx_model/model.onnx \
--opset_version 12
6、移动模型路径
模型路径是:/home/aistudio/pp_humanseg_deploy,文件夹目录结构如下:
|-onnx_model
|---model.onnx
|-predict.py
# step 6: 转移模型路径%cd ~/ !mkdir pp_humanseg_deploy %cd ~/pp_humanseg_deploy/ !mkdir onnx_model !cp ~/PaddleSeg/contrib/PP-HumanSeg/onnx_model/model.onnx ~/pp_humanseg_deploy/onnx_model
7、预测代码
创建/home/aistudio/pp_humanseg_deploy/predict.py,将以下内容放进predict.py。
import cv2import numpy as npimport onnxruntime as rtdef normalize(im, mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]):
im = im.astype(np.float32, copy=False) / 255.0
im -= mean
im /= std return imdef resize(im, target_size=608, interp=cv2.INTER_LINEAR):
if isinstance(target_size, list) or isinstance(target_size, tuple):
w = target_size[0]
h = target_size[1] else:
w = target_size
h = target_size
im = cv2.resize(im, (w, h), interpolation=interp) return imdef preprocess(image, target_size=(192, 192)):
image = normalize(image)
image = resize(image, target_size=target_size)
image = np.transpose(image, [2, 0, 1])
image = image[None, :, :, :] return imagedef display_masked_image(mask, image, color_map=[255, 0, 0], weight=0.6):
mask = mask > 0
c1 = np.zeros(shape=mask.shape, dtype='uint8')
c2 = np.zeros(shape=mask.shape, dtype='uint8')
c3 = np.zeros(shape=mask.shape, dtype='uint8')
pseudo_img = np.dstack((c1, c2, c3)) for i in range(3):
pseudo_img[:, :, i][mask] = color_map[i]
vis_result = cv2.addWeighted(image, weight, pseudo_img, 1 - weight, 0) return vis_result
onnx_model_path = 'onnx_model/model.onnx'sess = rt.InferenceSession(onnx_model_path)
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
target_size = (192, 192)
cap_video = cv2.VideoCapture(0)if not cap_video.isOpened(): raise IOError("Error opening video stream or file.")while cap_video.isOpened():
ret, raw_frame = cap_video.read()
pre_shape = raw_frame.shape[0:2][::-1] if ret:
frame = cv2.cvtColor(raw_frame, cv2.COLOR_BGRA2RGB)
frame = preprocess(frame, target_size)
pred = sess.run(
[label_name],
{input_name: frame.astype(np.float32)}
)[0]
pred = pred[0]
raw_frame = resize(raw_frame, target_size)
image = display_masked_image(pred, raw_frame)
image = resize(image, target_size=pre_shape)
cv2.imshow('HumanSegmentation', image) if cv2.waitKey(1) & 0xFF == ord('q'): break
else: breakcap_video.release()
三、树莓派运行实例
将/home/aistudio/pp_humanseg_deploy文件夹打包,放入树莓派环境运行predict.py,效果如下:
以上就是轻量级人像分割模型PP-HumanSeg树莓派部署的详细内容,更多请关注其它相关文章!
# git
# python
# type
# fig
# udio
# igs
# red
# ai
# 工具
# 杨浦网站建设咨询
# 搜狗网站优化推广费用
# 设计网站建设优化策略
# 网站名字优化怎么写
# 自媒体的seo思维
# 自动发卡网站怎么推广
# 福清律师网站推广
# 机械制造网站推广
# 热爱seo 不局限于seo博客
# 梁平区抖音seo团队
# 服务端
# 出在
# 所示
# 解决问题
# 相关文章
# 将其
# 官网
# 转换为
# 一言
# 中文网
相关栏目:
【
行业资讯67740 】
【
技术百科0 】
【
网络运营39195 】
相关推荐:
微波炉power中文是什么意思
手机的nfc是什么功能是什么意思
市盈率tt的扣非是什么意思
市盈率底下 18A 19E 是什么意思
j*a数组怎么新增值
如何使硬盘升级固态硬盘
虚拟机服务器如何关机命令
如何固态硬盘4k对齐
显示器上power键是什么意思
为什么ai老是说链接面板中缺少某些文件
access 如何输入命令
夸克前缀后缀什么意思啊
linux如何跳回命令行界面
春运抢票需要什么软件抢
折叠屏手机为什么凉凉
制冰机power1灯亮是什么意思
如何通过命令行聊天
typescript如何定义变量
苹果16主打颜色有哪些
自己如何安装固态硬盘
市盈率292是什么意思
路由器power灯一直亮是什么意思
春运预约抢票能抢到吗
自己如何加装固态硬盘
typescript 如何解决 null
华为5g手机怎么用4g网络
联想的固态硬盘如何
如何4k对齐固态硬盘
单片机怎么连接电路图
单片机串口接收怎么实现
买的5g手机但是没有5g网络怎么办
vivo手机爱奇艺怎么投屏到电视操作步骤
市盈率市净率是什么意思
市盈率300是什么意思
如何知道固态硬盘
如何以管理员身份打开命令提示符
如何在昇腾Ascend 910B上运行Qwen2.5教程
ai怎么找链接文件位置教程
360桌面壁纸怎么弄掉
市盈率亏损是什么意思
春运抢票多久可以买到票
j*a怎么让数组倒换
typescript入门要多久
税负是什么意思
access中如何使用常用宏命令
typescript中文怎么读
每日推荐电声音乐软件有哪些
cmd如何定时执行命令
j*a里数组怎么赋值
如何使用net命令


2025-07-31
浏览次数:次
返回列表
//gitee.com/PaddlePaddle/PaddleSeg.git