エッジAIラボ
エッジAIラボ
TUTORIALS

はじめてのエッジAI開発

ブラウザで体験 → Raspberry Piで実行 → カスタムモデル学習。3ステップでエッジAI開発者になろう。

1

ブラウザでAIを動かしてみよう

所要時間:15分 / 難易度:★☆☆

Transformers.jsで画像分類

たった10行のJavaScriptで画像認識AIをブラウザ上で動かせます。サーバーもPythonも不要です。

JavaScript
import { pipeline } from "@huggingface/transformers";

// モデルをロード(初回はダウンロード、2回目以降はキャッシュ)
const classifier = await pipeline(
  "image-classification",
  "Xenova/mobilenetv2_1.0_224"
);

// 画像を分類
const result = await classifier("https://example.com/cat.jpg");
console.log(result);
// => [{ label: "tabby cat", score: 0.92 }, ...]
TIPTransformers.jsはHugging Faceのモデルをブラウザで直接実行するライブラリ
TIPONNX形式に変換されたモデルをWebAssembly/WebGPUで推論
TIP初回ダウンロード後はブラウザキャッシュから読み込み(オフライン対応)

リアルタイムカメラ推論

カメラ映像に対してリアルタイムで物体検出を行うコード例です。

JavaScript
// カメラストリームを取得
const stream = await navigator.mediaDevices.getUserMedia({
  video: { facingMode: "environment" }
});
video.srcObject = stream;

// TensorFlow.jsで物体検出
import * as cocoSsd from "@tensorflow-models/coco-ssd";
const model = await cocoSsd.load();

// フレームごとに検出
function detect() {
  const predictions = await model.detect(video);
  predictions.forEach(pred => {
    console.log(`${pred.class}: ${(pred.score*100).toFixed(0)}%`);
  });
  requestAnimationFrame(detect);
}
detect();
TIPrequestAnimationFrameで毎フレーム推論するとリアルタイム検出になる
TIPスマホではfacingMode: 'environment'で背面カメラを使用
TIPこのサイトの物体検出デモはまさにこのコードで動いている
このサイトの物体検出デモで実際に動かしてみよう
2

Raspberry Piでエッジ推論

所要時間:30分 / 難易度:★★☆

環境セットアップ

Raspberry Pi 5にPython環境を構築し、TensorFlow Liteで推論する準備をします。

Python
# Raspberry Pi OS (64-bit) で実行
sudo apt update && sudo apt upgrade -y

# Python仮想環境を作成
python3 -m venv ~/ai-env
source ~/ai-env/bin/activate

# TensorFlow Liteランタイムをインストール
pip install tflite-runtime opencv-python-headless numpy pillow

# カメラモジュールの有効化を確認
rpicam-hello  # プレビューが表示されればOK
TIPRaspberry Pi 5 + Camera Module 3の組み合わせがおすすめ
TIP64-bit OSを使うことでパフォーマンスが向上
TIPtflite-runtimeは軽量(TensorFlow全体の1/100のサイズ)

カメラで物体検出を実行

Piカメラの映像をリアルタイムで物体検出するPythonスクリプトです。

Python
import cv2
import numpy as np
import tflite_runtime.interpreter as tflite

# TFLiteモデルをロード
interpreter = tflite.Interpreter(
    model_path="efficientdet_lite0.tflite"
)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# カメラキャプチャ
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 前処理: リサイズ + 正規化
    img = cv2.resize(frame, (320, 320))
    input_data = np.expand_dims(img, axis=0).astype(np.uint8)

    # 推論実行
    interpreter.set_tensor(input_details[0]["index"], input_data)
    interpreter.invoke()

    # 結果取得
    boxes = interpreter.get_tensor(output_details[0]["index"])[0]
    classes = interpreter.get_tensor(output_details[1]["index"])[0]
    scores = interpreter.get_tensor(output_details[2]["index"])[0]

    # 検出結果を描画
    for i in range(len(scores)):
        if scores[i] > 0.5:
            y1,x1,y2,x2 = boxes[i]
            cv2.rectangle(frame,
                (int(x1*frame.shape[1]), int(y1*frame.shape[0])),
                (int(x2*frame.shape[1]), int(y2*frame.shape[0])),
                (0,255,0), 2)

    cv2.imshow("Detection", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
TIPEfficientDet-Lite0はRPi5でも15-20 FPS出せる軽量モデル
TIPAI HAT+があれば13 TOPSのアクセラレータで60+ FPSも可能
TIPモデルはTensorFlow Hubから無料ダウンロード可能
機材ガイドでRaspberry Piセットを確認
3

カスタムモデルを学習する

所要時間:60分 / 難易度:★★★

Google Colabで転移学習

YOLOv8をベースに、独自の物体(例:自社製品の不良品)を検出するモデルを学習します。

Python / YAML
# Google Colabで実行(無料GPUを利用)
!pip install ultralytics

from ultralytics import YOLO

# 事前学習済みモデルをベースに転移学習
model = YOLO("yolov8n.pt")  # nano版(最軽量)

# 独自データセットで学習
results = model.train(
    data="my_dataset.yaml",  # 自作のデータセット定義
    epochs=50,
    imgsz=640,
    batch=16,
    device=0,  # GPU使用
)

# TFLite形式でエクスポート(Raspberry Pi用)
model.export(format="tflite", imgsz=320)
# => "best_saved_model/best_float32.tflite" が生成される
TIP学習データは最低50枚〜、理想は300枚以上
TIPラベリングツールはRoboflow(無料枠あり)がおすすめ
TIPColabの無料GPUで50エポックなら約30分

データセットの準備

学習に使うデータセットの構成例です。

Python / YAML
# my_dataset.yaml の例
train: ./data/train/images
val: ./data/val/images

names:
  0: good_product    # 良品
  1: defect_scratch  # キズ不良
  2: defect_dent     # ヘコミ不良

# ディレクトリ構成
# data/
#   train/
#     images/   <- 学習用画像(.jpg)
#     labels/   <- アノテーション(.txt)
#   val/
#     images/   <- 検証用画像
#     labels/   <- 検証用アノテーション
TIPYOLO形式: 1行=1物体「class_id cx cy w h」(正規化座標)
TIPtrain:val = 8:2 の比率が標準
TIPデータ拡張(回転・明度変化等)で実質的なデータ量を増やせる
開発リソースページでモデル・フレームワークを探す

必要なもの

Step 1(ブラウザ)

  • Chrome / Edge 最新版
  • Webカメラ(内蔵 or USB)
  • テキストエディタ(VS Code等)

Step 2(Raspberry Pi)

  • Raspberry Pi 5(8GB推奨)
  • Camera Module 3
  • microSD 32GB以上
  • 電源・ケース

Step 3(学習)

  • Googleアカウント(Colab用)
  • 学習用画像データ 50枚〜
  • Roboflowアカウント(無料)