コンテンツへスキップ

めざましじゃんけん 画像検出システム

めざましじゃんけん結果

テレビ画像よりフジテレビ、めざましテレビ内で実施されるめざましじゃんけんの結果を蓄積します。めざましじゃんけんは、デジタル放送のコンテンツであり、B-CAS(ビーキャス)カードを用いた受信装置により、データ放送を画面表示させ、リアルタイムに参加する必要があります。番組録画しても、データ放送のコンテンツは録画することは出来ません。

  1. 環境準備(インストール)

  2. Darknet/YOLOで学習モデル準備

  3. システム実装と結果公開

  4. プログラム関連技術

本システム実装に関連した、プログラム関係のTips。

    • PHP
    • Python
  1. 【機械学習導入】ニューラルネットワークChainerフレームワーク

    • 導入方法
    • 機械学習
    • Out of Memoryへの対応
    • 学習モデルのRaspberry Piでの実行

LINE通知のみはこちら

Use Case(ユースケース)

Nature Remoの室温室温センサーが30℃を超えた時点で、LINEに通知およびPCのシャットダウンを行う。

前提条件

  • Nature Remoがセットアップ済み
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用
  • IFTTTサービスにおいて、LINE Notifyの利用設定を実施している
  • シャットダウン対象のPCにSSHサーバがインストールされている必要があります Raspberry Pi 3 B +にPHPのSSH2インストール

全体の流れ

  1. IFTTTのNature Remoより室温30℃以上をトリガートリガー登録
  2. IFTTTのWebhooksで天候変化時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. WEB APIよりLINEへメッセージ送信
  4. WEB APIよりPCをシャットダウン(SSH2経由でシャットコマンドを実行)

トリガー

トリガー(this)にNature Remoをを選択し「Temperature rises above」(室温上昇)のトリガーを選択します。
トリガーは以下が準備されております。

  • Temperature rises above : 室温上昇
  • Temperature drops below : 室温低下
  • Humidity rises above : 湿度上昇
  • Humidity drops below : 湿度低下
  • Becomes brighter : 部屋の照度上昇
  • Becomes darker : 部屋の照度低下

対象のNature Remoデバイスを選択

what value でトリガー対象の室温を設定します。今回は、30℃を指定しています。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=Weather
    • text="室温が{{ThresholdValue}}を超えます。現在の {{CreatedAt}}の室温は、 {{Value}}です。"

以下が、準備したサンプルのPHPスクリプトとなります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。

アクション2

準備したPHPファイルより「@WINDOWS_IP@:WindowsのIPアドレス、 @WINDOWS_USER@:Windowsのユーザー名、@WINDOWS_PASS@:Windowsのパスワード 」に設定したPCへSSH2用いてPCへログインし、シャットダウンコマンドを実行します。

Use Case(ユースケース)

Nature Remoの室温室温センサーが30℃を超えた時点で、LINEに通知する。

前提条件

  • Nature Remoがセットアップ済み
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスよりLINEが利用可能であること

全体の流れ

  1. IFTTTのNature Remoより室温30℃以上をトリガートリガー登録
  2. IFTTTのLINEでメッセージを送信

トリガー

トリガー(this)にNature Remoをを選択し「Temperature rises above」(室温上昇)のトリガーを選択します。
トリガーは以下が準備されております。

  • Temperature rises above : 室温上昇
  • Temperature drops below : 室温低下
  • Humidity rises above : 湿度上昇
  • Humidity drops below : 湿度低下
  • Becomes brighter : 部屋の照度上昇
  • Becomes darker : 部屋の照度低下

対象のNature Remoデバイスを選択

what value でトリガー対象の室温を設定します。今回は、30℃を指定しています。

アクション

IFTTTよりLINEへメッセージ送信。
「室温が30℃よりも上昇しました。現在のNature Remoデバイスの室温は○℃です。」
というメッセージが送付されます。メッセージ部分は、自由に変更出来ます。

今回は、PHPやWebhooksなしのユースケースでした。

実現したいこと

  • Nature Remoに搭載されているセンサ情報の蓄積
  • Nature Remo Cloud APIを用いたPHPからのセンサ情報取得
  • Googleデータポータルでの表示

前提条件

  • Nature Remoの設置が完了している
  • SynologyのDBサーバがセットアップされている(Maria DB)
    DB作成時にphpMyAdminが導入されていると便利です(Synologyパッケージマネージャよりインストール可能です)
  • SynologyでPHPがインストールされていること
  • Synologyの外部公開設定が終わっている (GoogleデータポータルからSynologyのDBへアクセスする場合)
    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからSynologyのMaria DB(デフォルトポート:3307)にアクセスできる

構築手順

Nature Remo API利用時のアクセストークン発行

Nature Remo Cloud APIへアクセスし、OAUTH2認証用のアクセストークンを発行します。APIを利用する際には、HTTPヘッダに以下を指定します。

自分のアクセストークンは、home.nature.globalより新規発行します。

Nature Remo Cloud APIのサンプルレスポンス。

Maria DBの準備

SynologyのMaria DBで、データ蓄積用のDBとテーブルを作成します。
データ取得時間記録カラムとTE(室温)、HU(湿度)、IL(照度)を格納するカラムを作成します。また、データ蓄積時のユーザーとDB参照用のユーザーを作成しておきます。

NatureRemo蓄積DB構成
NatureRemo室温湿度照度蓄積DBの構成

PHPスクリプトの準備

簡単なスクリプトサンプルを載せておきます。
取得したアクセストークン、設定したDB関係のパラメーターを設定すれば動作すると思います。

コマンドラインより動作確認します。定期実行を設定する際にフルパスで実行指定をしたいので、動作確認もフルパス指定で実行確認を行います。
「/usr/local/bin/php72 /var/services/homes/php/Remo.php」
phpMyAdminなどで、登録されたレコードを確認することもおすすめします。

スクリプトの定期実行登録

Synologyのタスク スケジューラーでスクリプトの定期実行を登録します。

Googleデータポータル(データスタジオ)

Googleデータポータル

Googleデータポータルにアクセスし、レポートを作成します。

  1. データソース追加。GoogleコネクタのMySQLを選択し、接続情報を登録しSynologyのDBとの接続設定を行います。
  2. レポートやData Studio Explorer (Labs)を用いて、Viewを作成します。

以下にGit Hubのgistへ登録したソースコードも載せておきます。