1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

洗濯物が出ているかどうかを機械学習モデルで判別してgoogle spreadsheetへ出力する

Last updated at Posted at 2021-07-08

目標は、洗濯物が出ているのに雨が降り始めたら教えてくれるようにすることです。

前回、前々回で洗濯物が出ているかどうかを予測できるようにするところまで作りました。

10分おきにgoogle spread sheetに記録 (google spread sheet側の設定)

  • 基本的に以下のページを参照して実施しました

  • google spread sheetで1個ファイルを作成

    • ファイル名は自由に設定、シート名は"test1"とします
  • ツール→スクリプトエディタからgoogle apps scriptを開き、以下を貼り付ける

GoogleAppsScript.
var spreadsheetId = 'スプレッドシートのIDを入れる'

function doPost(e) {
var jsonString = e.postData.getDataAsString();
var data = JSON.parse(jsonString);
  
// 今日の日付の取得
const date = new Date()
   
// シート取得
var ss = SpreadsheetApp.openById(spreadsheetId);
var sheet = ss.getSheetByName("test1");
  
// シートに記載のある最終行を取得
const lastRow = sheet.getLastRow()+1
// シートのA列に日付を「xxxx/xx/xx」の形式で挿入
sheet.getRange(lastRow, 1).setValue(Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss'))
sheet.getRange(lastRow, 2).setValue(data.predictions[0].label)
sheet.getRange(lastRow, 3).setValue(data.predictions[0].confidence)
sheet.getRange(lastRow, 4).setValue(data.predictions[1].label)
sheet.getRange(lastRow, 5).setValue(data.predictions[1].confidence)
sheet.getRange(lastRow, 6).setValue(data.predictions[2].label)
sheet.getRange(lastRow, 7).setValue(data.predictions[2].confidence)

  • 公開→ウェブアプリケーションとして導入→

    • プロジェクトバージョン: new
    • Execute the app as: Me
    • Who has access to the app: Anyone, even anonymous <<<< ここは変更
  • このアプリは確認されていません→詳細を非表示→postAPITest

  • current web app URL: ここに出てくるURL(=API key)をメモ(このURLを使ってgoogle spread sheetに書き込みます)

  • curlコマンドで実行テスト

    • 以下のコマンドをraspberry piからたたく
    • API keyは↑で出てきたURLです
    • google spread sheetには以下のように入るはずです
      • A: 日付と時刻
      • B: nai
      • C: 1
      • D: deteru
      • E: 0.1
      • F: mienai
      • G: 0.01
curl -X POST -H "Content-type: application/json" -L "https://script.google.com/macros/s/<API key>/exec" -d " {\"predictions\": [{\"label\": \"nai\", \"confidence\": 1}, {\"label\": \"deteru\", \"confidence\": 0.1}, {\"label\": \"mienai\", \"confidence\": 0.01}]}"

1分おきにgoogle spread sheetに記録 (raspberry pi側の設定)

  • スクリプトを作成
    • シェルで書いています
    • なかなか力業なシェルになっています。もう少しスマートな方法あると思うので、どなたか教えてください
    • (このくらいの技術力でも作れるぐらい簡単なものだと思ってもらえれば)
shashin.sh

# !/bin/sh
fn=$(date +%Y%m%d%H%M%S)
raspistill -o /<写真の保存場所>/${fn}.jpg
predata=`sudo python3 /<lobeのモデルの保存場所>/tflite_example.py /<写真の保存場所>/${fn}.jpg`
data=`echo $predata | sed -e 's/Predicted://g' | sed -e "s/'/\x5c\"/g" | sed "s/^/\"/g" | sed "s/$/\"/g"`
echo $data

curl=`cat <<EOS
curl
 --verbose
 --request POST
 https://script.google.com/macros/s/<API key>/exec
 --header 'Content-Type: application/json'
 --data $data
EOS`
eval ${curl}

  • スクリプトを実行して値がgoogle spread sheetに書き込まれることを確認

cronの設定

  • 以下の設定をします
    • 10分おきにデータを記録
*/10 * * * * sh /<シェルを保存した場所>/shashin.sh

next actionはこちらです

2021年3月から始めたスマートホーム化はこちらに一覧化しています(2021年7月時点)

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?