Azure Kinect 使用记录 (二)
20211118 - 占坑
因项目需要,得用Azure Kinect以及它的SDK进行开发,在这里记录下心得体会,不定时更新
一、多机位同步
1.1 Timecode
这里就必须了解一下时间码 (aka Time code) 。时间码这种东西是面向特定人群的,例如影视拍摄,所以我又成门外汉了doge。简单来说,就是每帧的时刻,比如第一帧是 00 : 00 : 00 00:00:00 00:00:00,第二帧就是 00 : 00 : 02 00:00:02 00:00:02(这里我乱写的,这是可以算出来的)。
然后呢?这就会出现一个问题,因为机器的内部时钟是不一样的,我认为的12点不是你认为的12点。所以拍出来的东西有可能是对不上的,即虽然大家都是12点,但我拍到的是我在吃饭,你拍到的是我在喝水。
那该怎么办呢,这里有两种技术,一是时码器 (TC generator),两台机器的内部时钟不一致,我就提供一个一致的时钟不就好了,所以TC generator能让两台机器拍出来的帧的时间是绝对一一对应的,例如机位一拍出来的 T T T帧与机位二拍出来的 T T T帧是同一时刻的。二是Genlock,是存在于相机内部的,能够让各个机位的快门帘同时放下,也是需要一个外部设备提供脉冲信号,让Genlock工作。
这里贴一个科普视频,我感觉挺好的,【拍摄利器】Timecode system 时码器 测评 from Bilibili,这个图也是出自于此。
而Kinect这里用耳机线来同步,也是同样的道理。
1.2 Kinect 时码同步
这里是官方中文教程,点我,里面提到了两种主从 (aka, master-slave) 配置,就是说,按照master的时间码来录制视频。Out
是Master,In
是Slave。
把外壳拆开接上就好(包装里面是有一个小快拆扳手的,拆包装的时候别弄丢了)。
这里需要注意一点(三点)的就是:
- 耳机线不能长于10米
- usb必须接3.0的口,而且
- 无源线不能长于1.5m
- 有源线就无所谓了,甚至还可以供电
- 要用pci usb卡,usb hub什么的就不要来了,这里就是计算机组成原理的基本知识了,大概就是,水管无论分多少,它的源头都是固定的
- 可能需要关闭自动曝光
1.3 上机测试
把设备正确接上后,打开Azure Kinect Viewer
,需要看到所有启用的设备,如下图所示。
然后随便选一个打开,如下图,在红框中可以看到In / Out
中的Out
是选上的,也就是说,这个设备是Master,这时需要再打开一个Azure Kinect Viewer
,选择另一个Slave,如下图,需要先操作Slave,再操作Master。
另起一个Azure Kinect Viewer
可以发现,在线设备就只有Slave一个了,打开设备后,如下图,可以看到这个Slave设备的In / Out
中的In
是选上的,因此分别将Slave使用的Sub
和Master使用的Master
依次选中,然后先启用Slave,可以看到没有画面,它在下方黄字也提示会没有画面的,然后再启用Master,就可以看到画面了。
1.4 录制同步视频
这里有录制教程,点我,这里把命令行的选项全部贴出来。
k4arecorder [options] output.mkv
Options:
-h, --help Prints this help
--list List the currently connected K4A devices
--device Specify the device index to use (default: 0)
-l, --record-length Limit the recording to N seconds (default: infinite)
-c, --color-mode Set the color sensor mode (default: 1080p), Available options:
3072p, 2160p, 1536p, 1440p, 1080p, 720p, 720p_NV12, 720p_YUY2, OFF
-d, --depth-mode Set the depth sensor mode (default: NFOV_UNBINNED), Available options:
NFOV_2X2BINNED, NFOV_UNBINNED, WFOV_2X2BINNED, WFOV_UNBINNED, PASSIVE_IR, OFF
--depth-delay Set the time offset between color and depth frames in microseconds (default: 0)
A negative value means depth frames will arrive before color frames.
The delay must be less than 1 frame period.
-r, --rate Set the camera frame rate in Frames per Second
Default is the maximum rate supported by the camera modes.
Available options: 30, 15, 5
--imu Set the IMU recording mode (ON, OFF, default: ON)
--external-sync Set the external sync mode (Master, Subordinate, Standalone default: Standalone)
--sync-delay Set the external sync delay off the master camera in microseconds (default: 0)
This setting is only valid if the camera is in Subordinate mode.
-e, --exposure-control Set manual exposure value (-11 to 1) for the RGB camera (default: auto exposure)
那么我该怎么录个多机位同步视频呢,参考教程,大概是这样的命令,这里就是提供一个示例。
.\k4arecorder.exe --list
.\k4arecorder.exe --device 1 -l 5 --external-sync Subordinate --imu OFF output_1.mkv
或者
.\k4arecorder.exe --device 1 --external-sync sub -e -8 -r 5 -l 10 sub1.mkv
以及
.\k4arecorder.exe --device 0 --external-sync master -e -8 -r 5 -l 10 master.mkv
然后用Azure Kinect Viewer
就可以查看了。它这个MKV内部封装了深度等信息,所以这个录出来的文件就有点大了。
这里有个视频,应该是我的下一步目标:Azure Kinect calibration with multiple cameras.,看起来就是通过人体骨骼以及自带的imu来校准kinect在unity世界坐标系下的相应位置。
二、Openpose测试
未完待续