無理矢理ml5.jsのモデルと重みをローカルから読み出してブラウザ内で完結させる

完全に力技.

良い子はこんなコードを書いてはいけません.

ほんとは以下とかにPullRequest投げるか何かコメント書くべきなのだろうけど、とりあえず動けばいいので

https://github.com/ml5js/ml5-library/issues/238

classifier.load

がjsonファイルのみを指定させて、weightを指定させないため、ブラウザが勝手にjsonファイルの相対パスを適当に読み込もうとして死ぬ.(ローカルファイルに勝手にアクセスできないため)

jsonファイルの中にパスが適当に書かれていることが原因.

そこで、そのjsonファイルのパスを無理矢理dataURIのパスに変更してしまうことでこの問題を解決する.

load-btnのidを持ちmultiple属性を持たせたinputタグを用意して、以下のようのにロードする.

ファイル指定の時には必ずjsonファイルとbinファイルの両方を指定すること.

ポイントはweightファイルを先に読み込んでそのdecoded dataURIを取得して、
その中身でjsonファイルの中のweightファイルへのpathを上書きすること.

originJson[weightsManifest][0][paths][0] = weight_data;

この行をやりたいがためにjsonファイルをbase64から戻して、書き換えてまたencodeしてる.

 

ちなみにinputタグはこんな感じ

<input type=“file” accept=“.json,.bin” name=“jsonfile” style=“display:none”  id=“load-btn”  multiple>

About the author

コメントを残す