MediaPipeの動作環境の構築
解説
Jetson Orin Nano で、「画像から人の骨格の推定」の動作環境を構築する方法についてまとめます。
動作環境のベースとなる環境として、NVIDIA社から提供されているDockerイメージの中から、機械学習開発用のDockerイメージ「L4T
JetPack」を利用します。
このページでは、MediaPipe の動作環境を構築します。
前提
MediaPipe の処理の中には、多くのメモリを必要とする処理、多くの計算能力を必要と処理もあります。またディスク容量は多いにこしたことはありません。
これらを踏まえ、以下を実施済みの状態の Jetson Orin Nano を前提とします。
- ブートデバイスのNVMe SSDへの変更
- Jetson Orin Nano の既定のブートデバイスは、SDカードです。SDカードは、読み書きの速度が速くはなく、また、ディスク容量も多くはありません。ブートデバイスをNVMe
SSDに変更しておきます。
参考)
・Jetson Orin Nano で日本語LLMを動かしてみた
・Jetson Orin NanoのNVMe SSDを使ったOSイメージのセットアップ手順 #NVIDIA - Qiita
・Jetson Orin Nano開発者キットでHシリーズNVMe SSDを使う! │ HAGIWARA Solutions - デスクトップ環境の無効化
- デスクトップ環境は多くのメモリを必要としますが、MediaPipe の動作においては必要ないので、無効化しておきます。
参考)
・Memory optimization - NVIDIA Jetson AI Lab
・Jetson Orin Nano で日本語LLMを動かしてみた
・Llama 2をJetson Orin Nanoで起動してみる #LLM - Qiita - その他サービスを無効化
- カメラ機能を使うときに動くバックグラウンドサービス「nvargus-daemon.service」は必要ないので、無効化しておきます。
参考)
・Memory optimization - NVIDIA Jetson AI Lab
・Jetson Orin Nano で日本語LLMを動かしてみた
・Llama 2をJetson Orin Nanoで起動してみる #LLM - Qiita - スワップ領域の拡張
- Jetson Orin Nano は既定では、ZRAMと呼ばれる領域に3.2Gほどのスワップ領域が作成されています。16GBのスワップ領域をNVMe
SSD上に作成しておきます。また、ZRAMは無効化しておきます。
参考)
・スワップ領域の確認と拡張 - hiramine.com
・Memory optimization - NVIDIA Jetson AI Lab
・Jetson Orin Nano で日本語LLMを動かしてみた
・Llama 2をJetson Orin Nanoで起動してみる #LLM - Qiita
使用した Jetson Orin Nano は、以下についても実施済みです。
- Webカメラの接続
- JetsonにWebカメラを接続しておきます。
- Sambaのインストール と設定
- 別のマシンから、ファイル操作をできるようにしておくと、何かと便利なので、Sambaをインストールしておきます。
「/home/(ログインユーザー名)」のディレクトリをSamba共有しておきます。
参考)
・Sambaのインストールと設定と接続
AIアプリケーション開発用のDockerイメージ
NVIDIA社から提供されているDockerイメージの中から、Jetsonに最適化されたAIアプリケーション開発用のDockerイメージ「L4T
JetPack」を利用することとします。
(補足:
機械学習開発用のDockerイメージ「L4T ML」の利用も選択肢となりますが、「L4T ML」はインストール済みのライブラリが多く、新たなライブラリのインストールの際に、ライブラリの互換性の問題が生じる可能性が高くなります。インストール済みのライブラリの少ない「L4T
JetPack」を利用することとしました。)
提供元ページは以下です。
NVIDIA L4T JetPack | NVIDIA NGC
※L4T : Linux for Tegra の略です。Jetson Linuxのことです。Jetson Linuxは、以前は、Linux for
Tegraという名称でした。Tegraとは、NVIDIA社のSoCシリーズの名前です。Jetsonシリーズは、NVIDIAのTegraを搭載しています。
※JetPack : Jetson モジュール上でハードウェア アクセラレーションを活用したエッジ AI 開発を行うための包括的なソリューションの名称です。
※ML : Machine Learningの略です。機械学習のことです。
コンテナ起動コマンド
機械学習用のDockerイメージ「L4T JetPack」の起動コマンドは、提供元ページに記載があり、以下です。
コマンドオプション解説
- -it
- インタラクティブモードで実行します
- --rm
- コンテナを終了したらコンテナを削除します。(コンテナを終了してもコンテナを削除したくない場合は、このオプションは外します)
- --runtime nvidia
- l4t-base コンテナの実行中に NVIDIA コンテナランタイムを使用します。
- --network host
- コンテナが Jetson ホストのネットワークとポートを使用できるようにします。
イメージのタグの確認
コンテナ起動コマンドの「<tag>」については、実行する Jetson Orin Nano の環境に合わせたタグを指定する必要があります。
まず、「OSバージョンの確認」等を参考に、Jetson Linux とJetPackのバージョンを確認します。
使用している Jetson Orin Nano の、Jetson Linux のバージョンは、 36.4.4 で、JetPackのバージョンは、 6.2.1 でした。
続いて、環境に合わせたタグを、提供元ページ「NVIDIA L4T JetPack | NVIDIA NGC」から確認します。
2025年8月13日現在、Jetson Linux のバージョン 36.4.4 のタグは存在しないため、Jetson Linux のバージョン
36.4.0 のタグ「r36.4.0」を使用します。
コンテナにマウントするホスト側のディレクトリの作成
作業用ディレクトリを作成します。作成したディレクトリは、コンテナにマウントします。
以下のコマンドを実行し、ディレクトリを作成します。今回はユーザーのホームディレクトリ下に「work-l4t-jetpack-mediapipe」というフォルダを作成することとしました。
(機械学習用のDockerイメージ「L4T JetPack」(l4t-jetpack)を利用した「MediaPipe」(mediapipe)の動作環境が構築されたコンテナの作業用(work)のディレクトリ)
ホストのディレクトリをコンテナにマウントしてコンテナを起動するコマンドの書式は以下です。
コンテナ起動スクリプトファイルの作成
コンテナ起動コマンドは文字数が多いので、実行する際にタイピングするのが少し面倒です。短い文字数のタイピングで実行できるようにスクリプトファイル化します。
今回は「docker-run-mediapipe.sh」というスクリプトファイルを作成することとしました。
「docker-run-mediapipe.sh」というスクリプトファイルを作成し、内容を以下のようにします。
コマンドオプション解説
- -it
- インタラクティブモードで実行します
- --runtime nvidia
- l4t-base コンテナの実行中に NVIDIA コンテナランタイムを使用します。
- --network host
- コンテナが Jetson ホストのネットワークとポートを使用できるようにします。
- --device /dev/video0
- コンテナが、Jetson ホストのWebカメラを使用できるようにします。
- --volume ${HOME}/work-l4t-jetpack-mediapipe:/work
- ホストの「${HOME}/work-l4t-jetpack-mediapipe」ディレクトリをコンテナの「/work」ディレクトリとしてマウントします。
- --name l4t-jetpack-mediapipe-dev
- 起動したコンテナに「l4t-jetpack-mediapipe-dev」という名前を付けておきます。後ほどDockerイメージ化するときに付けた名前を使用します。
起動したコンテナ上で、MediaPipeの動作環境を構築し、Dockerイメージ化し再利用します。そのために「--rm」オプションは付けません。 - nvcr.io/nvidia/l4t-jetpack:r36.4.0
- 起動するコンテナの元となるイメージとして、「nvcr.io/nvidia/l4t-jetpack:r36.4.0」を指定します。タグは実行する Jetson Orin Nano の環境に合わせたタグにします。
以下のコマンドを実行し、スクリプトファイルに実行権限を付与します。
コンテナの起動
以下のコマンドを実行し、「L4T JetPack」コンテナを起動します。
初回のコンテナ起動は、コンテナイメージのダウンロードと解凍が行われるため、時間を要します。
コンテナが起動すると、Terminalでの表示が「root@ホスト名:/#」に変わり、コンテナ上での作業になります。
以降の作業は、指定がない場合は、コンテナ上での作業です。
テキストエディタ Nano のインストール
以下のコマンドを実行し、テキストエディタ Nano をインストールしておきます。
Flask のインストール
OpenPose を動かす前に、OpenPose の動作結果を確認するための環境を構築します。
Jetson は、デスクトップ環境を無効化しています。画像処理の結果を、別のマシンのブラウザから確認できるようにします。
PythonのWebアプリケーションフレームワーク「Flask」をインストールします。
以下のコマンドを実行し、Pipをインストールします。
以下のコマンドを実行し、Flask をインストールします。
Webカメラからの画像の取得の動作確認
以下のコマンドを実行し、作業用ディレクトリに移動します。
「hello-webcam.py」ファイルを作成し、ファイルの内容を以下のようにします。
以下のコマンドを実行し、Flaskウェブサーバーを起動します。
同一ネットワーク上のPCのブラウザアプリ(ChromeやEdge)から、
http://[Jetson Orin Nano のIPアドレス]:5000
もしくは
http://[Jetson Orin Nano のホスト名]:5000
にアクセスします。
Webカメラの映像が表示されます。
「ctrl + c」を押下し、Flaskウェブサーバーを終了します。
MediaPipe のインストール
以下のコマンドを実行し、MediaPipe をインストールします。
MediaPipeの動作確認
以下のコマンドを実行し、作業用ディレクトリに移動します。
「hello-mediapipe.py」ファイルを作成し、ファイルの内容を以下のようにします。
以下のコマンドを実行し、Flaskウェブサーバーを起動します。
同一ネットワーク上のPCのブラウザアプリ(ChromeやEdge)から、
http://[Jetson Orin Nano のIPアドレス]:5000
もしくは
http://[Jetson Orin Nano のホスト名]:5000
にアクセスします。
Webカメラの映像と、姿勢を推定した結果が表示されます。
「ctrl + c」を押下し、Flaskウェブサーバーを終了します。
コンテナの終了
以下のコマンドを実行し、コンテナを終了します。
コンテナが終了すると、Terminalでの表示が「ユーザー名@ホスト名:/~$」に変わり、ホスト上での作業に戻ります。
以降の作業は、指定がない場合は、ホスト上での作業です。
コンテナのイメージ化
以下のコマンドを実行し、コンテナをイメージ化します。
l4t-jetpack-mediapipe-dev : イメージ化するコンテナの名前
l4t-jetpack-mediapipe:v1 : 作成するイメージの名前「l4t-jetpack-mediapipe」、タグ「v1」。
不要となったコンテナの削除
以下のコマンドを実行し、不要となったコンテナを削除します。
l4t-jetpack-mediapipe-dev : 削除するコンテナの名前
作成したイメージを用いてコンテナの起動
コンテナ起動スクリプトファイル「docker-run-mediapipe.sh」を以下の内容に修正します。
コンテナを終了したらコンテナを削除するように「--rm」オプションを追記します。
コンテナに名前を付ける「--name」オプションは削除します。
起動するコンテナの元となるイメージを、「l4t-jetpack-mediapipe:v1」に変更します。
以下のコマンドを実行します。
構築した MediaPipe の動作環境のコンテナが起動します。
コンテナでの作業を終了するには「exit」コマンドを実行します。
関連ページ
MediaPipe
MediaPipeの動作環境の構築 - 【本ページ】 |
MediaPipeによる人の骨格の推定 |
MediaPipeによる手の形の推定 |
MediaPipeによる顔の形の推定 |
OpenPose
OpenPoseの動作環境の構築 |
OpenPoseによる人の骨格の推定 |
OpenPoseによる手の形の推定 |
OpenPoseによる顔の形の推定 |