Slide 13
Slide 13 text
function convertArray(detectLabels) {
let resultArray = [];
detectLabels.forEach(element => resultArray.push(element.Name));
return resultArray;
}
// for Label selector (convert resultSet format)
function convertResultSet(rows) {
let resultArray = [];
rows.forEach((element, index) => {
if (index == 0) {
resultArray.push(element);
}
});
return resultArray[0];
}
// for Data loader (convert resultSet format)
function convertResultSetData(rows) {
let resultArray = [];
rows.forEach(element => resultArray.push(element));
return resultArray[0];
}
// for Initiator (remove image files)
function removeFiles() {
const targetFiles = fs.readdirSync(filePath);
targetFiles.forEach(targetFile => fs.unlinkSync(filePath + targetFile));
}
// for HTTP response ('OK':HTTP 200)
function responseOK(res) {
responseResult(res, {"message": "OK"});
}
// for HTTP response (with result:HTTP 200)
function responseResult(res, result) {
res.send(result);
}
// for HTTP response (error:HTTP 400)
function responseError400(error, res, message) {
responseError(error, res, message, 400);
}
// for HTTP response (error:HTTP 500)
function responseError500(error, res, message) {
responseError(error, res, message, 500);
}
// for HTTP response (error)
function responseError(error, res, message, code) {
console.log('[ERROR]', error);
const express = require('express');
const multer = require("multer");
const bodyParser = require('body-parser');
const AWS = require('aws-sdk');
const fs = require('fs')
const mysqlx = require('@mysql/xdevapi');
const filePath = '/dev/nginx-1.17.2/html/images/';
const app = express();
// for POST request (use body-perser)
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
// for AWS Rekognition (convert file -> base64)
function getBase64BufferFromFile(filename) {
return (new Promise((resolve, reject) => {
fs.readFile(filename, 'base64', (err, data) => {
if (err) return reject(err);
resolve(new Buffer.from(data, 'base64'));
});
}));
}
// Amazon Rekognition (detect labels)
AWS.config.update({
region: 'ap-northeast-1'
});
const rekognition = new AWS.Rekognition({
apiVersion: '2016-06-27'
});
function detectLabelsFromBytes(bytes, maxLabels, minConfidence) {
const params = {
Image: {
Bytes: bytes
},
MaxLabels: typeof maxLabels !== 'undefined' ? maxLabels : 100,
MinConfidence: typeof minConfidence !== 'undefined' ? minConfidence : 60.0
};
return (new Promise((resolve, reject) => {
rekognition.detectLabels(params, (err, data) => {
if (err) return reject(err);
resolve(data);
});
}));
}
// for MySQL document (convert array format)
作ったもの/内容
Amazon Rekognitionを使って画像のラベリングを行う
○ 信頼スコア60以上・上位10個までを抽出
以下をドキュメントDBのコレクションimage_labelingに保存
○ 画像の保存ファイル名(filename)
○ 元のファイル名(originalname)
○ 抽出ラベル名の配列(labels)
RDBテーブルlabelsにラベル名を分解して保存
○ ラベルセレクタ用(label)
13