Orbbec Femto Bolt で Body Tracking, Kinect Fusion
MicrosoftのAzure Kinect DKの生産終了が発表され、その後継と言われ同じ1M iToFセンサを採用しAPI互換もあるOrbbec社Femtoシリーズがあり、動かしてみます。 主に Linux_x64 環境で実行しています。
Orbbec Femto Bolt で Body Tracking, Kinect Fusion
MicrosoftのAzure Kinect DKの生産終了が発表され、その後継と言われ同じ1M iToFセンサを採用しAPI互換もあるOrbbec社Femtoシリーズがあり、動かしてみます。 主に Linux_x64 環境で実行しています。

Kinect Fusion by Orbbec Femto Bolt
リンク集
Orbbec公式プロダクトページ https://www.orbbec.com/products/tof-camera/femto-bolt/ 公式Documentation https://www.orbbec.com/femto-bolt-document/ OrbbecSDK (github) https://github.com/orbbec/OrbbecSDK ハードウェア情報 (github) https://github.com/orbbec/OrbbecHardware
【機能比較】Azure Kinect DK と Orbbec Femto Bolt の違いは? https://www.tegakari.net/2023/09/compare-orbbec-femto-bolt-with-azure-kinect-dk/ 【事例紹介】Femto Boltを使用したユースケース(Orbbec社) https://www.tegakari.net/2024/04/orbbec-case-studies-vol1/ ORBBEC Femto Bolt の 動作検証 https://xr.systemfriend.co.jp/2024-02-05/
ビューアアプリ OrbbecViewer
https://github.com/orbbec/OrbbecSDK/releases から該当OSのOrbbecViewerをダウンロードします (私の場合はlinux_x64, v1.9.5 を用います, v1.10.5は不安定でした)
Linuxの場合はudev設定するため以下をまず実行します。 /etc/udev/rules.d に ファイル 99-obsensor-libusb.rules が置かれます。
sudo sh script/install.sh
FemtoをPCに接続し、Viewerを起動します。
./OrbbecViewer
最初の起動時のみエラーが出ていましたが、その後無事動作しました。 Color,Depth,IR,IMU,PointCloudを見ることができます。 Depth解像度はColorのFPSが30だと640x576より大きくできませんが、ColorのFPSを15にすると1024x1024を選べるようになります。
OrbbecViewerの詳細な説明は以下にあります。 https://github.com/orbbec/OrbbecSDK/blob/main/doc/OrbbecViewer/English/OrbbecViewer.md
OrbbecSDK Examles
まずはビルド済みサンプルを実行するため、https://github.com/orbbec/OrbbecSDK/releases から該当OSのOrbbecSDK_CC++…_release.zipをダウンロードします (私の場合はlinux_x64, v1.9.5 を用います)
cd Example/bin
./DepthViewer
各Exampleの説明はこちらにあります。 https://github.com/orbbec/OrbbecSDK/tree/main/examples https://github.com/orbbec/OrbbecSDK/blob/main/doc/tutorial/English/Code_Sample_Description/Sample_Description(C_C++).md APIドキュメントは以下です。 https://orbbec.github.io/OrbbecSDK/doc/api/English/index.html
サンプルコードのビルドと実行は以下で行うことができます。 ビルドにはOpenCVが必要で、パスを変えたい場合は cmakeコマンド引数に -DCMAKE_PREFIX_PATH=パス を付けます。
cd Example
mkdir -p build && cd build
cmake ..
make -j4
cd bin
./DepthViewer
K4A-Wrapper
従来のK4AのAPIでOrbbecSDKをラップしたAPIです。 https://github.com/orbbec/OrbbecSDK-K4A-Wrapper リリースされたものを使いたいところですが、Linuxの場合、そのままだと k4aviewer (従来のAzure Kinectビューアと同じ) が、エラーで動作しません。DepthEngineの初期化に失敗し、「 frame_queue_pop timeout」というエラーが出ます。README Q&A 3に書かれているように、修正してビルドする必要があります。
sudo apt install -y \
pkg-config \
ninja-build \
doxygen \
clang \
gcc-multilib \
g++-multilib \
python3 \
nasm
sudo apt install -y \
libgl1-mesa-dev \
libsoundio-dev \
libvulkan-dev \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libxrandr-dev \
libusb-1.0-0-dev \
libssl-dev \
libudev-dev \
mesa-common-dev \
uuid-dev
git clone https://github.com/orbbec/OrbbecSDK-K4A-Wrapper.git
cd OrbbecSDK-K4A-Wrapper/
git submodule update --init --recursive
tools/k4aviewer/k4adevicedockcontrol.cpp を修正します。 以下のようにStartCameras()の前後に3行を追加します。
if (enableCameras)
{
GLFWwindow *currentContext = glfwGetCurrentContext(); // 追加
glfwMakeContextCurrent(NULL); // 追加
bool camerasStarted = StartCameras();
glfwMakeContextCurrent(currentContext); // 追加
if (camerasStarted && m_config.EnableImu)
mkdir build && cd build
cmake ..
make -j8
cd bin
./k4aviewer
無事、以前のKinectビューアの画面が表示できました。
K4A Wrapper API ドキュメント https://orbbec.github.io/docs/OrbbecSDK_K4A_Wrapper/ 従来のKinect用アプリをOrbbecで動かすための説明書 https://orbbec.github.io/OrbbecSDK-K4A-Wrapper/src/orbbec/docs/Access_AKDK_Application_Software_with_Femto_Bolt.pdf
Azure Kinect Body Tracking SDK
https://www.orbbec.com/documentation/access-akdk-application-software-with-femto-bolt/ まずはBody Tracking SDK をダウンロードします。 https://learn.microsoft.com/ja-jp/azure/kinect-dk/body-sdk-download 以下コマンドでダウンロードできます。Ubuntuバージョンは21.04や22.04は無いため、18.04としてダウンロードしています。
curl -sSL -O https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update -y
sudo apt install libk4abt1.1-dev
# (libk4a1.4-dev も依存としてインストールされます)
# ライブラリ、ヘッダファイルなどがどこに配置されているか見ておきます
dpkg -L libk4abt1.1-dev
dpkg -L libk4abt1.1
dpkg -L libk4a1.4-dev
dpkg -L libk4a1.4
サンプルコード Azure-Kinect-Samples をダウンロードします。
git clone https://github.com/microsoft/Azure-Kinect-Samples.git
cd Azure-Kinect-Samples/body-tracking-samples
body-tracking-samples/CMakeLists.txt の先頭に以下を入れておきます。(std::optionalが無いというエラー回避のため)
add_definitions( -std=c++17 )
サンプルアプリ simple_3d_viewer をビルドします。
mkdir build && cd build
cmake ..
make simple_3d_viewer
ビルドが通ればOKですが、これはOrbbecではなくKinectを動かすための、libk4aを使ったものです。Orbbecは動作しません。OrbbecSDKに差し替える必要があります。
先ほどビルドした、OrbbecSDK-K4A-Wrapper のディレクトリパスを $ORBBEC_WRAPPERとします。 body-tracking-samples/CMakeLists.txt の先頭にさらに以下を追加します。
include_directories( $ORBBEC_WRAPPER/include )
link_directories( $ORBBEC_WRAPPER/build/lib )
# build/lib に、OrbbecSDKを使う、libk4a と libk4arecord があります
これで simple_3d_viewer を再ビルドすると、OrbbecSDKのほうのヘッダファイル・ライブラリファイルを使うようになります。 ライブラリの依存関係は以下のようにlddコマンドで調べることができます。
ldd simple_3d_viewer/simple_3d_viewer
Femtoカメラを接続した状態で、simple_3d_viewer を起動すると、3D骨格を検出するデモアプリを見ることができます。
simple_3d_viewer/simple_3d_viewer
Kinect Fusion
KinectFusionは2011年にMicrosoftから発表された、Depthカメラを用いてリアルタイムに3D表面を再構成する技術です。
[embed]
Azure-Kinect-Samples にはこのサンプルもあり、動かしてみます。 https://github.com/microsoft/Azure-Kinect-Samples/tree/master/opencv-kinfu-samples
OpenCVのkinfuというKinectFusion用APIを使っています。 https://docs.opencv.org/4.x/d8/d1f/classcv_1_1kinfu_1_1KinFu.html kinfuはOpenCVのバージョンによって変わるかもしれませんが、opencv_contribの中のrgbdモジュールの中に入っています。サンプルはこのrgbdモジュールとvizモジュールを必要としますので、これらが入ったOpenCVライブラリを用意しておく必要があります。私の場合はOpenCV4.5.5 を用います。 OpenCVのビルド時は、OPENCV_ENABLE_NONFREE の指定も必要です。
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules \
-D WITH_VTK=ON \
-D OPENCV_ENABLE_NONFREE=ON \
ビルドしたOpenCVを使って、 以下のようにopencv-kinfu-samplesを修正して、cmake ビルドします。
- CMakeLists.txt add_executable()の前に、前述の2行 include_directories(), link_directories() を追加。 target_link_libraries() に、opencv_core opencv_highgui を追加。
- main.cpp
define HAVE_OPENCV を有効化。
cd Azure-Kinect-Samples/opencv-kinfu-samples
mkdir build && cd build
cmake .. -DCMAKE_PREFIX_PATH=<OpenCVへのパス>
make -j4
./kinfu-example
私の環境では以下のように OpenCV kinfu 内でOpenCLのメモリ不足エラーになりました。
OpenCL error CL_OUT_OF_RESOURCES (-5) during call: clEnqueueNDRangeKernel('fillPtsNrm', dims=3, globalsize=512x512x512, localsize=8x8x16) sync=true
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to run kernel
そこで、main.cpp 454行目あたりの cv::setUseOptimized() を true ではなくfalseにして、CPU実行にします。低速になりますが、これで無事動きました。
setUseOptimized(false);

複数カメラ間の同期
Femtoには8pinの同期ポートがあり、専用ケーブルで接続して、複数カメラ間の同期が可能になっています。Kinectは3.5mm audio-cableでの同期接続でしたがそれよりも高精度とのことです。 https://www.orbbec.com/documentation/synchronize-multiple-femto-bolt-devices/ カメラ間同期も今後試したいと思います。(どなたか、同期ケーブル・ハブをお持ちではありませんか?)
最後に
当社では、ToFカメラ向けソフトウェアの受託開発の他、独自エッジAIカメラも発表しています。お気軽にご連絡ください。 株式会社Acculus 笹尾 https://acculus.jp/mini-watt-vision
메타데이터
- post_id
- 52c69b613d53
- slug
- orbbec-femto-bolt-で-body-tracking-kinect-fusion-52c69b613d53
- url
- https://medium.com/@Acculus_Sasao/orbbec-femto-bolt-%E3%81%A7-body-tracking-kinect-fusion-52c69b613d53
- canonical_url
- https://medium.com/@Acculus_Sasao/orbbec-femto-bolt-%E3%81%A7-body-tracking-kinect-fusion-52c69b613d53
- author_url
- https://medium.com/@Acculus_Sasao
- status
- ok
- fetched_at
- 2026-07-23 21:04:19