当前位置: 首页 > 后端技术 > Java

眼镜选款新方法,用AR+Scene技术实现3D虚拟试戴

时间:2023-04-02 09:33:31 Java

选镜新方式,利用AR+Scene技术实现3D虚拟试戴。疫情让人们更加习惯使用电商购物,但也对传统的网购模式产生了厌倦。电商市场急需模式转变,刷新老用户,提供便利的同时,提升他们的购物欲望。同时,还可以凭借爆点吸引新用户加入。基于这样的背景,我们利用HMSCore提供的智能图像处理能力,识别用户的面部和身体特征,然后结合展示方式,让用户直接在手机上体验产品的佩戴效果,提供了一个更便捷的购物体验。场景在淘宝、京东、天猫等购物APP,以及小红书、得物、值得买的好物分享APP。可以在AR中体验产品,让消费者感受到产品的效果,也可以降低后续的退货率。.先看效果打开app,点击图片可以查看产品的3D模型,可以旋转缩放。准备开发,配置华为Maven仓库地址。打开AndroidStudio项目中的build.gradle文件。在“buildscript>repositories”和“allprojects>repositories”添加SDKMaven仓库地址:buildscript{repositories{...maven{url'http://developer.huawei.com/repo/'}}}allprojects{repositories{...maven{url'http://developer.huawei.com/repo/'}}}添加编译SDK依赖打开应用级“build.gradle”文件在dependencies中添加图形引擎的SDK包,使用Full-SDK,以及AREngine依赖的SDK包{….implementation'com.huawei.scenekit:full-sdk:5.0.2.302'implementation'com.huawei.hms:arenginesdk:2.13.0.4'}以上步骤请参考开发者网站的应用开发介绍。在AndroidManifest.xml中添加权限,打开主AndroidManifest.xml文件中,在Development前添加camera权限步骤MainActivity在MainActivity的布局配置文件中配置添加两个按钮,将其中一个的背景设置为产品的预览图,并添加文字“Tryiton!”另一方面引导用户试穿。<按钮android:layout_width="260dp"android:layout_height="160dp"android:background="@drawable/sunglasses"android:onClick="onBtnShowProduct"/><按钮android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="试试吧!android:textAllCaps="false"android:textSize="24sp"android:onClick="onBtnTryProductOn"/>点击onBtnShowProduct按钮,会加载产品的3D模型,点击onBtnTryProductOn,就会进入AR试玩-界面上。产品3D模型展示1.创建一个SceneSampleView,继承自SceneViewpublicclassSceneSampleViewextendsSceneView{publicSc??eneSampleView(Contextcontext){super(context);}publicSc??eneSampleView(Contextcontext,AttributeSetattributeSet){super(context,attributeSet);}}重写surfaceCreated,完成SceneView的创建和初始化。loadScene加载要渲染和显示的模型文件。目前支持glTF和glb格式材质的渲染。loadSkyBox、loadSpecularEnvTexture、loadDiffuseEnvTexture分别进行天空盒贴图、镜面反射贴图、漫反射贴图。加载,目前支持cubemap格式的dds文件。加载的材质存放在src->main->assets->SceneView文件夹中。@OverridepublicvoidsurfaceCreated(SurfaceHolderholder){super.surfaceCreated(holder);//加载渲染材质loadScene("SceneView/sunglasses.glb");//调用loadSkyBox加载天空盒纹理纹理材质loadSkyBox("SceneView/skyboxTexture.dds");//调用loadSpecularEnvTexture加载环境光反射贴图loadSpecularEnvTexture("SceneView/specularEnvTexture.dds");//调用loadDiffuseEnvTexture加载环境光漫反射贴图loadDiffuseEnvTexture("SceneView/diffuseEnvTexture.dds");}2.新建一个SceneViewActivity,继承自Activity,其中setContentView是通过onCreate方法调用的,创建的SampleView是通过传入布局文件中的xml标签,publicclassSceneViewActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_sample);}}布局文件中的SampleView创建为3。在MainActivity中新建一个onBtnShowProduct,当点击对应的按钮时,会调用SceneViewActivity,加载产品的3D模型,渲染,然后展示publicvoidonBtnShowProduct(Viewview){startActivity(newIntent(this,SceneViewActivity.class));}提供的人脸识别产品AR试穿展示HMSCore、图像渲染和AR展示能力,轻松实现产品AR试穿展示。1、创建一个FaceViewActivity,继承自Activity,并创建对应的布局文件。在layout中创建face_view显示试穿效果:sdk_type="AR_ENGINE">同时创建一个switch,比较佩戴和不佩戴的区别2.重写FaceViewActivity中的onCreate方法获取FaceView公共类FaceViewActivityextendsActivity{privateFaceViewmFaceView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_face_view);mFaceView=findViewById(R.id.face_view);}}3.创建switch开关的监听方法。打开开关后,使用loadAsset方法加载产品的3D模型。LandmarkType可以选择人脸的识别位置mSwitch.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){mFaceView.clearResource();if(isChecked){//加载素材。intindex=mFaceView.loadAsset("FaceView/sunglasses.glb",LandmarkType.TIP_OF_NOSE);}}});模型的大小和位置可以通过setInitialPose进行调整,创建position,rotation,scale数组,将要调整的值传入finalfloat[]position={0.0f,0.0f,-0.15f};finalfloat[]旋转={0.0f,0.0f,0.0f,0.0f};finalfloat[]scale={2.0f,2.0f,0.3f};在loadAsset语句下面添加mFaceView.setInitialPose(索引,位置,比例,旋转);4.在MainActivity中新建onBtnTryProductOn,点击按钮时调用FaceViewActivity让用户查看AR试穿效果publicvoidonBtnTryProductOn(Viewview){if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.CAMERA},FACE_VIEW_REQUEST_CODE);}else{startActivity(newIntent(this,FaceViewActivity.class));}}access从华为开发者联盟官网获取开发指导文档。华为HMSCore官方论坛AREngine开源仓库链接:GitHub和Gitee解决集成问题欢迎关注StackOverflow,了解HMSCore最新技术资讯~