Microsoft Cognitive Services でバイナリ送る

Microsoft が提供している Microsoft Cognitive Services の Emotion API を使ってみた。

www.microsoft.com

パラメータがいろいろあり、かなり遊べる感じだったものの、どの API のサンプルを見ても URL で画像を送っている。ただ普通にreadFile して送りつけたら InvalidImageSize という名のエラーが出て、Image size is too small or too big. とか怒られて、そこで数時間詰まったので、メモ代わりに。

どうやら chunked transfer をサポートしていないことが問題らしく(参考:botframework - Microsoft Cognitive Services Emotion API. Error: 'Image size is too small or too big.' - Stack Overflow)、sync で読めばよいという話のよう。

以下、コード。

"use strict";

const request = require('request');
const fs = require('fs');

request.post({
  url: 'https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize',
  headers: {
    'Ocp-Apim-Subscription-Key': { SUBSCRIPTION-KEY },
    'Content-Type': 'application/octet-stream'
  },  
  method: 'POST',
  body: fs.readFileSync({ IMAGE FILE })
}, (error, response) => {
  let res = JSON.parse(response.body);
  console.log(res);
});