亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Unity3D中的Kinect聲源定位與人機交互技術(shù)

        2017-02-22 06:28:55王洪源陳慕羿
        沈陽理工大學(xué)學(xué)報 2017年1期
        關(guān)鍵詞:麥克風(fēng)聲源調(diào)用

        楊 竹,王洪源,陳慕羿

        Unity3D中的Kinect聲源定位與人機交互技術(shù)

        楊 竹,王洪源,陳慕羿

        (沈陽理工大學(xué) 信息科學(xué)與工程學(xué)院,沈陽 110159)

        Kinect是與Xbox360游戲機配套使用的一款外設(shè),內(nèi)置四元線性非對稱麥克風(fēng)陣列,可以根據(jù)各麥克風(fēng)接收到聲音信號的時延差,計算出聲源方位與角度。Unity3D是一個可以創(chuàng)建三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的綜合型游戲引擎,其本身缺少高級人機聲音交互功能。為此,研究開發(fā)了基于Kinect的Unity3D人機聲音交互接口。采用C++/C#混合編程技術(shù),將Kinect API for Windows中關(guān)于聲音的相關(guān)功能封裝為非托管的C++動態(tài)鏈接庫(DLL),利用該DLL把Unity3D引擎、Kinect體感設(shè)備和Visual Studio平臺銜接起來;在Unity3D平臺上對由Kinect獲取到的聲源位置進行識別定位,得到的實時數(shù)據(jù)可用于高級人機交互應(yīng)用。

        Unity3D;Kinect;聲源定位;線性麥克風(fēng)陣列;人機交互技術(shù)

        作為微軟公司的總裁,比爾蓋茨于2008年首次給出了“自然用戶界面(Natural User Interface)”的概念,并且對人機交互技術(shù)的未來進行了預(yù)言:在用戶界面上,更為自然的觸摸、語音、肢體語言等交互形式將逐步淘汰以鍵盤、鼠標為主的輸入手段[1]。而就在同一時段,有人又提出了“有機用戶界面(Organic User Interface)”的創(chuàng)新理念,界面擁有最新的生物識別、皮膚顯示傳感器,甚至植入了大腦與機器的無縫連接,這些技術(shù)都將大幅改變?nèi)藗兊幕永砟詈蜕罘绞?。隨著互聯(lián)網(wǎng)技術(shù)和傳感器技術(shù)的普遍應(yīng)用,“數(shù)據(jù)化”的特性將逐漸在現(xiàn)實生活中顯現(xiàn),而人機自然交互技術(shù)為人們搭建了現(xiàn)實世界與虛擬環(huán)境的橋梁[1]。

        Unity3D是由Unity Technologies開發(fā)的一款創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺、綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎,其人機交互一般是通過鼠標、鍵盤實現(xiàn),引擎本身不具備聲音識別、定位、控制等高級人機交互功能。

        Kinect 是微軟公司基于 XBOX 360 和 Wind-ows PC 機的視頻游戲控制臺開發(fā)的一款運動傳感輸入設(shè)備,是目前世界上唯一一款較為成熟的商業(yè)人體動作感知設(shè)備,目前大量應(yīng)用在體感游戲上。由于微軟對Kinect 的開發(fā)環(huán)境設(shè)置是開源的,因此開發(fā)者可以開發(fā)基于Kinect 的各種應(yīng)用。正是它的人機交互式方式以及開放式的開發(fā)環(huán)境,使得 Kinect 很快在全球得到廣泛應(yīng)用。如今在醫(yī)療、教育、軍事和三維人體建模等領(lǐng)域都得到了許多富有創(chuàng)意的新運用[2]。Kinect內(nèi)置四元線性非對稱麥克風(fēng)陣列,傳感器內(nèi)含數(shù)字信號處理器(DSP),能收集所在環(huán)境中的各種聲音信息,算法分析搜集到的信息后判斷聲音的來源方位,根據(jù)各麥克風(fēng)接收到聲音信號的時延差,計算出聲源方位與角度,提供給應(yīng)用程序使用。定位精度高,空間算法簡便,在聲源定位中得到越來越多的應(yīng)用[3]。

        目前大多數(shù)的工作關(guān)注于其交互技術(shù)本身的研究,而缺乏對人類自身聽覺特點的利用和如何利用聲音來表征信息的挖掘。隨著人們需求的不斷改變以及Kinect技術(shù)的不斷完善,Kinect在各個領(lǐng)域的應(yīng)用都會向前邁出一大步,并且在人機交互領(lǐng)域?qū)玫礁鼮閺V泛的應(yīng)用[4]。選題旨在擴展Kinect體感設(shè)備的應(yīng)用領(lǐng)域,充分利用Unity3D繪制引擎的特性,創(chuàng)建人機交互領(lǐng)域的大范圍應(yīng)用契機。在自然人機交互需求不斷提升的今天,體感技術(shù)已經(jīng)是各領(lǐng)域科研小組所研究的熱點,將這種技術(shù)結(jié)合其它開發(fā)平臺的應(yīng)用正在步入日常生活,未來也可以進入教育、軍事、醫(yī)學(xué)等相關(guān)領(lǐng)域。

        基于Kinect的Unity3D聲音人機交互技術(shù)的開發(fā)是以一種“面向過程”的方式進行,使用“非托管的C++動態(tài)鏈接庫”封裝方式,當Unity3D開發(fā)需要調(diào)用DLL時,只要用C#腳本編程聲明并調(diào)用需要的接口函數(shù),就能實現(xiàn)Kinect和Unity3D之間傳遞數(shù)據(jù)的功能。

        1 Kinect音頻系統(tǒng)與DMO技術(shù)

        麥克風(fēng)陣列聲源定位與跟蹤指的是利用麥克風(fēng)陣列完成對聲音信號的采集,通過處理和分析捕獲的多聲道聲音信號,在空間中定位出一個或者多個聲源的平面坐標或空間坐標,由此得到聲源所在位置,進而實現(xiàn)對聲源目標的跟蹤。由于麥克風(fēng)陣列由一組按一定幾何結(jié)構(gòu)擺放的麥克風(fēng)組成,因此能夠同時處理來自空間不同方向的聲音信號,從而大大提高了聲源定位的準確度。在現(xiàn)階段,基于麥克風(fēng)陣列的聲源定位與跟蹤系統(tǒng)依然是眾多聲源定位方法中發(fā)展較成熟、應(yīng)用較廣泛的一種[5]。圖1為均勻直線麥克風(fēng)陣列模型。

        圖1 均勻直線麥克風(fēng)模型

        1.1 Kinect音頻系統(tǒng)概況

        Kinect 是一個底端有四個麥克風(fēng)組成的直線型麥克風(fēng)陣列的傳感器,該陣列可用來為更上層API提供關(guān)于透過音波形式辨識聲音來源、回音消除、自動增益等功能,并且能與Windows 語音識別 API 整合,更能進行聲源定位和環(huán)境噪聲抑制。如圖 2 所示,它的四個麥克風(fēng)非均勻排列在 Kinect 的兩側(cè),通道 1 的麥克風(fēng)在左側(cè),距離中心 11.3cm,另外三個麥克風(fēng)在右側(cè),距離中心分別為 3.6cm、7.6cm 和 11.3cm。四個麥克風(fēng)離原點的高度均為 2cm[5]。

        圖2 Kinect的麥克風(fēng)陣列

        Kinect的聲音采樣(sampling)頻率為16000(16kHz,每秒采樣16000次),采樣位數(shù)為16位(2B,也就是把采樣聲音區(qū)分成65536種等級)。由于四個麥克風(fēng)位置不同,故對某發(fā)音源所接收到的音量強弱,Kinect可分析出僅限水平方向的聲音來源。本系統(tǒng)主要利用Kinect具有的麥克風(fēng)輸入和語音辨識功能,通過其四元麥克風(fēng)陣列來捕捉多聲道立體聲,再通過數(shù)字信號處理(DSP)等組件,根據(jù)收到的聲音時延判斷聲源所在方向。

        1.2 DMO技術(shù)

        DirectX是Microsoft公司為游戲和其他高性能多媒體應(yīng)用所提供的一套底層圖形應(yīng)用編程接口(API)。這些接口包括對二維和三維圖形,聲效和音樂,輸入設(shè)備以及多玩家網(wǎng)絡(luò)游戲等的支持。安裝了它,系統(tǒng)中軟件會比較直接的利用硬件加速資源[6]。DirectX Media Objects(DMO):是微軟提供的一種流數(shù)據(jù)處理COM組件。它是從DirectSh-ow中分離出來的,作為另一種高效率的流數(shù)據(jù)處理解決方案。它提供包括對視頻和音頻等數(shù)據(jù)流對象的讀寫支持,以及編解碼實現(xiàn)。

        DirectX的功能都是以COM組件的形式提供的,而DirectShow是一套完全基于COM的應(yīng)用系統(tǒng)。COM組件是建立在二進制規(guī)范上的對象,它常常被作為動態(tài)鏈接庫(DLL)。

        2 KinectCommonBridge相關(guān)介紹及DLL相關(guān)技術(shù)與調(diào)試方法

        2.1 KinectCommonBridge簡介

        KinectCommonBridge是Kinect for Windows SDK的一個補充,它在創(chuàng)意開發(fā)庫和工具包方面易于集成Kinect方案。在與openFrameworks和Cinder類成員工作時,很明顯,它們需要類似于托管API但是基于C++的東西。它們所使用的圖形庫完全是用本機C++寫的。至于功能,它們想要這種輕量級的一些東西來盡可能輕量地繼續(xù)擴展它們的庫。如果用戶不熟悉這些庫或任何類型的游戲開發(fā)模型,它們并沒有一種典型的應(yīng)用設(shè)計模式。它們需要盡量快速地運行模擬、更新對象的位置,然后要么盡量的快要么鎖定與刷新顯示同步地呈現(xiàn)在屏幕上。它可以以典型的每秒60幀速度運行,和CPU/GPU處理速度一樣高。

        KinectCommonBridge的目的是:允許任何能夠加載DLL的任何框架直接訪問數(shù)據(jù)。Kinect-CommonBridge還有支持傳感器的額外的更高級功能,如人臉跟蹤和語音識別。若要使用語音識別,用戶需要在工程的C++預(yù)處理器屬性中添加如下預(yù)處理器定義:

        KCB_ENABLE_SPEECH;

        當用Kinect for Windows SDK和Kinect設(shè)備工作時的常見任務(wù)是:

        (1)選擇一個傳感器;

        (2)從中獲取顏色/紅外、深度和骨骼數(shù)據(jù)[7]。

        2.2 動態(tài)鏈接庫(DLL)的創(chuàng)建及函數(shù)導(dǎo)出

        DLL是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)庫,它不能直接運行,也不能接收消息,但可以被其他執(zhí)行文件和其他DLL文件動態(tài)調(diào)用。通過使用DLL,程序可以實現(xiàn)模塊化,使其成為相對獨立的組件模塊。此外,改寫DLL以更新應(yīng)用并不會影響該程序的其他部分。

        應(yīng)用程序在鏈接DLL中的函數(shù)信息之前,需要從DLL文件中導(dǎo)出函數(shù)。導(dǎo)出DLL中的函數(shù)的方法有兩種:一是在定義函數(shù)時使用導(dǎo)出函數(shù)關(guān)鍵字“_declspec(dllexport)”;二是使用模塊定義文件(.def)。本文使用方法一。

        (1)頭文件(KinectCommonBridgeLib.h)

        DLL中函數(shù)的聲明一般在頭文件中進行。其頭文件(KinectCommonBridgeLib.h)的定義及函數(shù)導(dǎo)出如下:

        KinectCommonBridgeLib.h:

        #ifdef _WIN32

        #ifdef DLL_EXPORTS

        #define KINECT_CB __declspec(dllexport)#else

        #define KINECT_CB __declspec(dllimport)#pragma comment(lib,“KinectCommonBridge.

        lib”)

        #endif

        #endif

        (2)函數(shù)的實現(xiàn)文件(KinectCommonBridge-Lib.cpp)

        在文件的首部添加代碼:#include“KinectCo-mmonBridgeLib.h”。借助#include語句把.h文件與相應(yīng).cpp文件聯(lián)系起來,然后通過編譯器對工程文件進行編譯、鏈接等過程,最終在工程的Debug文件夾下生成DLL文件(KinectCommonBridge.dll)。圖3是在Visual Studio平臺上用C++編譯生成KinectCommonBridge.dll的操作界面。

        圖3 生成KinectCommonBridge.dll的操作界面

        關(guān)鍵字_declspec(dllimport)指出用戶程序需要的函數(shù)在DLL中要導(dǎo)入的信息,而_declspec(dllexport)指出DLL中要導(dǎo)出的信息。

        2.3 動態(tài)鏈接庫(DLL)的引入與調(diào)用

        從MSDN了解到,DllImport是用來將特性化方法由非托管動態(tài)鏈接庫(DLL)作為靜態(tài)入口點公開。使用DllImport將C++類通過DLL引入到C#的方法是:

        (1)創(chuàng)建編譯文件,生成C++類的DLL;

        (2)調(diào)用這個DLL,將其放置到C#工程目錄下;

        (3)向C#工程中添加新類,在生成的cs文件中添加代碼。

        如圖4中,將C++創(chuàng)建的DLL放置到Unity項目中的工程目錄下。

        圖4 Unity3D項目中Plugins文件夾下的DLL

        例如在Unity項目中的C#腳本中使用DllImport導(dǎo)入KinectCommonBridge函數(shù)。如下:

        [DllImportAttribute(“KinectCommonBridge”,EntryPoint=“SetDebugFunction”,CallingConvention=CallingConvention.StdCall)]public static extern void SetDebugFunction(IntPtr fp);

        之后可以在C++插件中的任何地方調(diào)用這個函數(shù)。如在KinectCommonBridgeLib.cpp中:

        MyUnityDebug(“Create COM failed.”);

        MyUnityDebug(“The COM library is already initiali-zed on this thread.”)。

        3 Unity3D與Kinect聯(lián)調(diào)及結(jié)果

        本文使用一個將調(diào)試文本從C++插件重定向到Unity控制臺的方法。該方法是基于C#中的委托,委托可以被視為在C++中的一個函數(shù)指針的類型,可以從非托管代碼中調(diào)用。在C#中編寫函數(shù),它接受一個字符串作為它的參數(shù),并將其打印到Unity控制臺窗口,然后將這個函數(shù)的指針傳遞給C++類的DLL,所以,可以通過它的指針從C++調(diào)用該函數(shù),這會將字符串從C++重定向到日志窗口。

        首先定義一個像這樣的委托:

        using System.Runtime.InteropServices;

        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]

        public delegate void MyDelegate(string str);

        這是一個函數(shù)類型的委托,函數(shù)有一個字符串參數(shù),沒有返回值。然后編寫一個方法,可以從C++中調(diào)用它來打印日志字符串,這是一個Unity腳本文件的成員函數(shù)。

        static void CallBackFunction(string str)

        {

        Debug.Log(“::CallBaaaaaaack:”+str);

        }

        在Unity腳本的Start()函數(shù)中實例化這個被定義的委托:

        MyDelegate callback_delegate=new

        MyDelegate(CallBackFunction);

        IntPtr intptr_delegate=

        Marshal.GetFunctionPointerForDelegate(callback_delegate);

        AudioWrapper.SetDebugFunction(intptr_delegate);

        SetDebugFunction是一個方法,它把函數(shù)指針賦給另一個指針,該指針在C++代碼中定義。如下:

        typedef void(*FuncPtr)(const char *);

        FuncPtr MyUnityDebug;

        接著,可以訪問其他源代碼中的這個指針。如下:

        KINECT_CB void APIENTRY

        SetDebugFunction(FuncPtr fp)

        {

        MyUnityDebug=fp;

        }

        最后在C#代碼中使用Dllimport導(dǎo)入它。如上節(jié)所述,可在C++中調(diào)用該函數(shù)。圖5為用C# 腳本編程聲明并調(diào)用上面DLL封裝的函數(shù)時,Unity3D控制臺的運行界面部分打印信息。

        圖5 Unity3D控制臺聲明調(diào)用DLL的打印信息

        現(xiàn)在,運行Unity3D引擎,在不同的位置說話,可以看到實時獲取的聲源位置數(shù)據(jù)流。圖6為顯示在Unity3D系統(tǒng)中獲取聲源方位的交互界面畫面,圖7為實時聲源位置數(shù)據(jù)在調(diào)試窗口中的顯示。

        圖6 獲取聲源方位在Unity3D中的交互界面

        圖7 Unity3D調(diào)試窗口中顯示的實時數(shù)據(jù)

        表1為系統(tǒng)運行后隨機截取的實驗數(shù)據(jù)。

        表1 隨機截取實驗數(shù)據(jù)

        表中:beamAngle是方向性麥克風(fēng)(麥克風(fēng)陣列)對準聲音來源的角度;sourceAngle是經(jīng)過數(shù)學(xué)算法處理后,系統(tǒng)最終判定聲音來源的角度;sourceConfidence屬性值用來作為判定聲音強弱或聲音距離遠近的依據(jù)。Kinect能辨識的水平聲音來源為以傳感器為中心的±50°(共100°)。故系統(tǒng)顯示出的位置讀數(shù)皆是以傳感器中心位置為0的相對位置讀數(shù)。

        4 結(jié)束語

        測試表明,本研究利用Kinect傳感器的四元線性麥克風(fēng)陣列捕獲用戶聲音信號,并進行實時定位。采用Kinect設(shè)備與Unity3D引擎結(jié)合開發(fā)的相關(guān)資源包的工作方式,通過在VS平臺上封裝C++類的DLL,并在Unity項目上調(diào)用,將Kinect和Unity3D銜接起來,使其在Unity控制臺顯示實時的定位數(shù)據(jù)輸出,該數(shù)據(jù)流可供程序使用,彌補了Unity3D引擎缺乏人機聲音交互技術(shù)的不足,具有較大推廣價值。

        [1]劉興亮.互聯(lián)網(wǎng)的未來:聲音時代和體感時代[J].中國傳媒科技,2014(9):14-15.

        [2]韓雪,李澤滔,孫昊.基于Kinect傳感器的移動機器人聲源目標跟蹤系統(tǒng)[J].自動化與儀器儀表,2015(6):185-186.

        [3]王森.Kinect體感程序設(shè)計入門:使用C#和C++[M].北京:科學(xué)出版社,2014.

        [4]石曼銀.Kinect技術(shù)與工作原理的研究[J].哈爾濱師范大學(xué)自然科學(xué)學(xué)報,2013,29(3):83-86.

        [5]崔斌,陳亮,胡紅梅,等.基于Kinect的聲源定位時延獲取及算法性能研究[J].信息技術(shù),2014(10):103-107.

        [6]Dunlop R,Shepherd D,Martin M.Direct X 7速成教程[M].北京:機械工業(yè)出版社,2002.

        [7]Clark R,Pua Y H,Fortin K,et al.Validity of the Microsoft Kinect for Assessment of Postural Control[J].Gait & Posture,2012,36(3):372-377.

        (責(zé)任編輯:馬金發(fā))

        Sound Source Localization and Human-computer Interaction Techniques Based on Kinect in Unity3D

        YANG Zhu,WANG Hongyuan,CHEN Muyi

        (Shenyang Ligong University,Shenyang 110159,China)

        Kinect is a peripheral device for Xbox360 game console,which contains four non-symmetric linear microphone array.According to the microphones to receive sound signals delay inequality,the sound source position and angle are calculated.Unity3D is an integrated game engine to create a three-dimension video games,architectural visualization,real-time 3-dimension animations and other types of interactive contents.It lacks of advanced man-machine voice interactive feature.Therefore,the research develops a human-machine sound interaction interface of Unity3D based on Kinect.C++/C# mixed programming technology is adopted to encapsulate the functionality associated with Kinect for unmanaged C++dynamic link library(DLL),and then Unity3D engine,Kinect device and VS platform are concatenated with the DLL.Finally,position of sound source is identified and located for Kinect on Unity3D platform,which gets the real time data to be used for advanced human-computer interaction.

        Unity3D;Kinect;the sound source localization;linear microphone array;Human-Computer Interaction Techniques

        2016-05-18

        遼寧省教育廳一般項目(L2013083)

        楊竹(1991—),女,碩士研究生;通訊作者:王洪源(1963—),男,教授,研究方向:模擬仿真訓(xùn)練系統(tǒng)、區(qū)域數(shù)據(jù)鏈路體系結(jié)構(gòu)。

        1003-1251(2017)01-0085-06

        TP391

        A

        猜你喜歡
        麥克風(fēng)聲源調(diào)用
        虛擬聲源定位的等效源近場聲全息算法
        核電項目物項調(diào)用管理的應(yīng)用研究
        Binaural Rendering based on Linear Differential Microphone Array and Ambisonic Reproduction
        基于GCC-nearest時延估計的室內(nèi)聲源定位
        電子制作(2019年23期)2019-02-23 13:21:12
        基于數(shù)字麥克風(fēng)的WIFI語音發(fā)射機
        電子測試(2018年23期)2018-12-29 11:11:24
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        麥克風(fēng)的藝術(shù)
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        運用內(nèi)積相關(guān)性結(jié)合迭代相減識別兩點聲源
        麥克風(fēng)
        日韩乱码人妻无码中文字幕视频 | 在线亚洲精品免费视频| 亚洲乱码av乱码国产精品| 国产午夜毛片v一区二区三区| 伊人久久综合精品无码av专区| 国产视频嗯啊啊啊| 一本色道久久综合亚洲精品不| 成视频年人黄网站免费视频| 亚洲精品国产第一区二区尤物 | 91麻豆精品激情在线观看最新| 国产精品三级av一区二区| 日韩精品一区二区免费| 亚洲a∨无码一区二区三区| 五月天激情小说| 中文字幕乱码av在线| 亚洲国产精品高清在线 | 娇妻玩4p被三个男人伺候电影| 级毛片无码av| 免费一区二区在线观看视频在线| 日日天干夜夜狠狠爱| 日韩A∨精品久久久久| 日本中文字幕一区二区在线观看| 精品国产a一区二区三区v| 国产无套内射久久久国产| 欧美成人www免费全部网站| 国产成人亚洲精品一区二区三区 | 比比资源先锋影音网| 国产精品亚洲专区无码不卡| 国产白浆一区二区在线| 人妻少妇不满足中文字幕| 午夜毛片午夜女人喷潮视频| 97超碰中文字幕久久| 东北少妇不戴套对白第一次| 无码久久精品国产亚洲av影片| AV中文码一区二区三区| 蜜臀av一区二区三区久久| 无码少妇一区二区性色av| 欧美日韩中文字幕久久伊人| 久久久黄色大片免费看| 狠狠躁日日躁夜夜躁2020| 亚洲免费视频播放|