1. 程式人生 > >Kinect2+Opencv繪製聲源定位方向

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),可以得到序列  這一序列可能反散於無窮大或始終處於某一範圍之內並收斂