YOLOv8を使用した物体検出とポーズ推定
YOLOv8を使用したモバイルでの物体検出とポーズ推定
Section titled “YOLOv8を使用したモバイルでの物体検出とポーズ推定”組み込みの前処理と後処理を使用して、物体検出とポーズ推定のモバイルでONNXモデルを構築および実行する方法を学びます。
YOLOv8を使用した物体検出
Section titled “YOLOv8を使用した物体検出”Androidアプリの完全なソースコードは、ONNX Runtime推論例リポジトリにあります。
組み込みの前処理と後処理でONNXモデルを構築する
Section titled “組み込みの前処理と後処理でONNXモデルを構築する”このステップはオプションです。モデルは上記のアプリケーションフォルダーの例リポジトリで利用可能なためです。興味がある場合は、以下の手順でモデルを自分で構築する方法を示します。
Python環境を作成し、以下のパッケージをインストールします。
pip install --upgrade onnx onnxruntime onnxruntime-extensions pillowモデルを構築するために、以下のスクリプトをダウンロードします。
curl https://raw.githubusercontent.com/microsoft/onnxruntime-extensions/main/tutorials/yolo_e2e.py > yolo_e2e.pyスクリプトを実行します。
python yolo_e2e.py [--test_image <テストする画像>]スクリプトが実行された後、1つのPyTorchモデルと2つのONNXモデルが表示されます:
yolov8n.pt: 元のYOLOv8 PyTorchモデルyolov8n.onnx: エクスポートされたYOLOv8 ONNXモデルyolov8n.with_pre_post_processing.onnx: 前処理と後処理がモデルに含まれるONNXモデル<test image>.out.jpg: バウンディングボックスが提供されたテスト画像
たとえば、拡張リポジトリのオオカミのテスト画像:

Androidアプリケーションを構築する
Section titled “Androidアプリケーションを構築する”AndroidアプリケーションをAndroid Developer Studioに読み込みます。
ObjectDetector.ktにメインの推論コードがあります。画像をバイト配列に読み込み、ONNX Runtimeでモデルを実行してボックス付きの元の画像を取得するのと同じくらい簡単です。
fun detect(inputStream: InputStream, ortEnv: OrtEnvironment, ortSession: OrtSession): Result { // ステップ1: 画像をバイト配列(生画像バイト)に変換 val rawImageBytes = inputStream.readBytes()
// ステップ2: バイト配列の形状を取得し、ortテンソルを作成 val shape = longArrayOf(rawImageBytes.size.toLong())
val inputTensor = OnnxTensor.createTensor( ortEnv, ByteBuffer.wrap(rawImageBytes), shape, OnnxJavaType.UINT8 ) inputTensor.use { // ステップ3: ort推論セッション実行を呼び出す val output = ortSession.run(Collections.singletonMap("image", inputTensor), setOf("image_out","scaled_box_out_next") )
// ステップ4: 出力分析 output.use { val rawOutput = (output?.get(0)?.value) as ByteArray val boxOutput = (output?.get(1)?.value) as Array<FloatArray> val outputImageBitmap = byteArrayToBitmap(rawOutput)
// ステップ5: 出力結果を設定 var result = Result(outputImageBitmap,boxOutput) return result } } }
YOLOv8を使用したポーズ推定
Section titled “YOLOv8を使用したポーズ推定”ポーズ推定モデルを構築する
Section titled “ポーズ推定モデルを構築する”注:チュートリアルのこの部分はPythonを使用します。AndroidとiOSのサンプルはまもなく公開されます!
Python環境を作成し、以下のパッケージをインストールします。
pip install --upgrade onnx onnxruntime onnxruntime-extensions pillowモデルを構築するために、以下のスクリプトをダウンロードします。
curl https://raw.githubusercontent.com/microsoft/onnxruntime-extensions/main/tutorials/yolov8_pose_e2e.py > yolov8_pose_e2e.pyスクリプトを実行します。
python yolov8_pose_e2e.pyスクリプトが実行された後、1つのPyTorchモデルと2つのONNXモデルが表示されます:
yolov8n-pose.pt: 元のYOLOv8 PyTorchモデルyolov8n-pose.onnx: エクスポートされたYOLOv8 ONNXモデルyolov8n-pose.with_pre_post_processing.onnx: 前処理と後処理がモデルに含まれるONNXモデル
ポーズ推定の例を実行する
Section titled “ポーズ推定の例を実行する”同じスクリプトを使用してモデルを実行し、独自の画像を提供してポーズを検出できます。
python yolov8_pose_e2e.py --test_image person.jpg --run_model出力が元の画像に描画されます!

モバイルアプリケーションを開発する
Section titled “モバイルアプリケーションを開発する”Python推論コードを基礎として、モバイルアプリケーションを開発できます。