Android 快速集成手部關(guān)鍵點(diǎn)識別能力 超簡單

前言

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

應(yīng)用場景

手部關(guān)鍵點(diǎn)識別技術(shù)在生活中有很多的應(yīng)用場景。比如拍攝短視頻的軟件在集成了這種技術(shù)后,可以根據(jù)手部關(guān)鍵點(diǎn)生成一些可愛或者搞笑的特效,增加短視頻的趣味性。

或者是在面向智能家居的場景中,可以自定義一些手勢作為智能家電的遠(yuǎn)距離操控指令,進(jìn)行一些更加智能的人機(jī)交互方式。

開發(fā)實(shí)戰(zhàn)

下面給大家介紹如何快速集成華為HMS ML Kit手部關(guān)鍵點(diǎn)識別技術(shù),以視頻流識別為例。

1.??開發(fā)準(zhǔn)備

詳細(xì)的準(zhǔn)備步驟可以參考華為開發(fā)者聯(lián)盟:

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

這里列舉關(guān)鍵的開發(fā)步驟。

1.1??? 項(xiàng)目級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?應(yīng)用級gradle里配置SDK依賴?

dependencies{

????//?引入基礎(chǔ)SDK

????implementation?'com.huawei.hms:ml-computer-vision-handkeypoint:2.0.2.300'

????//?引入手部關(guān)鍵點(diǎn)檢測模型包

????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文件中,自動(dòng)更新機(jī)器學(xué)習(xí)模型到設(shè)備

<meta-data?

android:name="com.huawei.hms.ml.DEPENDENCY"?

android:value=?"handkeypoint"/>

1.5申請相機(jī)權(quán)限和讀取本地文件權(quán)限

<!--相機(jī)權(quán)限-->

<uses-permission?android:name="android.permission.CAMERA"?/>

<!--讀權(quán)限-->

<uses-permission?android:name="android.permission.READ_EXTERNAL_STORAGE"?/>

2. 代碼開發(fā)

2.1創(chuàng)建手部關(guān)鍵點(diǎn)分析器

MLHandKeypointAnalyzerSetting?setting?=?new?MLHandKeypointAnalyzerSetting.Factory()

??????//?MLHandKeypointAnalyzerSetting.TYPE_ALL表示所有結(jié)果都返回。

??????//?MLHandKeypointAnalyzerSetting.TYPE_KEYPOINT_ONLY表示只返回手部關(guān)鍵點(diǎn)信息。

??????//?MLHandKeypointAnalyzerSetting.TYPE_RECT_ONLY表示只返回手掌區(qū)域信息。

??????.setSceneType(MLHandKeypointAnalyzerSetting.TYPE_ALL)

??????//?設(shè)置同一張圖片中最多支持檢測的手部區(qū)域個(gè)數(shù)。默認(rèn)最多支持10個(gè)手部區(qū)域信息檢測。

??????.setMaxHandResults(1)

??????.create();

MLHandKeypointAnalyzer?analyzer?=?MLHandKeypointAnalyzerFactory.getInstance().getHandKeypointAnalyzer(setting);

2.2開發(fā)者創(chuàng)建識別結(jié)果處理類“HandKeypointTransactor”,該類實(shí)現(xiàn)MLAnalyzer.MLTransactor<T>接口,使用此類中的“transactResult”方法獲取檢測結(jié)果并實(shí)現(xiàn)具體業(yè)務(wù)。檢測結(jié)果除了包含每個(gè)手指點(diǎn)的坐標(biāo)信息外,還包括手掌置信度,以及每個(gè)點(diǎn)的置信度值,可以基于置信度值過濾誤識別的無效手掌,實(shí)際應(yīng)用中可根據(jù)對誤識別的容忍程度,設(shè)置闕值靈活應(yīng)用。

public?class?HandKeypointTransactor?implements?MLAnalyzer.MLTransactor<List<MLHandKeypoints>>?{

??????????@Override

??????????public?void?transactResult(MLAnalyzer.Result<List<MLHandKeypoints>>?results)?{

??????????????SparseArray<List<MLHandKeypoints>>?analyseList??=?result.getAnalyseList();

??????????????//?開發(fā)者根據(jù)需要處理識別結(jié)果,需要注意,這里只對檢測結(jié)果進(jìn)行處理。

??????????????//?不可調(diào)用ML?Kit提供的其他檢測相關(guān)接口。

??????????}

?????????@Override

?????????public?void?destroy()?{

????????????//?檢測結(jié)束回調(diào)方法,用于釋放資源等。

????????}

}

2.3設(shè)置識別結(jié)果處理器,實(shí)現(xiàn)分析器與結(jié)果處理器的綁定。

analyzer.setTransactor(new?HandKeypointTransactor());

2.4創(chuàng)建LensEngine,該類由ML Kit SDK提供,用于捕捉相機(jī)動(dòng)態(tài)視頻流并傳入分析器。建議設(shè)置的相機(jī)顯示尺寸不小于320*320像素,不大于1920*1920像素。

LensEngine?lensEngine?=?new?LensEngine.Creator(getApplicationContext(),?analyzer)

??????.setLensType(LensEngine.BACK_LENS)

??????.applyDisplayDimension(1280,?720)

??????.applyFps(20.0f)

??????.enableAutomaticFocus(true)

??????.create();

2.5調(diào)用run方法,啟動(dòng)相機(jī),讀取視頻流,進(jìn)行識別。

??//?請自行實(shí)現(xiàn)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效果

下面這個(gè)demo展示了不同手勢時(shí)手部關(guān)鍵點(diǎn)識別的效果,開發(fā)者可根據(jù)實(shí)際開發(fā)需要進(jìn)行拓展。

Github源碼

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

更詳細(xì)的開發(fā)指南參考華為開發(fā)者聯(lián)盟官網(wǎng)

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

欲了解更多詳情,請參閱:

華為開發(fā)者聯(lián)盟官網(wǎng):https://developer.huawei.com/consumer/cn/hms

獲取開發(fā)指導(dǎo)文檔:https://developer.huawei.com/consumer/cn/doc/development

參與開發(fā)者討論請到Reddit社區(qū):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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容