프로그래밍 아마추어가 이미지 인식 AI로 견종 응답 서비스를 만들어 보았습니다.
자신의 기술 수준
・Progate로 HTML/CSS, JavaScript, Node.JS를 받았다
· Express 프레임 워크에서 get 통신과 post 통신을 처리 할 수있게되었습니다.
・JS의 async/await의 개념이 조금만 이해되어 왔다
· Promise는 이해할 수 없다.
이번에 입력 한 것
Microsoft가 제공하는 CustomVison이라는 서비스의 존재를 알았습니다.
태그가 지정된 이미지를 포함하여 학습
↓
학습한 내용에 근거해, 새롭게 화상을 보이면 어느 태그에 가까운 화상인지 판단한다, 라고 하는 서비스입니다.
대단해! !
더욱 API화되어 있기 때문에 외부와 연계시킬 수 있는 것 같습니다.
이번에 도전한 출력
CustomVison에게 개의 이미지를 학습시켜 LINEbot과 연결하는 것으로, 「화상을 던지면 견종을 분석해 응답해 주는 LINEbot」을 만들어 보았습니다.
먼저 개 이미지를 넣고 태그를 붙여 기계 학습시킵니다.
그리고 이전에 만든 LINEbot의 프로그램과 연결한다.
'use strict';
const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');
const PORT = process.env.PORT || 3000;
const config = {
channelSecret: '', //チャンネルシークレット
channelAccessToken: '' //チャンネルアクセストークン
};
const app = express();
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});
const client = new line.Client(config);
function handleEvent(event) {
console.log(event);
// 今回は画像投稿を通す
if (event.type !== 'message' || event.message.type !== 'image' ) {
return Promise.resolve(null);
}
let mes = ''
if(event.message.type === 'image'){
mes = '画像を判定しています!';
getFaceDetect2(event.message.id, event.source.userId, config.channelAccessToken );
} else{
mes = event.message.text;
}
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}
const getFaceDetect2 = async (messageId , userId, accessToken) => {
console.log("getFaceDetect2");
console.log(messageId);
console.log(accessToken);
//LINEbotから画像取得
const configImageAPI = {
url: `https://api.line.me/v2/bot/message/${messageId}/content`,
method: 'get',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
responseType: 'arraybuffer'
};
let responseImageAPI;
try {
// axios はRequest Configで受信データのタイプを設定できる。今回は arraybuffer が適切。
responseImageAPI = await axios.request(configImageAPI);
console.log('image data get');
} catch (error) {
console.log('post Error');
console.error(error);
}
//Custom Vision APIへのリクエスト
const CUSTOM_VISION_API_ENDPOINT_URL = 'CustomVisionAPIのURL';
// JSONで送るので Content-type ヘッダーに application/json 指定
const configCustomVisionAPI = {
url: CUSTOM_VISION_API_ENDPOINT_URL,
method: 'post',
headers: {
'Content-type': 'application/octet-stream',
'Prediction-Key':'' //CustomVisionAPIのプレディクションキー
},
data: responseImageAPI.data
};
// axiosの送信設定
let responseCustomVision;
try {
// POSTリクエストで送る
responseCustomVision = await axios.request(configCustomVisionAPI);
console.log("post OK");
// データ送信が成功するとレスポンスが来る
console.log(responseCustomVision.data.predictions[0].tagName);
} catch (error) {
console.log("post Error");
// ダメなときはエラー
console.error(error);
}
//LINEbotから返信
await client.pushMessage(userId, {
type: 'text',
text: JSON.stringify(responseCustomVision.data.predictions[0].tagName),
});
}
app.listen(PORT);
console.log(`Server running at ${PORT}`);
제대로 화상 해석해 회답해 주었습니다!
일본어로 건네려고 하면 에러가 되어 버려 해결할 수 없었으므로 영어인 채입니다.
되돌아가다
· 역시 일본어로 대답하고 싶다
・지금은 시바견・퍼그・치와와의 3종류 밖에 학습시키고 있지 않기 때문에 실용화시킨다면 더 학습시킬 필요가 있다.
・학습에도 화상을 1개 1개 손으로 올려 태그 붙이는 맨파워가 걸린다.
· 마음대로 학습해 주면 더 편해지지만 그런 기술이 있는지 궁금하다.
Reference
이 문제에 관하여(프로그래밍 아마추어가 이미지 인식 AI로 견종 응답 서비스를 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiromae0213/items/9ddda6e02fb0abf32ce6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)