一年之計在於春,萬物復甦中我們迎來了健身的好時節。作為程式設計師,常常久坐或伏案,這帶來了腰肌勞損、頸椎痠痛等亞健康狀況,為此你是否開始制定運動flag?同時希望時刻檢測自己的健康指標呢?
不如來體驗一下HMS Core AR Engine 服務提供的人體和人臉跟蹤能力(目前僅支援人臉跟蹤)吧!它通過整合AR核心演算法,可以在你運動過程中實時監測心率、呼吸率、面部健康狀態、心率波形圖訊號等健康資訊。除了自我健康,開發者們還可以將其整合到不同行業的應用中,比如健身房實時檢視人員運動狀態;在醫院,對病人進行實時查體;在護理行業,實時監測老年人、殘障人士的各項指標等,為應用提供全新的視覺體驗和互動方式。
一、 人臉跟蹤能力的優點及機型要求
- 實時計算人臉健康資訊以及人體關鍵健康資訊,包括心率、呼吸率、面部健康狀態、心率波形圖訊號等。
- 讓終端裝置具備對人的理解能力。通過SLAM、三維重建等技術來實現對人臉在現實世界中的三維感知,最終以影像渲染的方式在手機應用端呈現AR的虛實融合效果。
- 機型具體支援的情況參考管網說明 軟硬體依賴表
二、 Demo應用介紹
為了讓開發者更好的瞭解HMS Core AR Engine 服務提供的人體和人臉跟蹤能力,這裡提供了一個簡單的整合案例,教你用快速高效的方式、簡單的程式碼實現demo的執行。
- ENABLE_HEALTH_DEVICE 啟用健康檢測,1 << 6。
- HealthParameter 健康檢測引數 (心率;呼吸率;人臉屬性:年齡,比重;心率波形圖訊號等)
- FaceDetectMode 人臉檢測模式 (包括健康檢查心率;健康檢查呼吸率;健康實時檢測;同時啟用心率、呼吸率和實時監測模式)
頁面效果圖:
下面為您介紹如何根據原始碼將這個Demo執行起來,以便於瞭解實現細節。
三、關鍵步驟說明
1. 在專案級gradle裡新增華為maven倉。
buildscript {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}
dependencies {
...
// 增加agcp配置。
classpath 'com.huawei.agconnect:agcp:1.4.2.300'
}
}allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}
}
2. 在應用級的build.gradle裡面加上SDK依賴。
implementation 'com.huawei.hms:arenginesdk:3.7.0.3'
3. 在AndroidManifest.xml檔案裡面宣告系統許可權。
:<uses-permission android:name="android.permission.CAMERA" />
4. 檢查當前裝置是否安裝了AR Engine,若已經安裝則正常執行,若沒有安裝,App應主動跳轉應用市場,請求安裝AR Engine。
boolean isInstallArEngineApk = AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk && isRemindInstall) {
Toast.makeText(this, "Please agree to install.", Toast.LENGTH_LONG).show();
finish();
}
if (!isInstallArEngineApk) {
startActivity(new Intent(this, ConnectAppMarketActivity.class));
isRemindInstall = true;
}
return AREnginesApk.isAREngineApkReady(this);
四、 關鍵程式碼說明
1. 呼叫ARFaceTrackingConfig介面,建立人臉跟蹤ARSession場景,設定人臉檢測模式,配置運動跟蹤AR場景引數、啟動運動跟蹤。
mArSession = new ARSession(this);
mArFaceTrackingConfig = new ARFaceTrackingConfig(mArSession);
mArFaceTrackingConfig.setEnableItem(ARConfigBase.ENABLE_HEALTH_DEVICE);
mArFaceTrackingConfig
.setFaceDetectMode(ARConfigBase.FaceDetectMode.HEALTH_ENABLE_DEFAULT.getEnumValue());
2. 呼叫FaceHealthServiceListener 健康檢測事件監聽介面,新增監聽應用傳遞健康檢測狀態和進度等資訊。在handleProcessProgressEvent()中回撥健康檢測進度。
mArSession.addServiceListener(new FaceHealthServiceListener() {
@Override
public void handleEvent(EventObject eventObject) {
if (!(eventObject instanceof FaceHealthCheckStateEvent)) {
return;
}
final FaceHealthCheckState faceHealthCheckState =
((FaceHealthCheckStateEvent) eventObject).getFaceHealthCheckState();
runOnUiThread(new Runnable() {
@Override
public void run() {
mHealthCheckStatusTextView.setText(faceHealthCheckState.toString());
}
});
}
@Override
public void handleProcessProgressEvent(final int progress) {
mHealthRenderManager.setHealthCheckProgress(progress);
runOnUiThread(new Runnable() {
@Override
public void run() {
setProgressTips(progress);
}
});
}
});
private void setProgressTips(int progress) {
String progressTips = "processing";
if (progress >= MAX_PROGRESS) {
progressTips = "finish";
}
mProgressTips.setText(progressTips);
mHealthProgressBar.setProgress(progress);
}
實時更新頁面資料,展示當前檢測結果:
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
mHealthParamTable.removeAllViews();
TableRow heatRateTableRow = initTableRow(ARFace.HealthParameter.PARAMETER_HEART_RATE.toString(),
healthParams.getOrDefault(ARFace.HealthParameter.PARAMETER_HEART_RATE, 0.0f).toString());
mHealthParamTable.addView(heatRateTableRow);
TableRow breathRateTableRow = initTableRow(ARFace.HealthParameter.PARAMETER_BREATH_RATE.toString(),
healthParams.getOrDefault(ARFace.HealthParameter.PARAMETER_BREATH_RATE, 0.0f).toString());
mHealthParamTable.addView(breathRateTableRow);
}
});
瞭解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間瞭解 HMS Core 最新技術資訊~