← Back to list

Orbbec Femto Bolt で Body Tracking, Kinect Fusion

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

Acculus,Inc. Sasao · 2024-05-13 09:52 · 0 claps · 13.2 min read
#orbbec #kinect #tof #cameras #3d
Open on Medium ↗
Wiki topics: ☁️ · DevOps & Cloud 🔓 · Open Source 📷 · Photography

Orbbec Femto Bolt で Body Tracking, Kinect Fusion

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

Kinect Fusion by Orbbec Femto Bolt

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