因为是微软19年的深度相机,采用TOF采集深度图像,硬件强大。但是官方只有基于C++的开发环境,也有一部分博主提供了很好的开发示例,但是VS的环境配置和编译对我实在是不太友好,于是放弃,。。相比于Intel D435 真是差的太多了。
用起来实在是没有python接口方便,但是我在中外网站找了一圈也始终没有找到能让我可以进行开发的版本。
终于在经过了漫长的寻找和搜索之后,我在GitHub上找到了大神给我的满意答案。以下是原文的网址:
https://github.com/ibaiGorordo/pyKinectAzure
微软的网站介绍 的非常详细,大家可以自行根据版本下载,目前最新的是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
ctypes:读取库所需。
numpy:矩阵计算所需
opencv-python:图像转换和可视化所需。
这里大家可以根据网上的相关教程一一配置。
不过在这里我提供一个方便的思路。因为做深度学习,所以在电脑上配置了tensorflow的环境,该环境是用 anaconda +pip创建的环境,该环境下什么杂七杂八的东西,都只需要控制台一条pip install ###指令解决,所以该环境用起来很爽,也方便我接下来做目标识别。
这里大家可以自行在网上搜索 anaconda+tensorflow 的配置。
配置好相关环境后,然后在使用python接口时也不要忘记了,激活之前创建的环境:
activate tensorflow
如下图:
这样就可以在创建的环境里为所欲为!实在不行就把环境的文件夹整个删除,重新创建即可。
在这个名为tensorflow的环境中,我们根据需要,用pip 下载配置ctypes、numpy。python和opencv其实是tensorflow安装必备的,所以anaconda在创建环境的时候就准备好了。
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
ps:如果有些源码看不懂推荐看微软c的源码,这样就知道为啥要这样调用了;
微软源码网址(建议用谷歌浏览器):
https://microsoft.github.io/Azure-Kinect-Sensor-SDK/master/structk4a__device__configuration__t.html.
根据作者代码的启发,我写了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()
运行效果:
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 生态实在太少,非常不好用,也希望我这里能够抛转引玉,能够有更多的人开发出更好用的编程生态。一起加油吧!
大家如果有碰到什么困难欢迎留言交流。