Kinect2+Opencv繪製聲源定位方向
沒什麼事兒做給之前的Kinect2聲源定位功能加上一個小的圖形化介面,效果如下圖所示:
Kinect2的SDK會返回聲源相對於Kinect2正前方的角度,例如我在畫面中偏左,角度自然就偏左,大小為-0.52。
對於聲音,Kinect2這塊最重要的有兩個引數,一個是角度,另一個是確信度,如果對Opencv不感興趣就直接拖到最後看聲源定位的程式碼。
用手機錄製聲音,動態顯示如下:
下面自然就是準備工作啦。
首先需要Kinect2+Opencv的配置環境工作,詳情見上部落格:
配置完之後,貼上程式碼應該就可以了……
全部程式碼如下:
#include<iostream> #include<opencv2\opencv.hpp> #include "kinect.h" #include<string> using namespace cv; void 畫方向圖(Mat 圖片,float 方向,float 確信度); int main() { IKinectSensor* 一個Sensor; //申請一個Sensor指標 HRESULT hr = GetDefaultKinectSensor(&一個Sensor); // 獲取一個預設的Sensor BOOLEAN bIsOpen = 0; 一個Sensor->get_IsOpen(&bIsOpen); // 檢視下是否已經開啟 printf("bIsOpen: %d\n", bIsOpen); if (!bIsOpen) // 沒開啟,則嘗試開啟 { hr = 一個Sensor->Open(); } bIsOpen = 0; 一個Sensor->get_IsOpen(&bIsOpen); // 是否已經開啟 printf("bIsOpen: %d\n", bIsOpen); BOOLEAN bAvaliable = 0; 一個Sensor->get_IsAvailable(&bAvaliable); // 是否可用 printf("bAvaliable: %d\n", bAvaliable); // DWORD dwCapability = 0; // 一個Sensor->get_KinectCapabilities(&dwCapability); // 獲取容量 // printf("dwCapability: %d\n", dwCapability); // WCHAR bbuid[256] = { 0 }; // 一個Sensor->get_UniqueKinectId(256, bbuid); // 獲取唯一ID // printf("UID: %s\n", bbuid); // 音訊資料獲取 IAudioSource* audios = nullptr; UINT nAudioCount = 0; hr = 一個Sensor->get_AudioSource(&audios); IAudioBeam* audiobm = nullptr; IAudioBeamList* audiobml = nullptr; audios->get_AudioBeams(&audiobml); audiobml->OpenAudioBeam(0, &audiobm); // 目前只支援第一個 float fAngle = 0.0f; float fAngleConfidence = 0.0f; while (waitKey(30)!=27) { Mat img(200, 400, CV_8UC3, Scalar(255, 255, 255)); // circle(img, Point(200, 0), 100, Scalar(0, 0, 0)); fAngle = 0.0f; fAngleConfidence = 0.0f; audiobm->get_BeamAngle(&fAngle); // 獲取音訊的角度 audiobm->get_BeamAngleConfidence(&fAngleConfidence); // 獲取音訊的可信度(0 - 1) 畫方向圖(img, fAngle, fAngleConfidence); imshow("", img); } 一個Sensor->Close(); return 0; } void 畫方向圖(Mat 圖片,float 方向, float 確信度) { circle(圖片, Point(200,0), 100, Scalar(0, 0, 0)); Point 朝向; 朝向.x = 100 * sin(方向)+200; 朝向.y = 100 * cos(方向) ; if (確信度 > 0.5) line(圖片, Point(200,0), 朝向, Scalar(0, 0, 255)); std::string 顯示內容 = "angle:" + std::to_string(方向) + " confidence:" + std::to_string(確信度); putText(圖片, 顯示內容, Point(20, 180), CV_FONT_HERSHEY_PLAIN, 1, cv::Scalar(255, 0, 0), 1, 4); }
單獨Kinect2聲源定位模組(返回的角度以及確信度)
#include<iostream> #include "kinect.h" int main() { IKinectSensor* 一個Sensor; //申請一個Sensor指標 HRESULT hr = GetDefaultKinectSensor(&一個Sensor); // 獲取一個預設的Sensor BOOLEAN bIsOpen = 0; 一個Sensor->get_IsOpen(&bIsOpen); // 檢視下是否已經開啟 printf("bIsOpen: %d\n", bIsOpen); if (!bIsOpen) // 沒開啟,則嘗試開啟 { hr = 一個Sensor->Open(); } bIsOpen = 0; 一個Sensor->get_IsOpen(&bIsOpen); // 是否已經開啟 printf("bIsOpen: %d\n", bIsOpen); BOOLEAN bAvaliable = 0; 一個Sensor->get_IsAvailable(&bAvaliable); // 是否可用 printf("bAvaliable: %d\n", bAvaliable); // 音訊資料獲取 IAudioSource* audios = nullptr; UINT nAudioCount = 0; hr = 一個Sensor->get_AudioSource(&audios); IAudioBeam* audiobm = nullptr; IAudioBeamList* audiobml = nullptr; audios->get_AudioBeams(&audiobml); audiobml->OpenAudioBeam(0, &audiobm); // 目前只支援第一個 float fAngle = 0.0f; float fAngleConfidence = 0.0f; while (waitKey(30)!=27) { Mat img(200, 400, CV_8UC3, Scalar(255, 255, 255)); circle(img, Point(200, 0), 100, Scalar(0, 0, 0)); fAngle = 0.0f; fAngleConfidence = 0.0f; audiobm->get_BeamAngle(&fAngle); // 獲取音訊的角度 audiobm->get_BeamAngleConfidence(&fAngleConfidence); // 獲取音訊的可信度(0 - 1) printf("Angle: %3.2f (%1.2f)\n", (fAngle / 3.1415926f)*180.0f, fAngleConfidence); Sleep(200); } 一個Sensor->Close(); return 0; }
//女票看完電影了,我先撤啦~本來還想再寫兩句的
祝開發愉快~
相關推薦
Kinect2+Opencv繪製聲源定位方向
沒什麼事兒做給之前的Kinect2聲源定位功能加上一個小的圖形化介面,效果如下圖所示: Kinect2的SDK會返回聲源相對於Kinect2正前方的角度,例如我在畫面中偏左,角度自然就偏左,大小為-0.52。 對於聲音,Kinect2這塊最重要的有兩個引數,一個是角度
AliOS Things聲源定位應用演示
lcd disco 使用 操作 傳感器 原理 ESS 語音 對數 摘要: 1. 概述 利用麥克風陣列進行聲源定位在智能降噪、語音增強、語音識別等領域有廣泛應用和研究前景。本文介紹基於AliOS Things + STM32F413H Discovery開發板實現聲源定位算法
AliOS Things 聲源定位應用演示
調試 sensor dev display res 開發 分支 cat 並且 摘要: 1. 概述 利用麥克風陣列進行聲源定位在智能降噪、語音增強、語音識別等領域有廣泛應用和研究前景。本文介紹基於AliOS Things + STM32F413H Discovery開發板實現
麥克風陣列聲源定位實現
麥克風陣列音源定位系統是利用麥克風陣列接收音訊,然後經由適當的演演算法估算出音源入射麥克風陣列的方向角,即判斷出音源的位置方向。本專題著重於此演演算法的程式撰寫,並實際測試二維及三維空間中單一音源入射的方向角,期望於演算速度及準確度上能有最好的效果。此係統完成後
人工智慧領域中聲源定位的研究與發展------第一章 緒論
1.1 引言 在人工智慧領域中,聽覺與視覺相比,仍舊處在一個初期階段的研究課題。隨著時代的發展,聽覺已經成為人工智慧領域中重要的研究課題。它是智慧機器人的重要標誌之一,也是實現人機互動,與環境互動的重要手段。 在之前機器人的導航主要使用測距感測
OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼
one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查
Python中導入第三方聲源庫Acoular的邏輯解釋以及Acoular的下載
介紹 entry AR image 點擊 com fig 數據包 管理器 【聲明】歡迎轉載,但請保留文章原始出處→_→ 秦學苦練:http://www.cnblogs.com/Qinstudy/ 文章來源:http://www.cnblogs.com/Qinstudy/p
OpenCV繪製多邊形和區域填充
OpenCV繪製多邊形和區域填充 繪製多邊形和區域填充主要用到了2個函式:polylines()和fillPoly()函式。 程式碼如下: #include<opencv2/opencv.hpp> #include<vector> #include <i
OpenCV 繪製正多邊形
OpenCV 繪製正多邊形 #include <iostream> #include <opencv2\core\core.hpp> #include <opencv2\opencv.hpp> #include <open
有源定位與無源定位
當衛星導航系統使用有源時間測距來定位時,使用者終端通過導航衛星向地面 控制中心發出一個申請定位的訊號,之後地面控制中心發出測距訊號,根據訊號 傳輸的時間得到使用者與兩顆衛星的距離。除了這些資訊外,地面控制中心還有一 個數據庫,為地球表面各點至地球球心的距離,當認定使用者也在此不均勻球面的
OpenCV繪製文字的程式碼及Mat/IplImage的轉換
特別注意IplImage與Mat的轉換。 static void draw_count(FrameData* pFrame) { CvSize size; if (!(pFrame->buffer.data)) { return; }
Android 繪製上下,左右方向顏色背景漸變 shape
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient
opencv繪製圖形輪廓並篩選面積操作
1、 類比halcon的篩選區域面積的操作select_shape運算元,opencv也可以對圖形的輪廓進行面積的篩選,剔除無效區域。 int main() { Mat srcImage = imread("D:\\Opencv\\Project\\ConnectionPr
OpenCV 繪製人臉檢測框和關鍵點
在做人臉檢測時,我們需要將檢測的結果繪製到圖片上檢視效果,這時可以利用 OpenCV 的基本繪圖函式將人臉檢測框和人臉關鍵點繪製到原圖上。 關鍵程式碼如下: // TODO FaceDetectEngine 初始化 cv::Mat image = cv::im
python opencv繪製多邊形和多邊形填充
import numpy as np import cv2 import matplotlib.pyplot as plt a = np.array([[[10,10], [100,10], [100,100], [10,100]]], dtype = np.int32)
[譯文]JOAL教程 第五課 多聲源共享緩衝區
[譯文]JOAL教程 原文作者:Athomas Goldberg 譯文:三向板磚 轉載請保留以上資訊。 第五課 多聲源共享緩衝區 本文是DevMaster.net(http://devmaster.net/)的OpenAL教程對應的JOAL版本。C語言版原文作者為
JOAL學習筆記 第五課 多聲源共享緩衝區
JOAL學習筆記 先是例行的連續內碼表 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.ByteBu
OpenCV——繪製填充輪廓drawContours
vector<vector<Point> > contours; contours.push_back(currentFrameEdge); Mat savedGrayMat = Mat::zeros(RectData[0].rows, RectData[0].cols, CV_
OpenCV單目視覺定位(測量)系統(新增 含程式碼)
OpenCV單目視覺定位(測量)系統 The System of Vision Location with Signal Camera Abstract:This passage mainly describes how to locate with signalcame
OpenCV繪製朱利亞(Julia)集合圖形
朱利亞集合是一個在複平面上形成分形的點的集合。以法國數學家加斯頓·朱利亞(Gaston Julia)的名字命名。 朱利亞集合可以由下式進行反覆迭代得到: 對於固定的複數c,取某一z值(如z = z0),可以得到序列 這一序列可能反散於無窮大或始終處於某一範圍之內並收斂