ncnn nanodet wasm react vite project
モバイルとかでも動作する軽量の物体検出アルゴリズム。ブラウザで動作します。
参考:
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++難しい。