Android 快速集成手部關鍵點識別能力 超簡單


前言

之前在《用華為HMS ML kit人體骨骼識別技術,Android快速實現人體姿勢動作抓拍》文章中,我們給大家介紹了HMS ML Kit人體骨骼識別技術,可以定位頭頂、脖子、肩、肘、手腕、髖、膝蓋、腳踝等多個人體關鍵點。那么除了識別人體關鍵點以外,HMS ML Kit還為開發者提供了手部關鍵點識別技術,可以定位包括手指指尖、關節點,以及手腕點等21個手部關鍵點,讓人機交互的體驗更加豐富。

應用場景

手部關鍵點識別技術在生活中有很多的應用場景。比如拍攝短視頻的軟件在集成了這種技術后,可以根據手部關鍵點生成一些可愛或者搞笑的特效,增加短視頻的趣味性。
在這里插入圖片描述

或者是在面向智能家居的場景中,可以自定義一些手勢作為智能家電的遠距離操控指令,進行一些更加智能的人機交互方式。
在這里插入圖片描述

開發實戰

下面給大家介紹如何快速集成華為HMS ML Kit手部關鍵點識別技術,以視頻流識別為例。

1. 開發准備

詳細的准備步驟可以參考華為開發者聯盟:

https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-process-4

這里列舉關鍵的開發步驟。

1.1 項目級gradle里配置Maven倉地址

buildscript {
    repositories {
             ...
        maven {url 'https://developer.huawei.com/repo/'}
    }
}
 dependencies {
                 ...
        classpath 'com.huawei.agconnect:agcp:1.3.1.300'
    }
allprojects {
    repositories {
             ...
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

1.2 應用級gradle里配置SDK依賴

dependencies{
    // 引入基礎SDK
    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint:2.0.2.300'
    // 引入手部關鍵點檢測模型包
    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint-model:2.0.2.300'
}

1.3 在文件頭添加配置

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'

1.4 添加如下語句到AndroidManifest.xml文件中,自動更新機器學習模型到設備

<meta-data 
android:name="com.huawei.hms.ml.DEPENDENCY" 
android:value= "handkeypoint"/>

1.5 申請相機權限和讀取本地文件權限

<!--相機權限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--讀權限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. 代碼開發

2.1 創建手部關鍵點分析器

MLHandKeypointAnalyzerSetting setting = new MLHandKeypointAnalyzerSetting.Factory()
      // MLHandKeypointAnalyzerSetting.TYPE_ALL表示所有結果都返回。
      // MLHandKeypointAnalyzerSetting.TYPE_KEYPOINT_ONLY表示只返回手部關鍵點信息。
      // MLHandKeypointAnalyzerSetting.TYPE_RECT_ONLY表示只返回手掌區域信息。
      .setSceneType(MLHandKeypointAnalyzerSetting.TYPE_ALL)
      // 設置同一張圖片中最多支持檢測的手部區域個數。默認最多支持10個手部區域信息檢測。
      .setMaxHandResults(1)
      .create();
MLHandKeypointAnalyzer analyzer = MLHandKeypointAnalyzerFactory.getInstance().getHandKeypointAnalyzer(setting);

2.2 開發者創建識別結果處理類“HandKeypointTransactor”,該類實現MLAnalyzer.MLTransactor 接口,使用此類中的“transactResult”方法獲取檢測結果並實現具體業務。檢測結果除了包含每個手指點的坐標信息外,還包括手掌置信度,以及每個點的置信度值,可以基於置信度值過濾誤識別的無效手掌,實際應用中可根據對誤識別的容忍程度,設置闕值靈活應用。

public class HandKeypointTransactor implements MLAnalyzer.MLTransactor<List<MLHandKeypoints>> {
          @Override
          public void transactResult(MLAnalyzer.Result<List<MLHandKeypoints>> results) {
              SparseArray<List<MLHandKeypoints>> analyseList  = result.getAnalyseList();
              // 開發者根據需要處理識別結果,需要注意,這里只對檢測結果進行處理。
              // 不可調用ML Kit提供的其他檢測相關接口。
          }
         @Override
         public void destroy() {
            // 檢測結束回調方法,用於釋放資源等。
        }
}

2.3 設置識別結果處理器,實現分析器與結果處理器的綁定。

analyzer.setTransactor(new HandKeypointTransactor());

2.4 創建LensEngine,該類由ML Kit SDK提供,用於捕捉相機動態視頻流並傳入分析器。建議設置的相機顯示尺寸不小於320320像素,不大於19201920像素。

2.5 調用run方法,啟動相機,讀取視頻流,進行識別。

  // 請自行實現SurfaceView控件的其他邏輯。
  SurfaceView mSurfaceView = findViewById(R.id.surface_view);
  try {
          lensEngine.run(mSurfaceView.getHolder());
  } catch (IOException e) {
          // 異常處理邏輯。
   }

2.6 檢測完成,停止分析器,釋放檢測資源。

  if (analyzer != null) {
          analyzer.stop();
  }
  if (lensEngine != null) {
          lensEngine.release();
   }

Demo效果

下面這個demo展示了不同手勢時手部關鍵點識別的效果,開發者可根據實際開發需要進行拓展。
在這里插入圖片描述

Github源碼

https://github.com/HMS-Core/hms-ml-demo/blob/master/MLKit-Sample/module-body/src/main/java/com/mlkit/sample/activity/HandKeypointActivity.java

更詳細的開發指南參考華為開發者聯盟官網

https://developer.huawei.com/consumer/cn/hms/huawei-mlkit

欲了解更多詳情,請參閱:
華為開發者聯盟官網:https://developer.huawei.com/consumer/cn/hms
獲取開發指導文檔:https://developer.huawei.com/consumer/cn/doc/development
參與開發者討論請到Reddit社區:https://www.reddit.com/r/HMSCore/
下載demo和示例代碼請到Github:https://github.com/HMS-Core
解決集成問題請到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


原文鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0203346162792430439&fid=18
作者:留下落葉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM