하늘 이미지로 날씨를 예상해주는 LINE BOT을 만들었다
6535 단어 linebotGoogleAppsScript
참고한 기사
이미지 인식 AI를 사용하여 LINE BOT을 만드는 방법
게다가, 상기 기사의 작가님이 작성된, AI 제조사 에서 날씨 예상의 부분은 완전히 작성 가능했습니다.
AI 제조사로 AI 만들기
"AI에 식별시키는 라벨"이라는 항목이 AI가 반환하는 결과가 됩니다.
이번에는 "빨리 비가 내릴 것인가", "몇 시간 후에 비가 내릴 것인가", "비가 내리지 않는가?"의 3가지 결과를 되돌리기로 했습니다.
AI의 이름 등 적절히 입력하면 드디어 학습에 들어갑니다.
학습 방법은 작성한 라벨에 해당하는 이미지를 오로지 불러오기만 하면 됩니다.
이 근처의 사이트에서 비를 내리는 구름의 이름을 확인하고 "검색하여 이미지 추가"버튼을 누르면 자동으로 이미지를 수집하고 등록합니다. 편리!
물론 전혀 관계가 없는 화상을 주워 버리는 경우도 있으므로, 그 경우는 수동으로 삭제합니다.
각 라벨에 이미지를 등록하여 AI 생성이 완료됩니다.
LINE BOT 만들기
계정을 만드는 방법은 공식 페이지의 1~5을 참조했습니다.
이미지처럼 "응답 메시지"와 "인사말 메시지"를 비활성화로 설정하고 "Webhook 사용"을 활성화합니다.
같은 설정 화면에서 「채널 액세스 토큰」을 발행해 둡니다.
그런 다음 Google Apps Script에 다음 코드를 작성합니다.
var AIMAKER_MODEL_ID = AIメーカーで作成したモデルのID;
var AIMAKER_API_KEY = AIメーカーのAPIキー;
var LINE_ACCESS_TOKEN = LINE BOTのチャンネルアクセストークン;
function doPost(e){
try {
var json = JSON.parse(e.postData.contents);
var token= json.events[0].replyToken;
var url = 'https://api.line.me/v2/bot/message/'+ json.events[0].message.id +'/content/';
var image = getImage(url);
var base64 = Utilities.base64Encode(image.getContent());
var message = getResult(base64);
if (message == '') {
message = "識別できませんでした。";
}
sendLineMessage(message, token);
} catch (e) {
message = "処理に失敗しました。"
sendLineMessage(message, token);
}
}
function getImage(url){
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'GET'
});
}
function getResult(base64){
var result = '';
var url = 'https://aimaker.io/image/classification/api';
var payload = {
"id": AIMAKER_MODEL_ID,
"apikey": AIMAKER_API_KEY,
"base64": base64
};
var response = UrlFetchApp.fetch(url, {
method: 'POST',
payload: payload,
muteHttpExceptions: true
});
response = response.getContentText();
var json = JSON.parse(response);
var labels = sortLabel(json.labels);
if (labels[0].label && labels[0].score){
result = 'この画像の診断結果は、「' + labels[0].label + ': ' + (Math.round(labels[0].score * 10000) / 100) + "%」です!\n\n";
}
for (var i in labels) {
if (labels[i].label && labels[i].score) {
result = result + labels[i].label + ': ' + (Math.round(labels[i].score * 10000) / 100) + "%\n";
}
}
return result;
}
function sortLabel(labels){
labels.sort(function(a,b){
if (a.score > b.score) return -1;
if (a.score < b.score) return 1;
return 0;
});
return labels;
}
function sendLineMessage(message,token){
var url = "https://api.line.me/v2/bot/message/reply";
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'replyToken': token,
'messages': [
{
"type": "text",
"text": message
}
],
})
});
}
코드를 작성한 후 공개 탭의 웹 애플리케이션으로 배포를 선택하고 다음과 같이 실행합니다.
Execute the app as(다음 사용자로 애플리케이션 실행): 자신
Who has access to the app(애플리케이션에 액세스할 수 있는 사용자): 모두(익명 사용자 포함)
처음에만 Google 계정에 대한 액세스 권한이 나오므로 이를 허용합니다.
게시된 URL을 LINE BOT 관리 화면의 Webhook URL로 설정합니다.
덧붙여서, 코드를 수정등으로 갱신했을 경우는, Project version을 New 로 하지 않으면 왜인지 잘 갱신되지 않습니다. 이것으로 수수하게 막혔습니다…
완성된 것
중요한 정확도이지만 쾌적한 날의 하늘에서 시도했지만
음...? ? ? 우선 지금은 비가 내리지 않는다는 것이군요!
아무튼 보통 날씨 예보를 보는 것입니다만, 기계 학습의 한 비늘을 맛볼 수 있었던 것과, LINE BOT는 의외로 간단하게 만들 수 있다고 알려진 것이 좋았습니다.
특히 LINE BOT과 GAS의 조합은 여러가지 쓸만한 생각이 듭니다.
좀 더 실용적인 것도 이번에 만들고 싶다고 생각했습니다.
덤
BOT의 회신에 이미지를 사용할 수도 있습니다.
공식에서 볼 수 있듯이 회신 부분을 이렇게하면 이미지를 반환 할 수 있습니다.
'messages': [
{
"type": "image",
"originalContentUrl": message,
"previewImageUrl": message
}
],
originalContentUrl 및 previewImageUrl은 이미지의 경로를 지정합니다.
Google 드라이브에 있는 이미지를 사용하고 싶었기 때문에 조사한 결과 공유 설정을 '링크를 아는 모든 사람'으로 설정하고 이미지 경로를 https://drive.google.com/uc?id=画像ID
로 지정할 수 있었습니다.
이미지 ID 공유 링크 https://drive.google.com/file/d/この部分です/view?usp=sharing
덤으로 만든 것
오래된 재료, 〇〇의 AA주세요의 김으로, 보낸 화상의 홍도에 응한 홍이다 AA를 돌려줍니다.
엄청 죄송합니다.
Reference
이 문제에 관하여(하늘 이미지로 날씨를 예상해주는 LINE BOT을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moeeeyon/items/d4d8e11eeb09e1549d3a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"AI에 식별시키는 라벨"이라는 항목이 AI가 반환하는 결과가 됩니다.
이번에는 "빨리 비가 내릴 것인가", "몇 시간 후에 비가 내릴 것인가", "비가 내리지 않는가?"의 3가지 결과를 되돌리기로 했습니다.
AI의 이름 등 적절히 입력하면 드디어 학습에 들어갑니다.
학습 방법은 작성한 라벨에 해당하는 이미지를 오로지 불러오기만 하면 됩니다.
이 근처의 사이트에서 비를 내리는 구름의 이름을 확인하고 "검색하여 이미지 추가"버튼을 누르면 자동으로 이미지를 수집하고 등록합니다. 편리!
물론 전혀 관계가 없는 화상을 주워 버리는 경우도 있으므로, 그 경우는 수동으로 삭제합니다.
각 라벨에 이미지를 등록하여 AI 생성이 완료됩니다.
LINE BOT 만들기
계정을 만드는 방법은 공식 페이지의 1~5을 참조했습니다.
이미지처럼 "응답 메시지"와 "인사말 메시지"를 비활성화로 설정하고 "Webhook 사용"을 활성화합니다.
같은 설정 화면에서 「채널 액세스 토큰」을 발행해 둡니다.
그런 다음 Google Apps Script에 다음 코드를 작성합니다.
var AIMAKER_MODEL_ID = AIメーカーで作成したモデルのID;
var AIMAKER_API_KEY = AIメーカーのAPIキー;
var LINE_ACCESS_TOKEN = LINE BOTのチャンネルアクセストークン;
function doPost(e){
try {
var json = JSON.parse(e.postData.contents);
var token= json.events[0].replyToken;
var url = 'https://api.line.me/v2/bot/message/'+ json.events[0].message.id +'/content/';
var image = getImage(url);
var base64 = Utilities.base64Encode(image.getContent());
var message = getResult(base64);
if (message == '') {
message = "識別できませんでした。";
}
sendLineMessage(message, token);
} catch (e) {
message = "処理に失敗しました。"
sendLineMessage(message, token);
}
}
function getImage(url){
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'GET'
});
}
function getResult(base64){
var result = '';
var url = 'https://aimaker.io/image/classification/api';
var payload = {
"id": AIMAKER_MODEL_ID,
"apikey": AIMAKER_API_KEY,
"base64": base64
};
var response = UrlFetchApp.fetch(url, {
method: 'POST',
payload: payload,
muteHttpExceptions: true
});
response = response.getContentText();
var json = JSON.parse(response);
var labels = sortLabel(json.labels);
if (labels[0].label && labels[0].score){
result = 'この画像の診断結果は、「' + labels[0].label + ': ' + (Math.round(labels[0].score * 10000) / 100) + "%」です!\n\n";
}
for (var i in labels) {
if (labels[i].label && labels[i].score) {
result = result + labels[i].label + ': ' + (Math.round(labels[i].score * 10000) / 100) + "%\n";
}
}
return result;
}
function sortLabel(labels){
labels.sort(function(a,b){
if (a.score > b.score) return -1;
if (a.score < b.score) return 1;
return 0;
});
return labels;
}
function sendLineMessage(message,token){
var url = "https://api.line.me/v2/bot/message/reply";
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'replyToken': token,
'messages': [
{
"type": "text",
"text": message
}
],
})
});
}
코드를 작성한 후 공개 탭의 웹 애플리케이션으로 배포를 선택하고 다음과 같이 실행합니다.
Execute the app as(다음 사용자로 애플리케이션 실행): 자신
Who has access to the app(애플리케이션에 액세스할 수 있는 사용자): 모두(익명 사용자 포함)
처음에만 Google 계정에 대한 액세스 권한이 나오므로 이를 허용합니다.
게시된 URL을 LINE BOT 관리 화면의 Webhook URL로 설정합니다.
덧붙여서, 코드를 수정등으로 갱신했을 경우는, Project version을 New 로 하지 않으면 왜인지 잘 갱신되지 않습니다. 이것으로 수수하게 막혔습니다…
완성된 것
중요한 정확도이지만 쾌적한 날의 하늘에서 시도했지만
음...? ? ? 우선 지금은 비가 내리지 않는다는 것이군요!
아무튼 보통 날씨 예보를 보는 것입니다만, 기계 학습의 한 비늘을 맛볼 수 있었던 것과, LINE BOT는 의외로 간단하게 만들 수 있다고 알려진 것이 좋았습니다.
특히 LINE BOT과 GAS의 조합은 여러가지 쓸만한 생각이 듭니다.
좀 더 실용적인 것도 이번에 만들고 싶다고 생각했습니다.
덤
BOT의 회신에 이미지를 사용할 수도 있습니다.
공식에서 볼 수 있듯이 회신 부분을 이렇게하면 이미지를 반환 할 수 있습니다.
'messages': [
{
"type": "image",
"originalContentUrl": message,
"previewImageUrl": message
}
],
originalContentUrl 및 previewImageUrl은 이미지의 경로를 지정합니다.
Google 드라이브에 있는 이미지를 사용하고 싶었기 때문에 조사한 결과 공유 설정을 '링크를 아는 모든 사람'으로 설정하고 이미지 경로를 https://drive.google.com/uc?id=画像ID
로 지정할 수 있었습니다.
이미지 ID 공유 링크 https://drive.google.com/file/d/この部分です/view?usp=sharing
덤으로 만든 것
오래된 재료, 〇〇의 AA주세요의 김으로, 보낸 화상의 홍도에 응한 홍이다 AA를 돌려줍니다.
엄청 죄송합니다.
Reference
이 문제에 관하여(하늘 이미지로 날씨를 예상해주는 LINE BOT을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moeeeyon/items/d4d8e11eeb09e1549d3a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var AIMAKER_MODEL_ID = AIメーカーで作成したモデルのID;
var AIMAKER_API_KEY = AIメーカーのAPIキー;
var LINE_ACCESS_TOKEN = LINE BOTのチャンネルアクセストークン;
function doPost(e){
try {
var json = JSON.parse(e.postData.contents);
var token= json.events[0].replyToken;
var url = 'https://api.line.me/v2/bot/message/'+ json.events[0].message.id +'/content/';
var image = getImage(url);
var base64 = Utilities.base64Encode(image.getContent());
var message = getResult(base64);
if (message == '') {
message = "識別できませんでした。";
}
sendLineMessage(message, token);
} catch (e) {
message = "処理に失敗しました。"
sendLineMessage(message, token);
}
}
function getImage(url){
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'GET'
});
}
function getResult(base64){
var result = '';
var url = 'https://aimaker.io/image/classification/api';
var payload = {
"id": AIMAKER_MODEL_ID,
"apikey": AIMAKER_API_KEY,
"base64": base64
};
var response = UrlFetchApp.fetch(url, {
method: 'POST',
payload: payload,
muteHttpExceptions: true
});
response = response.getContentText();
var json = JSON.parse(response);
var labels = sortLabel(json.labels);
if (labels[0].label && labels[0].score){
result = 'この画像の診断結果は、「' + labels[0].label + ': ' + (Math.round(labels[0].score * 10000) / 100) + "%」です!\n\n";
}
for (var i in labels) {
if (labels[i].label && labels[i].score) {
result = result + labels[i].label + ': ' + (Math.round(labels[i].score * 10000) / 100) + "%\n";
}
}
return result;
}
function sortLabel(labels){
labels.sort(function(a,b){
if (a.score > b.score) return -1;
if (a.score < b.score) return 1;
return 0;
});
return labels;
}
function sendLineMessage(message,token){
var url = "https://api.line.me/v2/bot/message/reply";
return UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'replyToken': token,
'messages': [
{
"type": "text",
"text": message
}
],
})
});
}
중요한 정확도이지만 쾌적한 날의 하늘에서 시도했지만
음...? ? ? 우선 지금은 비가 내리지 않는다는 것이군요!
아무튼 보통 날씨 예보를 보는 것입니다만, 기계 학습의 한 비늘을 맛볼 수 있었던 것과, LINE BOT는 의외로 간단하게 만들 수 있다고 알려진 것이 좋았습니다.
특히 LINE BOT과 GAS의 조합은 여러가지 쓸만한 생각이 듭니다.
좀 더 실용적인 것도 이번에 만들고 싶다고 생각했습니다.
덤
BOT의 회신에 이미지를 사용할 수도 있습니다.
공식에서 볼 수 있듯이 회신 부분을 이렇게하면 이미지를 반환 할 수 있습니다.
'messages': [
{
"type": "image",
"originalContentUrl": message,
"previewImageUrl": message
}
],
originalContentUrl 및 previewImageUrl은 이미지의 경로를 지정합니다.
Google 드라이브에 있는 이미지를 사용하고 싶었기 때문에 조사한 결과 공유 설정을 '링크를 아는 모든 사람'으로 설정하고 이미지 경로를
https://drive.google.com/uc?id=画像ID
로 지정할 수 있었습니다.이미지 ID 공유 링크
https://drive.google.com/file/d/この部分です/view?usp=sharing
덤으로 만든 것
오래된 재료, 〇〇의 AA주세요의 김으로, 보낸 화상의 홍도에 응한 홍이다 AA를 돌려줍니다.
엄청 죄송합니다.
Reference
이 문제에 관하여(하늘 이미지로 날씨를 예상해주는 LINE BOT을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moeeeyon/items/d4d8e11eeb09e1549d3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)