最新一代Kinect DK的python接口实现(深度图+RGB+IMU)

这里写自定义目录标题

  • Kinect DK的开发生态
  • 准备工作1:Azure Kinect 传感器 SDK 下载
  • 准备工作2:环境配置
  • 上手python接口
  • 深度图+RGB
  • kinect dk参数调整
  • 写在最后

Kinect DK的开发生态

因为是微软19年的深度相机,采用TOF采集深度图像,硬件强大。但是官方只有基于C++的开发环境,也有一部分博主提供了很好的开发示例,但是VS的环境配置和编译对我实在是不太友好,于是放弃,。。相比于Intel D435 真是差的太多了。
用起来实在是没有python接口方便,但是我在中外网站找了一圈也始终没有找到能让我可以进行开发的版本。
终于在经过了漫长的寻找和搜索之后,我在GitHub上找到了大神给我的满意答案。以下是原文的网址:
https://github.com/ibaiGorordo/pyKinectAzure

准备工作1:Azure Kinect 传感器 SDK 下载

微软的网站介绍 的非常详细,大家可以自行根据版本下载,目前最新的是Azure Kinect SDK v1.4.0 也是GitHub原作者推荐使用的版本
https://docs.microsoft.com/zh-cn/azure/kinect-dk/sensor-sdk-download

安装使用网上教程很多,不过建议大家刷新一下固件,即准备固件更新。这样一些它自带的指令运行起来不容易报错。
https://docs.microsoft.com/zh-cn/azure/kinect-dk/update-device-firmware

ps:sdk默认的安装路径是C盘,其中有个k4arecorder.exe 录制功能,该功能强大,可以同时将深度和RGB录制下来,但是我在尝试录制时,一直报错,其中一个原因是因为 软件权限不够,没办法在C盘进行读写操作,后来修改win10默认安装路径,换到D盘得到解决。
录制操作指南:
https://docs.microsoft.com/zh-cn/azure/kinect-dk/record-sensor-streams-file

**这里提一下,不知道是不是必要,因为很多类似的都要用到,将 C:\Program Files\Azure Kinect SDK v1.4.0\sdk\windows-desktop\amd64\release\bin 加到环境变量的PATH路径里去 ** 主要是要用到 k4a.dll

准备工作2:环境配置

ctypes:读取库所需。
numpy:矩阵计算所需
opencv-python:图像转换和可视化所需。

这里大家可以根据网上的相关教程一一配置。

不过在这里我提供一个方便的思路。因为做深度学习,所以在电脑上配置了tensorflow的环境,该环境是用 anaconda +pip创建的环境,该环境下什么杂七杂八的东西,都只需要控制台一条pip install ###指令解决,所以该环境用起来很爽,也方便我接下来做目标识别。
这里大家可以自行在网上搜索 anaconda+tensorflow 的配置。

配置好相关环境后,然后在使用python接口时也不要忘记了,激活之前创建的环境:
activate tensorflow
如下图:
最新一代Kinect DK的python接口实现(深度图+RGB+IMU)_第1张图片
这样就可以在创建的环境里为所欲为!实在不行就把环境的文件夹整个删除,重新创建即可。
在这个名为tensorflow的环境中,我们根据需要,用pip 下载配置ctypes、numpy。python和opencv其实是tensorflow安装必备的,所以anaconda在创建环境的时候就准备好了。

上手python接口

1。打开cmd控制台
2。然后激活之前配置的tensorflow环境(如果使用了其他配环境的方法请忽略)

activate tensorflow

3。把github代码复制过来

git clone https://github.com/ibaiGorordo/pyKinectAzure.git

4。cd到目录下

cd pyKinectAzure/examples

5。运行示例程序: (仅显示rgb视频流)

python exampleColorImageOpenCV.py

如果想中止,可以 用 ctrl+c

其他示例程序:

python exampleDepthImageOpenCV.py

python exampleInfraredImageOpenCV.py

python exampleRealTimeIMU.py

已经实现的功能和未来要做的工作计划如下图:
最新一代Kinect DK的python接口实现(深度图+RGB+IMU)_第2张图片

ps:如果有些源码看不懂推荐看微软c的源码,这样就知道为啥要这样调用了;
微软源码网址(建议用谷歌浏览器):
https://microsoft.github.io/Azure-Kinect-Sensor-SDK/master/structk4a__device__configuration__t.html.

深度图+RGB

根据作者代码的启发,我写了test.py 用以同时显示两种图,

import sys
sys.path.insert(1, '../pyKinectAzure/')

import numpy as np
from pyKinectAzure import pyKinectAzure, _k4a
import cv2

# Path to the module
# TODO: Modify with the path containing the k4a.dll from the Azure Kinect SDK
modulePath = 'C:\\Program Files\\Azure Kinect SDK v1.4.0\\sdk\\windows-desktop\\amd64\\release\\bin\\k4a.dll'

if __name__ == "__main__":

	# Initialize the library with the path containing the module
	pyK4A = pyKinectAzure(modulePath)

	# Open device
	pyK4A.device_open()

	# Modify camera configuration
	device_config = pyK4A.config
	device_config.color_resolution = _k4a.K4A_COLOR_RESOLUTION_1080P
	device_config.depth_mode = _k4a.K4A_DEPTH_MODE_WFOV_2X2BINNED
	print(device_config)

	# Start cameras using modified configuration
	pyK4A.device_start_cameras(device_config)

	k = 0

	while True:
		# Get capture
		pyK4A.device_get_capture()

		# Get the color image from the capture
		depth_image_handle = pyK4A.capture_get_depth_image()


		if depth_image_handle:

			# Read and convert the image data to numpy array:
			depth_image = pyK4A.image_convert_to_numpy(depth_image_handle)

			# Convert depth image (mm) to color, the range needs to be reduced down to the range (0,255)
			depth_color_image = cv2.applyColorMap(np.round(depth_image/30).astype(np.uint8), cv2.COLORMAP_JET)

			# Plot the image
			cv2.namedWindow('Colorized Depth Image',cv2.WINDOW_NORMAL)
			cv2.imshow('Colorized Depth Image',depth_color_image)
			k = cv2.waitKey(25)

			# Release the image
			pyK4A.image_release(depth_image_handle)

		color_image_handle = pyK4A.capture_get_color_image()
		# Check the image has been read correctly

		if color_image_handle:

			# Read and convert the image data to numpy array:
			color_image = pyK4A.image_convert_to_numpy(color_image_handle)

			# Plot the image
			cv2.namedWindow('Color Image', cv2.WINDOW_NORMAL)
			cv2.imshow("Color Image", color_image)
			k = cv2.waitKey(20)
			# Release the image
			pyK4A.image_release(color_image_handle)



		pyK4A.capture_release()

		if k==27:    # Esc key to stop
			break

	pyK4A.device_stop_cameras()
	pyK4A.device_close()

运行效果:

kinect dk参数调整

认准config.py 根据需要自行调整
最新一代Kinect DK的python接口实现(深度图+RGB+IMU)_第3张图片

class config:
	def __init__(self,
				color_format=_k4a.K4A_IMAGE_FORMAT_COLOR_MJPG,
				color_resolution=_k4a.K4A_COLOR_RESOLUTION_1080P,
				depth_mode=_k4a.K4A_DEPTH_MODE_WFOV_2X2BINNED,
				camera_fps=_k4a.K4A_FRAMES_PER_SECOND_30,
				synchronized_images_only=False,
				depth_delay_off_color_usec=0,
				wired_sync_mode=_k4a.K4A_WIRED_SYNC_MODE_STANDALONE,
				subordinate_delay_off_master_usec=0,
				disable_streaming_indicator=False):

写在最后

作为我的第一篇博文,小小的纪念一下!内心还是有点小激动的,写这个目的是因为,本人做kinect DK开发时,相关的python 生态实在太少,非常不好用,也希望我这里能够抛转引玉,能够有更多的人开发出更好用的编程生态。一起加油吧!
大家如果有碰到什么困难欢迎留言交流。

你可能感兴趣的:(深度相机,python,kinect,windows,azure)