---
title: "yuv_yolov8_appの動作説明"
canonical: "https://dev-partner.i-pro.com/space/TPFAQ/1411743745/yuv_yolov8_app%E3%81%AE%E5%8B%95%E4%BD%9C%E8%AA%AC%E6%98%8E"
format: markdown
---
> Macro (toc)

# はじめに

---

i-PROカメラアプリケーション開発環境の構築が完成していることを前提に説明します。  
開発環境の構築が準備できていない場合、[こちら](https://dev-partner.i-pro.com/page/introduction)を参考に完成させてください。  
また、このチュートリアルではSDKのインストールディレクトリを`${SDK_DIR}`として記載します。


# 動作概要

---

yuv_yolov8_appはカメラ上のモデルにオブジェクト名と枠を描画するサンプルアプリです。


# 動作に必要な外部ライブラリ

---

Pythonのでビルドする場合は下記が必要です。

> Python.3.12, Numpy, WebSocket

> ℹ️ 外部ライブラリの利用については、後ほど説明します。

 

# サンプルアプリのディレクトリパス

---

C/C++のソースコードは下記に格納されています。

> ${SDK_DIR}/src/adamapp/yuv_yolov8_app

Pythonのソースコードは下記に格納されています。

> ${SDK_DIR}/src/adamapp-py/yuv_yolov8_app


# AIモデル変換ツールの利用

---

サンプルアプリをビルドする前に、AIモデル変換ツールを利用する必要があります。

下記からAIモデル変換ツールを取得し、環境構築してください。

[AIモデル変換ツール](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/961545224)

> ℹ️ お問い合わせからご提供までは数日お時間をいただいております。

 環境構築が完了しましたら、下記を参考にyolov8サンプルモデルの変換を行ってください。

[AIモデル変換ツール：ONNX(PyTorch)編](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/956046657)

ここでは、モデル変換したファイルを「yolov8s_cavalry.bin」として説明します。


# サンプルアプリのビルド方法(C/C++)

---

> ℹ️ ここでは、AdamAppとしてビルドする方法を記載しています。
> ℹ️ 
> ℹ️ Container AdamApp for Azure IoT Edgeとしてビルドする場合は下記を参照ください。
> ℹ️ 
> ℹ️ [チュートリアル(Container AdamApp for Azure IoT Edge編) - Technology Partner - Confluence (atlassian.net)](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/1270054913)
> ℹ️ 
> ℹ️ Container AdamAppとしてビルドする場合は下記を参照ください。
> ℹ️ 
> ℹ️ [チュートリアル(Container AdamApp) - Technology Partner - Confluence](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/1521909835)

SDKのインストールディレクトリでビルド用環境設定ファイルの読み込みを実施します。

```
$ cd ${SDK_DIR}
$ source setup_env.sh ipro-ambaCV2X
```

> ℹ️ ビルド用環境設定は各環境に合わせて実施してください。  
> ℹ️ ここでは、`ipro-ambaCV2X`　を指定します。

 

次にサンプルアプリのディレクトリに、モデル変換したyolov8s_cavalry.binファイルを下記の構成で配置します。

> [ambaCV2Xアプリの場合]  
> ${SDK_DIR}/src/adamapp/yuv_yolov8_app/data_CV2X/cnn/yolov8s_cavalry.bin  
> [ambaCV5Xアプリの場合]  
> ${SDK_DIR}/src/adamapp/yuv_yolov8_app/data_CV5X/cnn/yolov8s_cavalry.bin

makeします。

```
$ cd src/adamapp/yuv_yolov8_app
$ make
```

${SDK_DIR}/src/adamapp/yuv_yolov8_app に.extファイルが作成されていれば成功です。

 

カメラにインストールします(例：下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。

![image-20240524-065012.png](media://84f6a83f-b5b2-41ce-9272-2ed9184deb29)

インストール後、管理ログ画面でAIモデルの読み込みが完了するまで待ちます。数分かかる場合があります。

![image-20240524-065219.png](media://20b64c56-72eb-4aa4-a660-8855e2f8737d)

アプリ画面を開きます(下記画像の赤枠ボタン)。

![image-20240524-065437.png](media://994c964f-0acd-4002-8860-5a4de685284b)

カメラの映像が表示されていれば成功です。


# サンプルアプリのビルド方法(Python)

---

> ℹ️ ここでは、AdamAppとしてビルドする方法を記載しています。
> ℹ️ 
> ℹ️ Container AdamApp for Azure IoT Edgeとしてビルドする場合は下記を参照ください。
> ℹ️ 
> ℹ️ [チュートリアル(Container AdamApp for Azure IoT Edge編) - Technology Partner - Confluence (atlassian.net)](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/1270054913)
> ℹ️ 
> ℹ️ Container AdamAppとしてビルドする場合は下記を参照ください。
> ℹ️ 
> ℹ️ [チュートリアル(Container AdamApp) - Technology Partner - Confluence](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/1521909835)

以下のチュートリアルを参考に、module_compile.shは以下のように設定してください。  
[https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/2268987570](https://iproiot.atlassian.net/wiki/spaces/TPFAQ/pages/2268987570)

```
PYTHON3=yes
NUMPY=yes
OPENCV=no
SQLITE=no
PYCURL=no
WEBSOCKET=yes
```

> ⚠️ WEBSOCKET=yes にした場合はサンプルアプリフォルダに存在するwebsocketsフォルダを手動で削除しておいてください。Pythonバージョンに適合したwebsocketsを用いないとアプリが異常終了するためです。  
> ⚠️ ${SDK_DIR}/src/adamapp-py/{SampleApp}/python/site-packages/websockets  
> ⚠️ 例えばyuv_yolov8_appの場合は下記のフォルダを削除してください。  
> ⚠️ ${SDK_DIR}/src/adamapp-py/yuv_yolov8_app/python/site-packages/websockets

外部ライブラリのコンパイルを行い、AdamAppに配置してください。cmd_copy.shは以下のように設定してください。

```
PYTHON3=yes
NUMPY=yes
OPENCV=no
SQLITE=no
PYCURL=no
WEBSOCKET=yes
```

その後、アプリをビルドします。

 

SDKのインストールディレクトリでビルド用環境設定ファイルの読み込みを実施します。

```
$ cd ${SDK_DIR}
$ source setup_env.sh ipro-ambaCV2X
```

> ℹ️ ビルド用環境設定は各環境に合わせて実施してください。  
> ℹ️ ここでは、`ipro-ambaCV2X`　を指定します。

 

次にサンプルアプリのディレクトリに、モデル変換したyolov8s_cavalry.binファイルを下記の構成で配置します。

> [ambaCV2Xアプリの場合]  
> ${SDK_DIR}/src/adamapp-py/yuv_yolov8_app/data_CV2X/cnn/yolov8s_cavalry.bin  
> [ambaCV5Xアプリの場合]  
> ${SDK_DIR}/src/adamapp-py/yuv_yolov8_app/data_CV5X/cnn/yolov8s_cavalry.bin

次にサンプルアプリのディレクトリに移動し、makeします。

```
$ cd src/adamapp-py/yuv_yolov8_app
$ make
```

${SDK_DIR}/src/adamapp-py/yuv_yolov8_app に.extファイルが作成されていれば成功です。

 

カメラにインストールします(例：下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。

![image-20240524-065012.png](media://84f6a83f-b5b2-41ce-9272-2ed9184deb29)

インストール後、管理ログ画面でAIモデルの読み込みが完了するまで待ちます。数分かかる場合があります。

![image-20240524-065219.png](media://20b64c56-72eb-4aa4-a660-8855e2f8737d)

アプリ画面を開きます(下記画像の赤枠ボタン)。

![image-20240524-065437.png](media://994c964f-0acd-4002-8860-5a4de685284b)

カメラの映像が表示されていれば成功です。


# サンプルアプリの使用方法

---

> ℹ️ カメラの[設定 - 映像/音声 - 映像 - 解像度]リストに存在する解像度と、サンプルアプリで設定している解像度が一致している必要があります。  
> ℹ️ 解像度が一致していない場合、サンプルアプリは正常に動作しません。  
> ℹ️ サンプルアプリの初期設定解像度は以下のとおりです。  
> ℹ️ C/C++版：1920x1080  
> ℹ️ Python版：1280x720  
> ℹ️ サンプルアプリが動作しない場合は、カメラの解像度設定とサンプルアプリの解像度設定が一致しているか確認してください。

カメラにて何らかのモデルを撮影してください。下記の例ではモデル(手と指)が枠で囲まれ、オブジェクト名(person)が表示されていることが確認できます。

> ℹ️ アプリ起動直後はAIモデル読み込みのため、動作するまで時間がかかります。10秒程度お待ちください。

![image](media://06217456-1882-41d8-995b-2f3b81417b9f)


# 補足情報

---

## 設定の変更

このアプリケーションには、ユーザーが変更できるいくつかの設定があります。 一部の設定を変更する場合は、「ADAM OPERATION UI」HTMLページの「AppPrefs」ボタンを押してください。  
以下は、ユーザーが現在変更できる設定のリストです。

> Resoultion:  
> YUV 画像を取得するための解像度。HD(1280x720)またはFHD(1920x1080)を指定してください。ただし、カメラの性能によっては指定した値で動作しない場合があります。
> 
> Frame rate:  
> YUV画像を取得するためのフレームレート。 1以上を指定してください。 ただし、カメラの性能によっては指定された値で動作しない場合があります。

## AIモデルの変更方法

1. data_CV2X/cnn/*.bin   
および  
data_CV5X/cnn/*.bin  
をご使用のモデルに置き換えてください。
2. main.cppの以下の部分をモデルの仕様に合わせて変更してください。  
#define NETNAME <モデルのファイル名>  
#define LAYERNAMEIN <モデルの入力レイヤー>  
#define LAYERNAMEOUT <モデルの出力レイヤー>  
  
char const *names (pymain.py では object_name_list)  
モデルの仕様に合わせて変更してください。

## 利用ポート

このアプリケーションは、WebSocket 通信に 8083 ポートを使用します。