この記事の概要です。
・画像ファイルを添付する画面をexpressで開発する
・expressからWatson Visual Recognition(VR)に画像ファイルを送付する
・IBM RPAからexpressの画面を操作する
【背景】
IBM RPAからWatson VRを呼び出したかったのですが、IBM RPAのREST Web Serviceコマンドから画像ファイルをストリームでWatson VRに送信することができません。
そこで、Watson VRに画像ファイルを送信する画面を開発し、IBM RPAからその画面を操作するシナリオを考えました。
事前準備です。
npm install -g express-generator
express vr
cd vr
mkdir upload
npm install multer
npm install watson-developer-cloud
npm install express
npm install http-errors
npm install cookie-parser
npm install morgan
npm install debug
npm install jade
routesフォルダのindex.js を以下のように修正します。
"use strict";
var express = require('express');
var router = express.Router();
var fs = require('fs');
var watson_vr = require('watson-developer-cloud/visual-recognition/v3');
var multer = require('multer');
var storage = multer.diskStorage({
destination: function(req,file,cb){
cb(null,'./upload');
},
filename: function(req,file,cb){
cb(null, Date.now() + '.png');
}
});
var upload = multer({storage:storage}).single('image');
var visual_recognition = new watson_vr({
api_key: 'your api key',
version: '2018-03-19'
});
router.get('/', function(req, res, next) {
res.render('index', { title: 'Hello Visual Recognition' });
});
router.post('/api/classify',function(req,res){
upload(req,res,function(err){
if(err){
console.log(err);
res.send("error");
}else{
console.log("uploaded " + req.file.path);
var classifier_ids = ["your classifier id"];
var threshold = 0.5;
var params = {
images_file : fs.createReadStream('./upload/' + req.file.filename),
classifier_ids: classifier_ids,
threshold: threshold
};
visual_recognition.classify(params,function(err,response){
console.log(req.file.path);
fs.unlink(req.file.path);
if(err){
console.log(err);
res.send(err);
}else{
console.log(JSON.stringify(response, null, 2));
// res.send(JSON.stringify(response,null,2));
// 特定のクラスにヒットした場合、クラス名と確度を表示する
if(response.images[0].classifiers[0].classes.length>0){
res.send(response.images[0].classifiers[0].classes[0].class + "<br>" +
response.images[0].classifiers[0].classes[0].score);
}else{
res.send("該当なし");
}
}
});
}
});
});
module.exports = router;
viewsフォルダのindex.jadeを以下のように修正します。
extends layout
block content
h1= title
form(method="post",enctype="multipart/form-data",action="/api/classify")
input(type="file",name="image")
br
input(type="submit")
expressアプリケーションを起動し、http://localhost:3000/にアクセスします。
npm start
【リンク】
https://qiita.com/smatsui@github/items/8e9d8a16d9e9635cebf5
https://www.ibm.com/watson/developercloud/visual-recognition/api/v3/node.html?node