如何让虚拟角色自然融入现实?
创始人
2025-05-29 07:09:00

随着AR的发展,虚拟角色被广泛应用在游戏、直播、社交等App中。例如在直播App里,商家可以自由打造虚拟主播的形象,通过AR算法可以让虚拟形象在介绍时做到不遮挡实物商品,提升直播真实性和趣味性。那么,如何让虚拟角色自然融入现实,实现与用户的真实交互呢?

华为HMS Core AR Engine提供单人或双人身体轮廓的识别和跟踪能力,实时输出人体轮廓Mask信息和对应的骨骼点信息。其中人体Mask能力可以识别和跟踪当前画面人体所在区域,支持多人识别,识别率达90%,并提供该区域的深度信息。

通过人体轮廓跟踪能力,开发者们可利用人体的轮廓Mask信息对虚拟物体和场景进行遮蔽。比如在AR拍照时更换虚拟背景、让虚拟玩偶躲到人身后等,都可使用Mask能力来实现更为自然的遮挡效果,这可进一步提升AR应用的真实感和观看体验。

Demo演示

开发步骤

开发准备

1 .注册成为开发者

在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法请参见帐号注册认证。

2 .创建应用

参见创建项目和在项目下创建应用完成应用的创建,配置如下:

“选择平台”:选择“Android”。

“支持设备”:选择“手机”。

“应用分类”:选择“应用”或“游戏”。

3 .集成AR Engine SDK

华为提供了Maven仓集成方式的AR Engine SDK包,在开始开发前,需要将AR Engine SDK集成到您的开发环境中。

4 .配置AR Engine SDK的Maven仓地址

Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle插件版本,选择对应的配置过程。

5 .添加编译依赖
  1. 打开项目中应用级的“build.gradle”文件。

  2. 在“dependencies”中添加如下编译依赖。

dependencies {implementation 'com.huawei.hms:arenginesdk:{version}'
}
  1. 重新打开修改完的build.gradle文件,右上方出现Sync Now链接。点击“Sync Now”等待同步完成。

应用开发

运行前验证

检查当前设备是否安装了AR Engine,若已经安装则正常运行,若没有安装,App应采用合适的方式提醒用户安装AR Engine,如主动跳转应用市场,请求安装AR Engine。具体实现代码如下(详细请参见示例代码)。

boolean isInstallArEngineApk = AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk) {// ConnectAppMarketActivity.class为跳转应用市场的Activity。startActivity(new Intent(this, com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));isRemindInstall = true;
}
  1. 创建BodyActivity用来展示AR Engine识别能力,展示身体骨骼,输出人体特征。
Public class BodyActivity extends BaseActivity{
Private BodyRendererManager mBodyRendererManager;
Protected void onCreate(){//初始化surfaceViewmSurfaceView = findViewById();//保持OpenGL ES运行上下文。mSurfaceView.setPreserveEGLContextOnPause(true);//设置OpenGLES版本。mSurfaceView.setEGLContextClientVersion(2);//设置EGL配置选择器,包括颜色缓冲区的位数和深度位数。mSurfaceView.setEGLConfigChooser(……);mBodyRendererManager = new BodyRendererManager(this);mSurfaceView.setRenderer(mBodyRendererManager);
mSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);}
Protected void onResume(){//初始化ARSession,用于管理AR Engine的整个运行状态
If(mArSession == null){
mArSession = new ARSession(this.getApplicationContext());
mArConfigBase = new ARBodyTrackingConfig(mArSession);
mArConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK);
mArConfigBase.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS
mArSession.configure(mArConfigBase);}//给setBodyMask传入需要的参数
mBodyRendererManager.setBodyMask(((mArConfigBase.getEnableItem() & ARConfigBase.ENABLE_MASK) != 0) && mIsBodyMaskEnable);
sessionResume(mBodyRendererManager);}
}
  1. 创建BodyRendererManager, 此类渲染AR Engine获取的个人数据。
Public class BodyRendererManager extends BaseRendererManager{Public void drawFrame(){//获取所有指定类型的可跟踪对像集合
Collection bodies = mSession.getAllTrackables(ARBody.class);for (ARBody body : bodies) {
if (body.getTrackingState() != ARTrackable.TrackingState.TRACKING){continue;}
mBody = body;
hasBodyTracking = true;}//更新屏幕上显示的身体识别信息。
StringBuilder sb = new StringBuilder();updateMessageData(sb, mBody);
Size textureSize = mSession.getCameraConfig().getTextureDimensions();
if (mIsWithMaskData && hasBodyTracking && mBackgroundDisplay instanceof BodyMaskDisplay) {((BodyMaskDisplay) mBackgroundDisplay).onDrawFrame(mArFrame, mBody.getMaskConfidence(),textureSize.getWidth(), textureSize.getHeight());}//在屏幕上显示更新后的身体信息。
mTextDisplay.onDrawFrame(sb.toString());
for (BodyRelatedDisplay bodyRelatedDisplay : mBodyRelatedDisplays) {bodyRelatedDisplay.onDrawFrame(bodies, mProjectionMatrix);} catch (ArDemoRuntimeException e) {LogUtil.error(TAG, "Exception on the ArDemoRuntimeException!");} catch (ARFatalException | IllegalArgumentException | ARDeadlineExceededException |ARUnavailableServiceApkTooOldException t) {Log(…);}
}
//更新手势相关数据以进行显示。
Private void updateMessageData(){if (body == null) {return;}float fpsResult = doFpsCalculate();sb.append("FPS=").append(fpsResult).append(System.lineSeparator());int bodyAction = body.getBodyAction();
sb.append("bodyAction=").append(bodyAction).append(System.lineSeparator());
}
}
  1. 自定义相机预览类,用于实现基于一定置信度的人体绘制。
Public class BodyMaskDisplay implements BaseBackGroundDisplay{}
  1. 获取骨架数据并将其传递给OpenGL ES,OpenGL ES将渲染数据并在屏幕上显示。
public class BodySkeletonDisplay implements BodyRelatedDisplay {
  1. 获取骨架点连接数据,并将其传递给OpenGL ES以便在屏幕上渲染。
public class BodySkeletonLineDisplay implements BodyRelatedDisplay {}

其他类内容请参考示例代码集成。

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

相关内容

热门资讯

今年最大黄金杀猪盘,老板跑路卷... 来源|易简财经作者 | 陈璐瑶6月3日,据报道,从杭州上城区分局经侦队获悉,浙江永坤控股有限公司(简...
原创 一... 前言: 5.12日一大早上,中国有两个好消息振奋人心! 第一个就是中国和美国在瑞士会谈的很有成效...
原创 你... 最近中国明确警告韩国,如果再把从中国进口的稀土加工成产品卖给美国军工企业及受到中国制裁的企业,那中国...
新消费周报 | 泡泡玛特市值超... 《CBNData新消费周报》精选本周新消费领域最新动态,公司头条、消费风向、营销动态、可持续消费一文...
事关人民币国际化,中国银行这份... 文/夏宾人民币国际化这件大事近来好消息频传。刚刚过去的5月份,中国央行先后与巴西、印度尼西亚央行签署...
原创 不... 据环球时报报道,经白宫证实,美国“政府效率部”负责人马斯克已在近日晚开始办理离职,整个流程快速且毫无...
金融政策协同发力,破解小微企业... 中国商报(记者 马文博)一直以来,小微企业都是经济新动能培育的重要源泉,在推动经济增长、促进就业增加...
“应降息100个基点”,特朗普... 中国商报(记者 赵熠如)6月7日上午,2025年全国高考开考。首场语文科目考试结束后,作文试题受到广...
软件开发板块三大牛股:路桥信息... 路桥信息的股价近日大幅上涨本报(chinatimes.net.cn)记者叶青 见习记者 胡振明 北京...
新集能源股东新集煤电2120万... 雷达财经 文|冯秀语 编|李亦辉 6月6日,新集能源(601918)发布公告称,其持股5%以上股东安...
饶毅再发文批麦角硫因 科伦永年... 转自:贝壳财经 新京报贝壳财经讯(记者丁爽)6月6日,围绕“麦角硫因是‘假药’”观点,饶毅、科伦药业...
基金行业的“老谢” 基金行业的... 有些事情,来得总比预期得快。尽管很早就知道交银施罗德基金总经理谢卫今年要退休了,但看到他辞任总经理的...
黄牌警告撤销了,国资却笑不出来... *ST威帝申请撤销黄牌获得批准,6月4日起恢复为威帝股份,这本来是件值得高兴的事,不过,作为实控人的...
恒立液压大宗交易成交213.4... 恒立液压6月6日大宗交易平台出现一笔成交,成交量3.00万股,成交金额213.45万元,大宗交易成交...
鸿蒙版微信新功能爆棚,鸿蒙生态... 鸿蒙版微信,这款自2025年初在鸿蒙系统上线的国民级应用,每一次更新都牵动着广大用户的心弦。自1月9...
天风证券定增获证监会同意批复 ... 6月6日,天风证券(601162)发布公告称,收到中国证券监督管理委员会出具的《关于同意天风证券股份...
江苏定了!提高退休人员养老金,... 江苏定了!2025年继续提高退休人员养老金,农民基础养老金也要涨。日前,江苏省政府发布了《江苏省实施...
被说成是“影视公司”,众擎机器... 红星资本局6月7日消息,“前段时间我们和宇树被外界定义成‘影视公司’,没关系我觉得挺开心,影视也是行...
商务部:中欧双方电动汽车案价格... 红星资本局6月7日消息,今日,商务部新闻发言人就王文涛部长赴法国期间与欧盟委员会贸易和经济安全委员谢...
每周股票复盘:七彩化学(300... 截至2025年6月6日收盘,七彩化学(300758)报收于15.41元,较上周的15.46元下跌0....
独立管理的产品全部正收益,他是... 导读:在访谈博时基金田俊维之前,我们已经对他做了多年的跟踪。田俊维2024和2025连续两年入围我们...
上市金融科技公司一季度业绩飘红... 上市金融科技公司近日陆续交出一季度成绩单,业绩整体呈现向好态势。在政策驱动消费回暖的背景下,今年一季...
“吃不动”的桃李面包 吃不动的... 如何让消费者“吃得动”?“面包第一股”的增长剧本,为何正在急转直下?作为中国食品工业化的代表性样本,...
黄金,猛跌!机构:可能面临较大... 当地时间6月6日,因市场降低对美联储今年降息的押注,美国国债收益率和美元上涨, 国际金价下跌,纽约商...
中国海外发展:前5月销售额90... 6月6日,中国海外发展(00688.HK)发布未经审核运营数据,5月,中国海外系列公司的销售金额约2...
章俊:稳定币走出丛林 章俊近况... 章俊 系中国银河证券董事总经理、首席经济学家兼研究院院长、中国首席经济学家论坛理事核心观点加密货币里...
沈阳18栋别墅400万起拍,被... 红星资本局6月7日消息,近日,沈阳市苏家屯区的18栋别墅在阿里资产·司法页面进行拍卖,起拍价为399...
港口区“政银联动”创新年报服务... 为切实解决市场主体年报填报难题,近期,防城港市港口区市场监督管理局联合桂林银行开展“暖心服务进商户”...
上交所将推动上市公司加大分红力... 新华社北京6月7日电 《中国证券报》7日刊发文章《上交所将推动上市公司加大分红力度》。文章称,6月6...
搭乘脑机接口热点,股价涨停!炒... 本报(chinatimes.net.cn)记者张斯文 于娜 北京报道近日,马斯克的脑机接口公司Neu...