本文へスキップ

ncnn nanodet wasm react vite project

2024.02
軽量物体検出nanodetをwasmでブラウザに

モバイルとかでも動作する軽量の物体検出アルゴリズム。ブラウザで動作します。

参考:

https://github.com/nihui/ncnn-webassembly-nanodet

・emscriptenで書き出すjsをモジュールとして扱うには、MODULARIZE, EXPORT_ES6というのをセットする

・makfileでシェル書くと独立したスレッドで実行されるので、

source ./emsdk_env.sh

みたいな変数のセットが効かない。なのでsetup.shに書いた

C++には、インラインアセンブラという機能があるらしい。

例えばこんな感じで書くと、C++からもconsole.logしたりDOMのテキストを書き換えたりできる。

bool person_detected = false;

for (const Object& obj : objects)
{
    EM_ASM_({console.log(UTF8ToString($0));}, class_names[obj.label].c_str());

    if (class_names[obj.label] == "person") {
        person_detected = true;
    }
}

const char* message = person_detected ? "Person detected" : "No person detected";

EM_ASM_({
    const obj = document.getElementById('detected-item-label');
    obj.innerHTML = UTF8ToString($0);
}, message);

でもやっぱり全体的にEM_ASM とEM_ASM_ でちょっと使い方が違ったり、C++難しい。