【UE4】复杂背景人像抠图-飞浆AI-paddlepaddle深度训练模型

2023-11-16

前言:运用到Python3.7,UEC++,蓝图;实现复杂背景人物使用PaddleHub深度训练模型进行抠像后在UE中使用(纯色背景人物仅材质就可实现)使用到的训练模型:deeplabv3p_xception65_humanseg


1.准备工作:

  • 安装Python3.7或者使用Anaconda套件进行安装(python3.7对应版本如图)
  • 安装Anaconda所有选项请全勾选(即使有红字提示)
  • 使用cmd验证是否安装成功:
    python
  • 使用pip install xxx进行所需模块的安装
  • 后续如遇到错误修复注意事项:
    //如在运行过程中命令行报错,尝试使用以下几种方法在cmd中解决:
    
    //1.模块xxx缺少(ModuleNotFoundError: No module named xxx)
    pip install xxx
    
    //2.模块xxx版本错误(如错误提示:xxx>=或>或<=或<x.x.x)
    pip install xxx>=x.x.x
    
    //3.模块xxx需要更新
    pip install xxx --upgrade

    2.编写py,bat,vbs代码并解决后续错误:

  • 1.py(C:/imgcut/1.py):

#!/usr/bin/env python
# coding: utf-8

#请使用ipython运行:ipython 1.py IMGname

#安装 paddlehub 库
get_ipython().system('pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple')
# 安装deeplabv3p_xception65_humanseg模型
get_ipython().system('hub install deeplabv3p_xception65_humanseg==1.0.0')

import sys
import paddlehub as hub
import matplotlib.image as mpimg
get_ipython().run_line_magic('matplotlib', 'inline')

module = hub.Module(name="deeplabv3p_xception65_humanseg")#预加载图像分割模型
test_img_path = ["./" + str(sys.argv[1])]#["./t6.png"] #传入图片名
input_dict = {"image": test_img_path}

# 执行模型分割方法展示结果
results = module.segmentation(data=input_dict)#根据图像分割模型对jpg进行分割
print(results)
  • run.bat(C:/imgcut/run.bat):

cd /d C:/imgcut/&&ipython 1.py t10.png
  • Run.vbs(C:/imgcut/Run.vbs)://便于UE中调用后台运行

    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run "C:\imgCut\Run.bat", 0,true
    

    此时cmd运行bat中的命令会报错,以下开始解决问题:

  1. pip install ipython

  安装好ipython,且根据warnning提示路径,复制Scripts文件夹,配置环境变量path新增ipython文件夹路径 

 2.提示缺少模块:

pip install 模块名

(安装命令如:pip install paddle)

(此时再报错如:No Moudle named 'common',请逐步进行安装所需的模块,再执行安装paddle模块,以此重复)

(如提示缺少 paddle.fluid 模块请执行: pip install paddlepaddle)
(如提示缺少 git 模块请执行: pip install gitpython)

 3.提示DLL load failed:找不到指定的模块。

此处提示导入core_avx失败:
ImportError: DLL load failed: 找不到指定的模块。
Error: Can not import avx core while this file exists: C:\Users\666\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\paddle\fluid\core_avx.pyd
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)

--进入python37安装目录:
复制Python37\site-packages\paddle\libs中的所有Dll文件
粘贴到:Python37\site-packages\paddle\fluid文件夹 

 4.错误提示JSONDecodeError: Expecting value: line 1 column 1 (char 0):

手动import paddlehub发现失败,是因为paddlepaddle并没有安装正确

So重新安装anaconda3,使用pip再次安装paddlepaddle==2.2.0


安装paddlepaddle:
1、手动下载whl:
https://mirror.baidu.com/pypi/packages/a1/c2/7809f9f170232611855ac857fbbc8bec26d63858e0ec1634afed6d2d931c/paddlepaddle_gpu-2.3.1-cp37-cp37m-win_amd64.whl
2、打开次文件进行安装

(如遇到下载whl文件失败时都可如此手动进行下载安装)

5.下载某个模块后安装仍然失败

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn --user 加你想要下载的模块

6.安装paddlehub模块时失败

错误为某些模块版本不兼容,重新安装提示的版本模块带--upgrade,拒绝访问加上参数--user即可:

如:ERROR:huggingface-hub 0.8.1 has requirement packaging>=20.9,butxxxxxxxxxxx

解决:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn --user --upgrade packaging>=20.9

解决所有错误问题后运行测试成功,图片输出到humanseg_output文件夹:

 3.创建UEC++项目并编写代码及控件蓝图:

  • 项目Build.cs中添加模块"ImageWrapper":
  • 创建新的蓝图函数库PYBPF类继承自BlueprintLibrary

PYBPF.h中:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Engine/Texture2D.h"
#include "PYBPF.generated.h"

/**
 * 
 */
UCLASS()
class NEWOPENCV_API UPYBPF : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	

public:
	UFUNCTION(BlueprintCallable,Category = "BPF")//处理图片
	static void CutIMG(FString batCommand,bool& cuted);

	UFUNCTION(BlueprintCallable)//获取图片
	static UTexture2D* GetIMG(FString path, bool& IsValid, int& Width, int& Height);
	
};

PYBPF.cpp中:

// Fill out your copyright notice in the Description page of Project Settings.


#include "PYBPF.h"
#include "Runtime/Core/Public/HAL/FileManager.h"
#include "Runtime/Core/Public/Misc/FileHelper.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"
#include "Kismet/KismetStringLibrary.h"

const FString vbsPath = FString("C:/imgcut/Run.vbs");
const FString batPath = FString("C:/imgcut/run.bat");

void UPYBPF::CutIMG(FString batCommand, bool& cuted)
{
	FString unuse,pngname;
	UKismetStringLibrary::Split(batCommand," ",unuse, pngname,ESearchCase::IgnoreCase,ESearchDir::FromEnd);
	UKismetStringLibrary::Split(pngname,".", pngname, unuse,ESearchCase::IgnoreCase,ESearchDir::FromEnd);
	FString imgpath = "C:/imgcut/humanseg_output/"+ pngname + ".png";
	if (FPaths::FileExists(imgpath))
	{
		cuted = true;
		return;
	}
	cuted = false;
	//写入文本到bat文件
	FFileHelper::SaveStringToFile(batCommand, *batPath);
	
	//等待0.2秒
	FPlatformProcess::Sleep(0.2f);
	//执行vbs文件
	//FString cmd = TEXT("wscript.exe ");
	//FPlatformProcess::CreateProc(*cmd,*vbsPath, true, false, false, nullptr, 0, nullptr, nullptr);
	FPlatformProcess::LaunchFileInDefaultExternalApplication(*vbsPath);
}

UTexture2D* UPYBPF::GetIMG(FString path,bool& IsValid,int& Width,int& Height)
{
	IsValid = false;
	UTexture2D* LoadedT2D = NULL;

	IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
	TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);

	TArray<uint8> RawFileData;
	FFileHelper::LoadFileToArray(RawFileData, *path);
	
	if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))
	{
		TArray<uint8> UncompressedBGRA;
		if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
		{
			LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);
			
			Width = ImageWrapper->GetWidth();
			Height = ImageWrapper->GetHeight();

			void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
			FMemory::Memcpy(TextureData, UncompressedBGRA.GetData(), UncompressedBGRA.Num());
			LoadedT2D->PlatformData->Mips[0].BulkData.Unlock();

			LoadedT2D->UpdateResource();
			if (LoadedT2D == nullptr)
			{return NULL;}
		}
	}
	// Success!
	IsValid = true;
	return LoadedT2D;
}
  • 编译打开项目;创建新的用户控件:

  •  创建空白关卡;编辑关卡蓝图,开始运行时创建控件到视口:

 空白地图可自己添加个背景

 4.运行UE项目输入指定图片处理效果:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【UE4】复杂背景人像抠图-飞浆AI-paddlepaddle深度训练模型 的相关文章

  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重

随机推荐

  • VMware上pfsense开源防火墙的下载、安装、简单配置

    文章目录 1 pfsense概述 1 1 官方描述 1 2 个人描述 2 pfsense下载 2 1 官网下载 3 pfsense安装 3 1 官网手册 3 2 安装步骤 4 pfsense配置 4 1 默认账号密码 4 2 初始化配置 4
  • PyTorch学习笔记(三)PyTorch回归问题——分类问题

    PyTorch学习笔记 三 PyTorch回归问题 分类问题 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 一 pandas是什么 示例 pandas 是基于NumPy 的一种工具 该工具是为了
  • 性能测试的基本流程

    1 性能测试需求分析 项目经理 业务 架构专家 产品经理 高级性能测试工程师 开发经理 2 性能测试计划 高级性能测试工程师 项目经理 架构师 产品经理 3 性能测试准备 性能测试工程师 外部支持 网络工程师 系统管理员 测试服务器和被测试
  • 记录——企业课Python-科学计算(只学了Numpy、pandas和matplotlib.pyplot中的一些基础)

    一学期一次的企业课 大好的周末在机房度过 三个周日一个周六 感觉听的讲起来还不如自己看CSDN 顺带吐槽一下这个老师的评分 自己敲了一天整天最后得分82 同学复制粘贴过去87 更有甚者32学时课程结束 复制过来的代码连环境都没有都无法运行居
  • 微云存储空间多大_qq微云内存多大

    QQ微云容量最大多少 根据QQ微云官方的说法 可以达到100G 微云网盘怎么扩容 扩容方法可分为2种 一是登录QQ微云iPad版等获得额外的8G空间 二是参加每天签到活动获得额外的容量 下面就由学习啦小编为大家整理的相关信息 供大家参考 一
  • cmake构建多目录项目

    1 项目工程文件目录结构 2 源码 2 1 hello include hello h ifndef HELLOWORLD HELLO H define HELLOWORLD HELLO H extern void hello void e
  • 【Linux】【网络】应用层协议:HTTPS

    文章目录 HTTPS 1 加密方式 2 数据摘要 数据指纹 3 数字签名 HTTPS 的 工作过程 HTTPS 工作过程中的密钥 HTTP HTTPS HTTP HyperText Transfer Protocol 是客户端浏览器或其他程
  • 检测跟踪分割网络笔记

    模型247 97m GitHub SysCV pcan Prototypical Cross Attention Networks for Multiple Object Tracking and Segmentation NeurIPS
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Java-线程通信

    Java 线程通信 1 线程通信中的三个方法 wait 一旦执行此方式 当前线程就进入阻塞状态 并释放线程锁 notify 一旦执行此方法 就会唤醒被wait的一个线程 如果有多个线程被wait 就唤醒优先级高的那个线程 notifyAll
  • java swing结构,Java Swing的层次结构理解

    一 什么是Java Swing Swing 是一个用于开发Java图形界面应用程序的开发工具包 它是以抽象窗口工具包 AWT Abstract Window Toolkit 为基础 使跨平台应用程序可以使用任何可插拔的外观风格 通常把AWT
  • oracle 的 start with connect by 用法 .

    分类 oracle java 2012 11 27 17 38 489人阅读 评论 0 收藏 举报 目录 ORACLE Connect ByLevelStart With的使用Hierarchical query 层次查询 connect
  • 一张图解释什么是遗传算法_遗传算法总结(#看了就能懂和用系列#)

    Word害我重写 顺便重新整理下思路 背景 写论文时用到遗传算法 花了近一周时间 还算理解了算法以及能够进行基础的编程实现 保持谦虚 说明 具体的实现没敢细讲 主要是原理的方法上的介绍 讲解都算不上 先说说算法学习 个人觉得首先需要了解这个
  • SpringBoot--Eureka

    SpringBoot Eureka 项目一 使用Eureka注册服务 任务一 搭建Maven父工程 任务二 搭建服务端工程 任务三 搭建客户端工程 项目二 实现服务间的调用 任务一 搭建订单服务工程 任务二 编写用户服务功能 任务三 启动服
  • buuctf-loveSQL

    进入界面 没有什么明显的提示 上次有个一样界面的题目 结果直接万能密码1 1出来了 这次再试试 啥 简单的我有点不相信 睿智的我一下子就觉得不对经 去尝试一下MD5 就知道 算了 接着找吧 看题目名字 lovesql 估计还是注入 只能把目
  • lol 那个服务器最稳定,lol哪个区的人多,哪个区的技术最好?

    每日科技网 一直都有 一区的螃蟹能走位单杀打野 郊区王者打不过一区钻石 的搞笑言论 其实这个言论有一定的是事实依据 虽然有一点夸张 说的神乎其神的 电信一区艾欧尼亚在LOL中的地位是大家有目共睹的 而之所以会出现那样的畸形观点 主要呢有以下
  • js获取昨天/明天、本周/上周/下周、本月/上月、本季度/上季度、上一年的开始/结束日期

    一 获取昨天 明天的日期 该方法参数如果为true 则获取昨天日期 反之为明天日期 默认为true function getYestDayOrNextDay flag true 获取当前日期 const today new Date 计算前
  • 代码检视(一)

    一 意义 最大的意义 通过代码检视 发现问题 解决问题 并且能够有效地提升自己 最终达到写出优质代码 提高代码质量 成功做好项目 二 基本要求 一 逻辑一定要正确 逻辑错误非常容易引起BUG 二 避免一些没必要的代码 能用一句解决的就不要用
  • XMLSocket

    XMLSocket 协议是flash的长连接消息协议 XMLSocket协议规则 每个 XML 消息都是一个完整的XML文档 一定要以 0 结束 html5 websocket是长连接传输的是精简的http报文 XMLSocket conn
  • 【UE4】复杂背景人像抠图-飞浆AI-paddlepaddle深度训练模型

    前言 运用到Python3 7 UEC 蓝图 实现复杂背景人物使用PaddleHub深度训练模型进行抠像后在UE中使用 纯色背景人物仅材质就可实现 使用到的训练模型 deeplabv3p xception65 humanseg 1 准备工作