アンドロイドデバイスからnodeJSサーバーに画像(電話カメラでキャプチャ)を送信し、そこからMicrosoft OCRを呼び出そうとしています。 私は次のようなテクニックをしています。イメージが圧縮されています。バイト配列を取得し、ノード・サーバーからHTTP POSTメソッドを使用してノード・サーバーに送信します。リクエストからバイト配列を取得してAPIを呼び出します。ノードサーバーへの画像の送信とOCR microsoft vision APIの呼び出し
ここに使用されているプロセスがあります。 1)。ビットマップイメージを取得する
2)。ここではノード側から
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Cache-Control", "no-cache");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"title\""+ lineEnd);
dos.writeBytes(lineEnd);
ByteArrayOutputStream output = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 50, output);
byte[] bufAry = output.toByteArray();
dos.write(bufAry, 0, bufAry.length);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
dos.flush();
コードです::次のようにHTTPリクエストを作成
router.post('/', rawBody, function(req, res, next)
{
console.log("post request");
if (req.rawBody && req.bodyLength > 0) {
sendRequestForOCR(req.rawBody, res);
} else {
res.send(500);
}
});
function rawBody(req, res, next) {
var chunks = [];
req.on('data', function(chunk) {
chunks.push(chunk);
});
req.on('end', function() {
var buffer = Buffer.concat(chunks);
req.bodyLength = buffer.length;
req.rawBody = buffer;
next();
});
req.on('error', function(err) {
console.log(err);
res.status(500);
});
}
function sendRequestForOCR(image, res) {
var encodedImg = querystring.stringify({
data: image
});
var options = {
host: 'api.projectoxford.ai',
path: '/vision/v1.0/ocr',
port: '80',
method: 'POST',
headers: {
'Content-Type' : 'application/octet-stream',
'Ocp-Apim-Subscription-Key': 'my_key'
}
};
var httpreq = http.request(options, function (response) {
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log("body: " + chunk);
});
response.on('end', function() {
res.send('ok');
})
});
httpreq.write(encodedImg);
httpreq.end();
}
しかし、私は取得していたメッセージを実行したときです:
"code":"InvalidImageFormat", "message":"Input data is not a valid image."
することができます誰でもしてくださいコードの問題点を教えてください。 ストリーミングで画像や問題を圧縮していますか?
ありがとうございました。
おかげで、エラーは私がノードサーバにアンドロイドからバイト配列を送信し、ノードからMicrosoft-認知サービスに送信する前にバイト配列を変更したかしていました。 提案された変更の後、正常に動作します。 – KTB