当前位置: 首页 > article >正文

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力6-识别目标形状

本章节介绍如何对目标物体进行形状识别,可识别的形状包括矩形和圆形。

创建AR会话

创建AR会话并配置为目标形状识别模式。

 
  1. AREngine_ARSession *arSession = nullptr;
  2. // 创建AR会话。
  3. HMS_AREngine_ARSession_Create(nullptr, nullptr, &arSession);
  4. AREngine_ARConfig *arConfig = nullptr;
  5. // 创建AR会话配置器。
  6. HMS_AREngine_ARConfig_Create(arSession, &arConfig);
  7. // 设置语义识别模式为目标形状识别。
  8. HMS_AREngine_ARConfig_SetSemanticMode(arSession, arConfig, ARENGINE_SEMANTIC_MODE_TARGET);
  9. // 配置器设置给AR会话。
  10. HMS_AREngine_ARSession_Configure(arSession, arConfig);

创建可跟踪对象列表

创建一个可跟踪对象列表targetList,用于存放AR Engine运行过程中检测到的所有可跟踪对象。

 
  1. AREngine_ARTrackableList *targetList = nullptr;
  2. HMS_AREngine_ARTrackableList_Create(arSession, &targetList);

获取当前环境中的可跟踪对象

调用HMS_AREngine_ARSession_GetAllTrackables函数,检测当前环境中的所有可跟踪对象,并将结果存放在targetList中。

 
  1. HMS_AREngine_ARSession_GetAllTrackables(arSession, ARENGINE_TRACKABLE_TARGET, targetList);

获取可跟踪对象数量

调用HMS_AREngine_ARTrackableList_GetSize函数获取当前可跟踪对象数量,结果存放在targetSize中。

 
  1. int32_t targetSize = 0;
  2. HMS_AREngine_ARTrackableList_GetSize(arSession, targetList, &targetSize);

当targetSize等于0时,代表当前环境中无可跟踪对象。

当targetSize等于1时,代表当前环境中仅存在1个可跟踪对象。

当targetSize大于1时,代表当前环境中存在多个可跟踪对象。

遍历并识别物体形状

  1. 当环境中存在一个或多个可跟踪对象时,依次遍历targetList中所有可跟踪对象进行目标形状识别。
     
      
    1. for (int i = 0; i < targetSize; ++i) {
    2. // 遍历可跟踪对象,进行形状识别。
    3. }
  2. 对于第i个对象,创建并获取对象实例。
     
      
    1. AREngine_ARTrackable *target = nullptr;
    2. HMS_AREngine_ARTrackableList_AcquireItem(arSession, targetList, i, &target);
  3. 获取该实例跟踪状态,当且仅当其跟踪状态为ARENGINE_TRACKING_STATE_TRACKING时,才可进行形状识别。
     
      
    1. AREngine_ARTrackingState outTrackingState;
    2. HMS_AREngine_ARTrackable_GetTrackingState(arSession, target, &outTrackingState);
    3. if (AREngine_ARTrackingState::ARENGINE_TRACKING_STATE_TRACKING != outTrackingState) {
    4. continue;
    5. }
  4. 获取该实例目标形状,识别结果存放在label中。
     
      
    1. AREngine_ARTargetShapeLabel label = ARENGINE_TARGET_SHAPE_UNKNOWN;
    2. HMS_AREngine_ARTarget_GetShapeType(arSession, reinterpret_cast<AREngine_ARTarget *>(target), &label);

    其中,AREngine_ARTargetShapeLabel为枚举类型,描述了目标物体形状。

销毁可跟踪对象列表

 
  1. HMS_AREngine_ARTrackableList_Destroy(targetList);

http://www.kler.cn/a/382743.html

相关文章:

  • TypeScript 支持的常见运算符
  • wincc中全局脚本C(c语言脚本)的研究和解密
  • loading为什么不更新
  • string模拟实现插入+删除
  • mac单独打开QT帮助文档助手
  • VS2022远程连接调试编译Linux环境下的C++代码
  • 【主机游戏】森林之子游戏介绍
  • R语言生物群落(生态)数据统计分析与绘图丨tidyverse数据清洗、多元统计分析、随机森林、回归及混合效应模型、结构方程模型等
  • vue | 自学入门,记录
  • MySQL日期时间函数大全
  • 博客搭建之路:next主题修改侧边栏icon
  • Python画笔案例-096 彩色粒子克隆动画
  • Java多态和继承(上篇)
  • MCU GD32A启动流程及各个段的初始化
  • SDL基本使用
  • 微信支付宝小程序SEO优化的四大策略
  • Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比
  • 【浪潮商城-注册安全分析报告-无验证方式导致安全隐患】
  • 【Linux-进程间通信】消息队列
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (6) - 触屏事件
  • 【极客兔兔-Web框架Gee详解】Day2 上下文Context
  • 【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方
  • Unity3D学习FPS游戏(10)子弹攻击敌人掉血(碰撞检测)
  • 【数据结构】线性表——顺序表
  • 基于Python的校园爱心帮扶管理系统
  • Python 学习完基础语法知识后,如何进一步提高?