LoginSignup
1
2

More than 5 years have passed since last update.

watson-developer-cloudを利用してWatson Visual Recognitionのカスタムモデルにアクセスする

Last updated at Posted at 2018-05-14

この記事の概要です。

・画像ファイルを添付する画面を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

キャプチャ.PNG

IBM RPAからexpressの画面を操作する例
rpa.PNG

【リンク】
https://qiita.com/smatsui@github/items/8e9d8a16d9e9635cebf5
https://www.ibm.com/watson/developercloud/visual-recognition/api/v3/node.html?node

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2