概要
MicroSoftのCustom Vison APIをJavaScriptで呼び出した話。
はじめに
MicroSoft提供のCustom Vison、利用者が画像にタグを付けることで思い通りのモデルを作れる、機械学習初心者にはもってこいのサービスです。APIを実行するのに苦労したので、備忘録として書いていきたいです。
プロジェクト作成~キー取得
これらのページを参考にプロジェクトを作成しました。
※ Azureのアカウントが必要です。MicrosoftのアカウントでもCustomVisonは試せますが、APIを実行できません。(APIを実行すると「HTTP 401 Access Denied (invalid subscription key)」が発生します。)
API実行
手軽にできそうなHTML+JavaScriptで試すことにしました。仕様が変わるかもしれませんが、2018年5月27日現在は下記のコードで動作確認できました。(各種キー情報はよしなに書き換えてください)
HTML
<!DOCTYPE html>
<html>
<head>
<title>JSSample</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<div>
<input id="inputFile" name="file" type="file" accept="image/*"></input>
<div>最大ファイルサイズ:4MB</div>
<div>
<button onclick="sendImage()">
送信
</button>
</div>
</div>
<script type="text/javascript">
function sendImage(){
var params = {
// Request parameters
"iterationId": "イテレーションIDをいれる",
// "application": "{string}",
};
$.ajax({
url: "https://southcentralus.api.cognitive.microsoft.com/customvision/v1.0/Prediction/プロジェクトIDをいれる/image?" + $.param(params),
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("Content-Type","multipart/form-data");
xhrObj.setRequestHeader("Prediction-key","{Prediction-Keyを入れる}");
},
type: "POST",
data: $("input[name='file']").prop("files")[0],
processData: false,
contentType: false
})
.done(function(data) {
alert("success");
})
.fail(function() {
alert("error");
});
}
</script>
</body>
</html>
Custom Vision Prediction PredictImageにMicrosoftが使い方などを書いてくれているのですが、それでも自分はハマリました、、、。以下、ハマりポイントです。
- params.application ってなに?
- よくわからないけどなくてもいいっぽい!削除 してOK
- POSTのdataには何を渡す?
- fileをそのまま渡せばOKでした。
FormDaraを渡したり、Base64エンコードしたり、かなり遠回りしました、、、
- fileをそのまま渡せばOKでした。
- ajaxのIllegal invocationってエラーがでるよ?
- ajaxのオプションにprocessData: false,contentType: false を設定すればOK
送信時にajaxがパラメータを整形しようとしてるらしいです。
- ajaxのオプションにprocessData: false,contentType: false を設定すればOK
0 件のコメント :
コメントを投稿