• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于安卓手機(jī)的虛擬鋼琴App開發(fā)

      2022-08-31 14:35:30戴旭沈金民殳佳潔林巧民
      電腦知識(shí)與技術(shù) 2022年19期
      關(guān)鍵詞:手勢(shì)識(shí)別

      戴旭 沈金民 殳佳潔 林巧民

      摘要:21世紀(jì)以來,隨著現(xiàn)代信息化技術(shù)的快速發(fā)展,使原本只能在現(xiàn)實(shí)中存在的樂器虛擬化,例如鋼琴等。隨著安卓軟件開發(fā)工具Android Studio的不斷完善,該文使用此開發(fā)軟件結(jié)合MediaPipe框架,使用Java語言設(shè)計(jì)開發(fā)一款虛擬鋼琴App,在實(shí)現(xiàn)鋼琴彈奏功能的基礎(chǔ)上添加了節(jié)拍器和音樂播放器功能,并利用MediaPipe框架實(shí)現(xiàn)手勢(shì)識(shí)別功能,從而實(shí)現(xiàn)人機(jī)交互,較大程度地在現(xiàn)實(shí)鋼琴的基礎(chǔ)上簡化彈奏難度增加簡便實(shí)用性功能從而增加大眾娛樂性。

      關(guān)鍵詞:Android Studio;java;虛擬鋼琴;手勢(shì)識(shí)別;MediaPipe

      中圖分類號(hào):TP319? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

      文章編號(hào):1009-3044(2022)19-0003-03

      1 引言

      當(dāng)今的虛擬化電子樂器軟件是較為受歡迎的一類軟件,而這其中,虛擬鋼琴更是比較熱門的一款[1]。該文選用手機(jī)端Android進(jìn)行開發(fā)[2-3],相較于網(wǎng)頁版[4],雖編程復(fù)雜,但框架穩(wěn)固,軟件運(yùn)行流暢穩(wěn)定,不受網(wǎng)絡(luò)延遲影響。

      Android是基于Linux平臺(tái)的由Google公司開發(fā)的開源手機(jī)操作系統(tǒng)。包括操作系統(tǒng)、用戶界面和應(yīng)用程序三個(gè)模塊[5],并且由Java語言編寫,繼承了Java跨平臺(tái)的特點(diǎn)。任何Android應(yīng)用幾乎無須做任何處理就能運(yùn)行于所有的Android設(shè)備[6-7],外加利用MediaPipe框架基于Wing loss檢測(cè)算法增加手勢(shì)識(shí)別功能[8],對(duì)App的開發(fā)具有創(chuàng)新性的研究。

      2 開發(fā)工具Android Studio簡介

      Android Studio是一個(gè)Android集成工具,基于IntelliJ IDEA。類似Eclipse ADT,提供了集成的用于開發(fā)和調(diào)試的Android開發(fā)工具。除此以外Android Studio還提供了其他更多的功能,例如:

      1)靈活性非常高的基于Gradle的構(gòu)建系統(tǒng)。

      2)快速且功能豐富的仿真器。

      3)一個(gè)統(tǒng)一的環(huán)境,可為所有Android設(shè)備進(jìn)行開發(fā)。

      4)將更改應(yīng)用于代碼和資源更改推送到正在運(yùn)行的應(yīng)用,而無須重新啟動(dòng)應(yīng)用。

      5)代碼模板和GitHub集成,可構(gòu)建常見應(yīng)用功能和導(dǎo)入示例代碼。

      6)功能豐富的測(cè)試工具和框架。

      7)用于捕獲性能、可用性、版本兼容性和其他問題的Lint工具。

      8)內(nèi)置對(duì)Google Cloud Platform的支持,可輕松集成Google Cloud Messaging和App Engine。

      2.1 項(xiàng)目結(jié)構(gòu)

      Android Studio中的每個(gè)項(xiàng)目都包含一個(gè)或多個(gè)包含源代碼文件和資源文件的模塊。模塊類型主要包括三個(gè)方面:

      1)安卓應(yīng)用模塊。

      2)庫模塊。

      3)谷歌應(yīng)用引擎。

      默認(rèn)情況下,Android Studio中項(xiàng)目文件會(huì)在Android項(xiàng)目視圖中被顯示,如圖1所示。此視圖可以根據(jù)模塊來完成快速訪問項(xiàng)目的關(guān)鍵源文件任務(wù)。

      Gradle腳本下,所有構(gòu)建文件在其頂層都可見,每個(gè)應(yīng)用程序模塊都包含以下三個(gè)文件夾:

      1)manifests:包含文件AndroidManifest.xml。

      2)java:包含java源代碼文件,包括JUnit測(cè)試代碼。

      3)res:包含所有非代碼資源,如XML布局、UI字符串和位圖圖像。

      2.2 用戶界面

      Android Studio主窗口由圖2中標(biāo)識(shí)的幾個(gè)邏輯區(qū)域組成。

      1)工具欄:可執(zhí)行各種操作,包括運(yùn)行應(yīng)用和啟動(dòng)Android工具。

      2)導(dǎo)航欄:幫助項(xiàng)目導(dǎo)航并進(jìn)行文件編輯。

      3)編輯器窗口:創(chuàng)建和修改代碼。根據(jù)當(dāng)前文件類型,編輯器可更改。

      4)工具欄窗口:圍繞IDE窗口的外部運(yùn)行,包含可允許展示或折疊各個(gè)工具窗口的按鈕。

      5)工具窗口:可訪問特定任務(wù),如項(xiàng)目管理、搜索、版本控制等。可展開或折疊。

      6)狀態(tài)欄:顯示項(xiàng)目和IDE本身的狀態(tài),以及任何警告或消息。

      2.3 Gradle構(gòu)建系統(tǒng)

      Gradle是Android Studio中建立的一個(gè)基本架構(gòu),通常是默認(rèn)使用。它的安卓外掛程序?yàn)?Android系統(tǒng)提供了更多的特性。該構(gòu)建系統(tǒng)是以Android Studio功能表中的集成工具而運(yùn)作,與指令行無關(guān)。即可利用構(gòu)建系統(tǒng)的功能執(zhí)行以下等操作:

      1)自定義、配置和擴(kuò)展構(gòu)建流程。

      2)為應(yīng)用創(chuàng)建多個(gè)APK,使用相同的項(xiàng)目和模塊使用不同的功能。

      3)跨源集重用代碼和資源。

      Gradle具有非常高的靈活性,可以達(dá)到既不修改應(yīng)用的核心源文件又實(shí)現(xiàn)所有構(gòu)建目標(biāo)的效果。在Android Studio中構(gòu)建文件通常以build.gradle命名。至少包括project根目錄和module根目錄下兩個(gè)地方存在,其生命周期從初始化階段去判斷創(chuàng)建整個(gè)項(xiàng)目的層次結(jié)構(gòu),并且為每一個(gè)項(xiàng)目創(chuàng)建一個(gè)實(shí)例對(duì)象到配置階段生成整個(gè)構(gòu)建的有向無環(huán)圖至執(zhí)行階段讀取并按順序執(zhí)行各個(gè)任務(wù)最終完成工程的構(gòu)建。

      3 App的開發(fā)與實(shí)現(xiàn)

      3.1 界面設(shè)計(jì)

      App設(shè)計(jì)秉著界面簡約美觀的原則,使用Android的碎片化Fragment和Activity作為視圖容器的承載體用于定義和管理布局,并且使用一系列控件用于布局設(shè)計(jì),如圖3。引用自定義控件及可縮放矢量圖(Scalable Vector Graphics,SVG)使UI能夠自適應(yīng)和適配諸多設(shè)備。

      打開XML布局文件,顯示布局編輯器,根據(jù)Design和Blueprint查看布局渲染后預(yù)覽效果和視圖輪廓,并且使用TextView、ImageView或RecyclerView添加示例預(yù)覽數(shù)據(jù),最終實(shí)現(xiàn)App的界面設(shè)計(jì),如圖4。

      3.2 框架構(gòu)建

      虛擬鋼琴應(yīng)用App包含琴鍵和音樂播放器兩個(gè)主功能模塊,兩個(gè)功能模塊之間相互解耦且分工明確。其中琴鍵模塊中包含樂曲庫、節(jié)拍器和手勢(shì)識(shí)別功能,可點(diǎn)擊選擇樂曲庫中的曲目然后跳轉(zhuǎn)回琴鍵界面,界面播放所選擇的曲目并顯示其所對(duì)應(yīng)簡譜??纱蜷_節(jié)拍器,按照設(shè)定好的頻率給出節(jié)拍。使用手勢(shì)識(shí)別功能,會(huì)打開攝像機(jī)對(duì)手勢(shì)進(jìn)行捕捉,根據(jù)七鍵鋼琴序號(hào)做出對(duì)應(yīng)手勢(shì)即可實(shí)現(xiàn)隔空彈奏。音樂播放器模塊則根據(jù)本地?cái)?shù)據(jù)庫存放的曲目實(shí)現(xiàn)音樂播放功能。整體框架流程圖如圖5所示。

      1)琴鍵設(shè)計(jì)

      按照點(diǎn)擊琴鍵播放預(yù)先存儲(chǔ)好的音頻的方法,將音頻文件存放到res下的raw文件中,外層線性布局設(shè)置為水平,在布局中添加Button控件,使用layout_weight屬性使得每個(gè)按鍵大小相等,用SoulPool()函數(shù)導(dǎo)入音頻資源,再給每個(gè)控件設(shè)置監(jiān)聽與點(diǎn)擊事件。

      2)節(jié)拍器、簡譜設(shè)計(jì)

      采用預(yù)存音頻的方式將節(jié)拍器和樂曲庫功能放置琴鍵界面。節(jié)拍器是用MediaPlayer()函數(shù)導(dǎo)入音頻文件,為子菜單中的“節(jié)拍器”和“停止節(jié)拍”按鍵設(shè)置點(diǎn)擊事件,點(diǎn)擊“節(jié)拍器”選項(xiàng)后自動(dòng)播放音頻,點(diǎn)擊“停止節(jié)拍”后停止播放。選擇樂曲后琴鍵界面會(huì)顯示對(duì)應(yīng)簡譜,音頻簡譜是在外層布局添加兩個(gè)TextView控件來展示簡譜和歌曲名稱,通過為子菜單中的“歌曲”選項(xiàng)們添加點(diǎn)擊事件,在點(diǎn)擊相應(yīng)“歌曲”選項(xiàng)后通過setText()函數(shù)來改變兩個(gè)控件text屬性的值。

      3)播放器設(shè)計(jì)

      最外層使用LinearLayout線性布局,創(chuàng)建控件并綁定,設(shè)置監(jiān)聽器。在包中創(chuàng)建Activity,通過onClick方法控制著音樂的播放、暫停、繼續(xù)播放和退出功能,并且和MusicService進(jìn)行綁定鏈接。在音樂播放時(shí)顯示歌曲總時(shí)長,歌曲當(dāng)前播放時(shí)長,控制歌曲進(jìn)度條的移動(dòng)。創(chuàng)建Class用于顯示歌曲列表,新建layout文件夾,并創(chuàng)建list和item用于垂直布局和條目布局。在res文件夾下新建raw文件夾用于存放曲庫,并將封面背景圖片存放到drawable中。

      3.3 手勢(shì)識(shí)別功能

      手勢(shì)識(shí)別功能是App立足創(chuàng)新的一個(gè)功能。根據(jù)Wing loss的手部關(guān)鍵點(diǎn)檢測(cè)算法,利用級(jí)聯(lián)回歸方式以及轉(zhuǎn)換機(jī)制,通過級(jí)聯(lián)兩個(gè)卷積神經(jīng)網(wǎng)絡(luò),利用第一階段產(chǎn)生的形狀向平均形狀轉(zhuǎn)換得到轉(zhuǎn)換矩陣,進(jìn)而將手部圖片進(jìn)行轉(zhuǎn)換,第二階段減少手部姿態(tài)對(duì)關(guān)鍵點(diǎn)檢測(cè)的影響。為了能利用全手的特征信息,同時(shí)平衡誤差對(duì)關(guān)鍵點(diǎn)的影響提出了wing loss函數(shù),兼顧大小誤差對(duì)手部關(guān)鍵點(diǎn)準(zhǔn)確性的影響。給定一個(gè)圖像和網(wǎng)絡(luò),可以預(yù)測(cè)手部關(guān)鍵點(diǎn)的損失函數(shù)為:

      [losss],[s,=i=12Lf(si-s,i)],

      其中s是手部關(guān)鍵點(diǎn),函數(shù)f(x)就等價(jià)于:

      . L1 loss

      L1[x=x],

      .L2 loss

      L2[x=12x2],

      .[SmoothL1X:]

      [smoothL1x=12x2,? ifx<1x-12,? otherwise],

      對(duì)于小誤差,表現(xiàn)為具有偏移量的對(duì)數(shù)函數(shù),對(duì)于大誤差,則表現(xiàn)為L1。這樣的復(fù)合損失函數(shù)可以定義為:

      [wingx=wln1+x/?,? ifxx-C,? otherwise],

      利用MediaPipe框架并將其安裝到開發(fā)環(huán)境,初始化assets管理器用于MediaPipe應(yīng)用資源,構(gòu)建MediaPipe二進(jìn)制圖并將資源復(fù)制到app/src/main/assets中,修改app/build.gradle以添加MediaPipe依賴項(xiàng)和MediaPipe AAR,在配置文件AndroidMainfest.xml中添加相機(jī)權(quán)限,通過加載獲取一個(gè)幀處理器,調(diào)用其API完成手21個(gè)關(guān)鍵點(diǎn)(如圖6)檢測(cè)并識(shí)別。

      通過計(jì)算歐氏距離(三維空間兩點(diǎn)之間的距離)判斷手指是否彎曲來判斷手勢(shì),最終實(shí)現(xiàn)手勢(shì)識(shí)別。通過判斷手指彎曲分別設(shè)定0~6數(shù)字的手勢(shì)對(duì)應(yīng)琴鍵的1~7號(hào)鍵,手勢(shì)識(shí)別成功后會(huì)觸發(fā)對(duì)應(yīng)的琴鍵,從而實(shí)現(xiàn)(如圖7)隔空彈奏。

      3.4 運(yùn)行測(cè)試

      使用Android Profiler對(duì)虛擬鋼琴App進(jìn)行一定時(shí)間的性能測(cè)試,得出的結(jié)果如圖8,測(cè)試結(jié)果包含琴鍵、節(jié)拍器、播放器,手勢(shì)識(shí)別四個(gè)模塊,從圖中可以看出CPU、內(nèi)存和網(wǎng)絡(luò)在沒接收到命令前,基本處于空閑狀態(tài),在接收到命令后或在模擬器剛啟動(dòng)時(shí)會(huì)有小幅度的波動(dòng),符合預(yù)期。

      4 結(jié)束語

      本文利用安卓開發(fā)工具Android Studio,基于MediaPipe框架使用java語言開發(fā)了一款簡約的虛擬鋼琴App,在簡單的琴鍵功能實(shí)現(xiàn)的基礎(chǔ)上,增加的簡樸、節(jié)拍器功能,將原本需要一定技術(shù)基礎(chǔ)的鋼琴彈奏簡易化,實(shí)現(xiàn)了大眾化的娛樂。手勢(shì)識(shí)別功能的應(yīng)用更是增加了App的趣味性。引用的自定義控件,優(yōu)化了App的外觀框架,并且經(jīng)過性能測(cè)試得出,App運(yùn)行平穩(wěn),交互靈敏,達(dá)到了預(yù)期的實(shí)際目標(biāo),具有一定的實(shí)用價(jià)值。

      參考文獻(xiàn):

      [1] 張瑋,王金露,陸小彪.基于用戶體驗(yàn)的智能鋼琴APP界面再設(shè)計(jì)[J].北京印刷學(xué)院學(xué)報(bào),2020,28(2):52-58.

      [2] 華春夢(mèng).基于Android平臺(tái)的在線影院APP開發(fā)與設(shè)計(jì)[J].現(xiàn)代信息科技,2021,5(21):29-32.

      [3] 熊艷秋.基于Android平臺(tái)在線視頻播放APP的設(shè)計(jì)與實(shí)現(xiàn)[D].荊州:長江大學(xué),2020.

      [4] 錢立.基于HTML5的Web Audio技術(shù)實(shí)現(xiàn)手機(jī)版簡易鋼琴[J].四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2020,30(6):146-149.

      [5] 趙亮,張維.基于Android技術(shù)的界面設(shè)計(jì)與研究[J].電腦知識(shí)與技術(shù),2009,5(29):8183-8185.

      [6] 崔娜.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].電腦知識(shí)與技術(shù),2016,12(29):38-39,41.

      [7] 林辰瑋,池國煜.基于Android智設(shè)校園O2O微任務(wù)App的設(shè)計(jì)與實(shí)現(xiàn)[J].電子制作,2022,30(7):64-66,63.

      [8] 孫洪恩.基于循環(huán)神經(jīng)網(wǎng)絡(luò)模型的動(dòng)態(tài)手勢(shì)識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2021.

      收稿日期:2022-03-11

      基金項(xiàng)目:南京郵電大學(xué)通達(dá)學(xué)院2021年度“大學(xué)生科技創(chuàng)新訓(xùn)練計(jì)劃(STITP)”省級(jí)立項(xiàng)項(xiàng)目(項(xiàng)目編號(hào):202113989018Y)

      作者簡介:戴旭(2001—),男,江蘇連云港人,學(xué)士,主要研究方向?yàn)檐浖_發(fā);沈金民(2000—),男,云南臨滄人,學(xué)士,主要研究方向?yàn)檐浖_發(fā);殳佳潔(2001—),男,江蘇南通人,學(xué)士,主要研究方向?yàn)檐浖_發(fā);林巧民(1980—),男,江蘇南京人,副教授,博士,主要研究方向?yàn)榍楦杏?jì)算與情感教育、物聯(lián)網(wǎng)關(guān)鍵技術(shù)研究與應(yīng)用。

      猜你喜歡
      手勢(shì)識(shí)別
      基于手勢(shì)識(shí)別的工業(yè)機(jī)器人操作控制方法
      基于紅外的非接觸式手勢(shì)識(shí)別系統(tǒng)設(shè)計(jì)
      基于嵌入式的智能手表設(shè)計(jì)
      復(fù)雜背景下的手勢(shì)識(shí)別方法
      台北市| 寿阳县| 长兴县| 仙桃市| 崇州市| 文昌市| 牟定县| 甘肃省| 迁西县| 延庆县| 阿拉善左旗| 巴东县| 中江县| 桂平市| 张家界市| 沅江市| 石棉县| 吴川市| 辰溪县| 临湘市| 鹤壁市| 永嘉县| 镇赉县| 平安县| 岑巩县| 竹溪县| 西乌珠穆沁旗| 离岛区| 榕江县| 涿州市| 泾川县| 濮阳市| 太谷县| 杭州市| 黄龙县| 桐庐县| 舞钢市| 会宁县| 滨海县| 上林县| 柏乡县|