|
百度PaddlePaddle团队发布的PP-HumanSeg人像分割模型,功能挺强的,不得不说百度是在BAT三家公司里做技术最扎实的源码地址:https://github.com/PaddlePaddle/PaddleSeg
。我编写了一套使用易语言 OpenCV 部署PP-HumanSeg肖像分割的程序,彻底摆脱对任何深度学习框架的依赖,onnx模型文件很小,只有5.9M。这是程序读取一张人像图片的运行结果,左于是边是原图,右边是程序运行结果图。
易语言调用实现:
1.类
窗口程序集名 | 保 留 | 保 留 | 备 注 | PP_HumanSeg, , 公开 | | | | 变量名 | 类 型 | 数组 | 备 注 | 输入宽 | 整数型 | | 输入高 | 整数型 | | 置信_阈值 | 小数型 | | DNN网络 | 网络类 | |
输入宽 = 192 输入高 = 192 置信_阈值 = 0.5 DNN网络 = 视觉_读取网络 (“C:\Users\hanyo\Desktop\PP-HumanSeg\model_float32.onnx”, , “”)变量名 | 类 型 | 静态 | 数组 | 备 注 | 图 | 多维矩阵类 | | | 斑点 | 多维矩阵类 | | | 输数数组 | 多维矩阵类 | | 0 | 输出_高 | 整数型 | | | 输出_宽 | 整数型 | | | 掩码_输出 | 多维矩阵类 | | | 分割图 | 多维矩阵类 | | | 结果图 | 多维矩阵类 | | | 行计次 | 整数型 | | | 分数 | 小数型 | | | 列计次 | 整数型 | | | BGR | 字节型 | | 0 | BGR新 | 双精度小数型 | | 3 | 视觉_调整尺寸 (输入图, 图, 尺寸2i (输入宽, 输入高 ), #插值_双线性二次, 0, 1 )图. 转换到 (图, #Cv小数型_三通道, 1 ÷ (255 × 0.5 ), -1 )斑点 = 视觉_图像前景目标 (图, 1, , , 假, 假, 5 )DNN网络. 设置输入 (斑点, “”, 1, )DNN网络. 前向计算V (输数数组, DNN网络. 获取未连接的输出层名称 ()) 输出_高 = 输数数组 [1 ]. 维度元素数 (1 )输出_宽 = 输数数组 [1 ]. 维度元素数 (2 )掩码_输出. 指针初始化 (输出_高, 输出_宽, #Cv小数型_双通道, 输数数组 [1 ]. 数据指针 ()) 视觉_调整尺寸 (掩码_输出, 分割图, 尺寸2i (输入图. 列数 (), 输入图. 行数 ()), 0, 0, 1 )结果图 = 输入图. 克隆 ()变量循环首 (0, 输入图. 行数 () - 1, 1, 行计次 )变量循环首 (0, 输入图. 列数 () - 1, 1, 列计次 )分数 = 指针到小数 (分割图. 取元素指针 (行计次, 0 ) + 列计次 × 2 × 4 )如果真 (分数 > 置信_阈值 )BGR = 输入图. 取元素8U (行计次, 列计次 )BGR新 [1 ] = BGR [1 ] × 0.5 + 1 BGR新 [2 ] = BGR [2 ] × 0.5 + 1 BGR新 [3 ] = BGR [3 ] × 0.5 + 1 结果图. 置元素V (行计次, 列计次, BGR新 )变量循环尾 ()变量循环尾 ()变量循环首 (0, 输入图. 行数 () - 1, 1, 行计次 )变量循环首 (0, 输入图. 列数 () - 1, 1, 列计次 )分数 = 指针到小数 (分割图. 取元素指针 (行计次, 0 ) (列计次 × 2 + 1 ) × 4 )如果真 (分数 > 置信_阈值 )BGR = 输入图. 取元素8U (行计次, 列计次 )BGR新 [1 ] = BGR [1 ] × 0.5 + 1 BGR新 [2 ] = (BGR [2 ] + 255 ) × 0.5 + 1 BGR新 [3 ] = BGR [3 ] × 0.5 + 1 结果图. 置元素V (行计次, 列计次, BGR新 )变量循环尾 ()变量循环尾 ()返回 (结果图 )
2.调用
变量名 | 类 型 | 静态 | 数组 | 备 注 | 使用_视频 | 逻辑型 | | | 视频 | 视频采集类 | | | 人像分割 | PP_HumanSeg | | | 输入图片 | 多维矩阵类 | | | 输出图片 | 多维矩阵类 | | | 标题 | 文本型 | | |
使用_视频 = 假 标题 = “小白鼠 PP-HumanSeg Dome”视觉_创建窗口 (标题, #窗口_标准 )如果 (使用_视频 )视频. 打开 (0, 0, )如果真 (视频. 已打开 () = 假)视觉_控制台输出 (“打不开视频。”, )返回 (-1 )判断循环首 (视频. 读 (输入图片 )) 输出图片 = 人像分割. 推理 (输入图片 )视觉_显示图像 (标题, 输出图片 )视觉_等待按键 (1 )判断循环尾 ()视觉_销毁所有窗口 ()输入图片. 从字节集加载 ( #图片4, #读图_彩色 )输出图片 = 人像分割. 推理 (输入图片 )视觉_创建窗口 (“输入”, #窗口_标准 )视觉_显示图像 (“输入”, 输入图片 )视觉_显示图像 (标题, 输出图片 )视觉_等待按键 (0 )视觉_销毁所有窗口 ()返回 (0 )
|
评分
-
查看全部评分
|