AR Engine毫秒級平面檢測,帶來更準確的呈現效果

来源:https://www.cnblogs.com/hmscore/archive/2023/02/06/17095325.html
-Advertisement-
Play Games

近年來,AR版塊成為時下大熱,這是一種將現實環境中不存在的虛擬物體融合到真實環境里的技術,用戶藉助顯示設備可以擁有真實的感官體驗。AR的應用場景十分廣泛,涉及娛樂、社交、廣告、購物、教育等領域:AR可以讓游戲更具互動性;商品通過AR展示更真實;使用AR進行教育教學讓抽象事物更形象等,可以說AR技術已 ...


近年來,AR版塊成為時下大熱,這是一種將現實環境中不存在的虛擬物體融合到真實環境里的技術,用戶藉助顯示設備可以擁有真實的感官體驗。AR的應用場景十分廣泛,涉及娛樂、社交、廣告、購物、教育等領域:AR可以讓游戲更具互動性;商品通過AR展示更真實;使用AR進行教育教學讓抽象事物更形象等,可以說AR技術已經滲透人們生活的方方面面。

為了讓人們產生強烈的視覺真實感,AR首先要解決的問題就是如何將虛擬對象準確地融合到現實世界中,即讓虛擬對象以正確的姿態顯示在真實場景的正確位置上。一些AR方案完成環境識別與攝像機位姿計算之後,沒有進行平面檢測就直接疊加虛擬對象顯示,導致虛擬對象與真實環境沒有很好的貼合度,用戶容易產生視覺錯位,影響虛擬對象在現實中的呈現效果。因此,如何在不同的真實環境中準確檢測出水平或垂直平面,與放置虛擬對象位置的平面保持一致,是用戶與AR進行交互的重要一步。

華為HMS Core AR Engine跟蹤設備周圍的光照、平面、圖像、物體、環境錶面等環境信息,輔助開發者們的應用實現虛擬物體以場景化的方式逼真地融入現實物理世界。其中平面檢測能力可識別到水平和垂直平面(地面或牆面)上的成群特征點,並可識別到平面的邊界,開發者們的應用可使用這些平面來放置需要的虛擬物體。

Demo

功能特點

支持識別水平平面、垂直平面識別

準確度2.5cm@1m

識別正常紋理速度<1s

支持多邊形擬合和平面合併

開發步驟

開發環境要求:

JDK 1.8.211及以上。

安裝Android Studio 3.0及以上:

minSdkVersion 26及以上

targetSdkVersion 29(推薦)

compileSdkVersion 29(推薦)

Gradle 6.1.1及以上(推薦)

在華為終端設備上的應用市場下載AR Engine服務端APK(需在華為應用市場,搜索“華為AR Engine”)並安裝到終端設備。

測試應用的設備:參見AREngine特性軟硬體依賴表中環境Mesh支持設備列表。如果同時使用多個HMS Core的服務,則需要使用各個Kit對應的最大值。

開發準備

  1. 在開發應用前需要在華為開發者聯盟網站上註冊成為開發者並完成實名認證,具體方法請參見帳號註冊認證

  2. 華為提供了Maven倉集成方式的AR Engine SDK包,在開始開發前,需要將AR Engine SDK集成到您的開發環境中。

  3. Android Studio的代碼庫配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。請根據您當前的Gradle插件版本,選擇對應的配置過程。

  4. 以7.0為例:

打開Android Studio項目級“build.gradle”文件,添加Maven代碼庫。

在“buildscript > repositories”中配置HMS Core SDK的Maven倉地址。

buildscript {
    	repositories {
        	google()
        	jcenter()
        	maven {url "https://developer.huawei.com/repo/" }
    	}
}

打開項目級“settings.gradle”文件,配置HMS Core SDK的Maven倉地址

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    		repositories {
       			 repositories {
           			 	google()
            			jcenter()
            			maven {url "https://developer.huawei.com/repo/" }
       			 }
   			 }
}
  1. 添加依賴 在“dependencies”中添加如下編譯依賴:
dependencies {
    implementation 'com.huawei.hms:arenginesdk:{version}
}

開發步驟

  1. 首先創建WorldActivity,這個Activity介紹如何使用HUAWEI AR Engine的世界AR場景。
Public class WorldActivity extends BaseActivity{
Protected void onCreate(Bundle saveInstanceState){
	 初始化DisplayRotationManager
	 mDisplayRotationManager = new DisplayRotationManager(this);
	 初始化WorldRenderManager
     mWorldRenderManager = new WorldRenderManager(this,this);
}
	//寫一個手勢處理器
	Private void initGestureDetector(){
mGestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener()){
		}
	}
	mSurfaceView.setOnTouchListener(new View.OnTouchListener()){
		public Boolean onTouch(View v,MotionEvent event){
			return mGestureDetector.onTouchEvent(event);
		}
	}
	//在onResume生命周期中創建ARWorldTrackingConfig
	protected void onResume(){
		mArSession = new ARSession(this.getApplicationContext());
		mConfig = new ARWorldTrackingConfig(mArSession);
		…
}
//創建刷新配置類
private void refreshConfig(int lightingMode){
	//設置對焦
	mConfig.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS);
	mArSession.configure(mConfig);
}
}
  1. 創建WorldRenderManager類,該類提供與世界場景相關的渲染管理,包括標簽渲染和虛擬對象渲染管理。
public class WorldRenderManager implements GLSurfaceView.Renderr{
	//需要創建一個繪製框架的類
	Public void onDrawFrame(GL10 unused){
		//設置可用於存儲相機預覽流數據的openGL textureId
mSession.setCameraTextureName(mTextureDisplay.getExternalTextureId());
//更新AR Engine的計算結果,應用應在需要獲取最新的數據時調用此介面
ARFrame arFrame = mSession.update();
//獲取當前幀的相機參數。
ARCamera arCamera = arFrame.getCamera();
//返回一個坐標運算相關的投影矩陣,可用於相機坐標繫到裁剪坐標系轉換。
arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);
Session.getAllTrackables(ARPlane.class)
…..
	}
}
  1. 創建VirtualObject類,該類提供虛擬對象的屬性以及與虛擬對象渲染相關的必要方法。
Public class VirtualObject{
}
  1. 創建ObjectDisplay類,根據指定的參數繪製虛擬對象。
Public class ObjectDisplay{
}

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關註我們,第一時間瞭解 HMS Core 最新技術資訊~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 寫在前面 之前的文章總結了使用管道進行進程間通信的方法,除了pipe和fifo,Linux內核還為我們提供了其他更高級的IPC方式,包括共用記憶體,消息隊列,信號量等,本篇文章會通過一個具有完整邏輯功能的示例說明如何使用這些IPC方法。畢竟單純地查手冊,寫代碼...周而複始,這個過程還是比較枯燥 ...
  • 運行環境 OS:Windows 10 64位 前期準備 檢查是否刪除navicat歷史文件夾 使用工具everything搜索關鍵詞,將文件刪除 檢查註冊表是否刪除navicat 按鍵【win+R】輸入regedit打開註冊表,刪除【HKEY_CURRENT_USER->SOFTWARE】的【Pre ...
  • AggregatingMergeTree引擎繼承自 MergeTree,並改變了數據片段的合併邏輯。ClickHouse會將一個數據片段內所有具有相同主鍵(準確的說是排序鍵)的行替換成一行,這一行會存儲一系列聚合函數的狀態。 可以使用AggregatingMergeTree表來做增量數據的聚合統計, ...
  • 插入數據的多種方式 直接通過insert語句插入 語法: INSERT [INTO] tbl_name [(col_name [, col_name] ...)] { {VALUES | VALUE} (value_list) [, (value_list)] ... } 示例: # 插入數據 第一 ...
  • 一:背景 1. 講故事 在 SQLSERVER 的眾多阻塞場景中,有不小的一部分是由於 PFS 頁上的 閂鎖 等待造成的,畢竟寫頁操作一定是要串列化的,在面對 閂鎖(PAGELATCH_X) 等待問題上,一定要搞明白 PFS 頁到底是什麼? 這篇就來好好聊一聊。 二:PFS 詳解 1. 什麼是 PF ...
  • MySQL執行流程 select語句執行流程 增刪改語句執行流程 update語句的整體執行流程和select語句是一樣的。只是少了緩存的那一步驟。 mysql想完成數據的修改,會先從存儲引擎層讀取數據,把數據讀取到服務層進行數據的修改,再通過存儲引擎層把數據更新到資料庫中。 mysql每次讀取數據 ...
  • 閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。 摘要: GaussDB(DWS)支持根據業務系統的不同使用需求,對膨脹的數據進行冷熱分級管理,將數據按照時間分為熱數據、冷數 ...
  • 我們在談數倉之前,為了讓大家有直觀的認識,先來談數倉架構,“架構”是什麼?這個問題從來就沒有一個準確的答案。這裡我們引用一段話:在軟體行業,一種被普遍接受的架構定義是指系統的一個或多個結構。結構中包括軟體的構建(構建是指軟體的設計與實現),構建的外部可以看到屬性以及它們之間的相互關係。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...