コンテンツへスキップ

フジテレビのめざましじゃんけん画像検出

フジテレビのめざましじゃんけんシステムGo-Live!!
本日分が無事に動いたので、早速公開!
めざましじゃんけん結果一覧はこちら

初めての技術習得が結構多く、開発極小がポリシーなのですが、時間かかりました。各種勉強から初めて3週間弱でしょうか。
7月13日の週末に、関連書籍とWEBカメラをアマゾンで購入していました。

Deep Learning(ディープラーニング、深層学習)DNN(ディープニューラルネットワーク)、AI(人工知能)ML(機械学習)を少し触ってみました。初めての技術ばかりで、ライフのデジタル化計画に有益な技術習得を行いました。

  • Python(初めて扱いました)
  • Python関係画像ライブラリ、OpenCVなど(オープンシーヴィ、Open Source Computer Vision Library)
  • Chainer (チェイナー) ディープラーニングフレームワーク
  • Darknet(ダークネット)YOLO(You Only Look Once)物体検出、オープンソースのニューラルネットフレームワーク

以下サンプル画像です。デジタル放送部分のみなので、著作権には配慮しているつもりです。問題のある際は、ご連絡下さい。大手なので、使用許諾にも時間がかかりそうなので、時間を見つけて画像の使用許諾を考えます。

8月からのブログネタは、このシステム構築に関わる技術内容とする予定です。
次の週末にでも記事を書き溜めます。
さて、次は、、、まだ未定。

Google Homeへの音声コマンドをIFTTTトリガーへ

Google Assistantに「OK グーグル」とコマンド受付状態にし、その後利用したい色々な音声コマンドを設定します。

トリガー:「OK グーグル」「ゆうまの部屋のパソコンをシャットダウンして」
アクション:パソコンのシャットダウンを実行

Google Home Assistant向けのTriggerは4種類

  • 定形メッセージ
  • 定形メッセージ+数字
  • 定形メッセージ+不定形メッセージ
  • 定型メッセージ+数字+不定形メッセージ

以下が、トリガーの一覧となります。それぞれ配置し、少し操作すれば、利用方法は分かると思います。日本語での紹介サイトも多くあるので、必要に応じてGoogle検索で情報を探して下さい。(このサイトでもユースケースとして各種具体的な利用方法として記載します)

トリガーへの設定

定形メッセージの登録画面です。

1番目の「What do you want to say ?」から3番目の「And another way ?」までは、コマンドとして登録したい内容を記載します。3つの言い方が登録出来ます。
4番目は、コマンド受付時のGoogle Assistantからの返答です。空欄でも問題ないです。「○○を了解しました。」などを登録します。
最後は、利用言語となります。

Google Assistantの日本語認識

実際に、Google Assistantに話しかけ、Google Assistantがどのように日本語認識をしているか確認し、確認結果をもとにIFTTTトリガーへの命令として指定することをオススメします。
以下のGoogle Homeアプリの「マイアクティビティ」で発音した音声コマンドの履歴が見れます。

実際に「ゆうまの部屋」と発音した際の認識状況

「ゆうまの部屋」「優雅な部屋」「優馬の部屋」と漢字の変換方法の違い含め、複数パターンの認識結果となります。誤認識が少ない単語や文章の選択が必要となります。

Google Assistantの認識結果を参考に登録したトリーがサンプル

V1を公開しました

2019年7月7日、残念ながら雨の七夕です。

かなり昔にフリーソフトを何個か公開しておりました。
窓の杜様などにも取り上げられたこともありました。

学生でもなく時間も限られる中、簡単にソフトウェアが作れる時代であることを再認識しました。1カ月弱で、デジタル環境を、ここまで生活に浸透出来るのだなーと

Raspberry PiやGoogle Homeなど生活に溶け込むガジェットも手軽に入手可能と、ソフトウェア+アルファでアイデアが簡単に実現できる素晴らしい環境です。

まずは、各種ツールなどの勉強ができたので、他の実現したいアイデアに取り組む予定です。出来たら、他のサイトで記事化されていないような内容に取り組めたらと思います。実装やプログラミングは簡単に、世の中にある便利なものを組み合わせて。
当面は、各ユースケースの説明記事を日々投稿して行きます。
(書き留めた記事があるので、実際にはV2の開発に入ります)

V1リリース内容について

Raspberry Pi 4概要

SoC(システムオンチップ)の変更。Cortex-A72アーキテクチャ(64ビットのクアッドコアARMv8が1.5GHz)を採用。

  • H.265のハードウェアビデオデコーディング
  • 基本モデルは1GBのRAM、2GBと4GBのRAMを搭載するモデルをラインナップ
  • メモリ規格がLPDDR2からLPDDR4に更新
  • Gigabit Ethernet搭載(Gigabit Ethernet over USB 2.0からの変更)
  • USB 3.0×2とUSB 2.0×2
  • 電源用USB-Cポート装備
  • Bluetoothも、4.2から5.0にアップデート
  • 2つのmicro-HDMIポート(フルサイズのHDMIポートからの変更)
  • 2つの4Kディスプレイを、60fpsで接続可能

Raspberry Piの正規販売店によって米国時間6月23日に発売された。メモリが1GBのベースモデルの価格は35ドル。RAMが2GBのモデルは45ドル、4GBのモデルは55ドル。

Raspberry Pi 4 BとRaspberry Pi 3 B +比較

海外サイトで見つけたベンチマーク結果です。
個人的に気にしていた消費電力ですが、想定以上の優秀な結果。導入しても良いかなと思える結果です。

テスト項目Raspberry Pi 3 B +Raspberry Pi 4 B差分
起動時間39.941.74.51%
アイドル状態(消費電力)0.5050.68435.45%
ピーク状態(消費電力)1.141.12-1.75%
CPUベンチマーク(1スレッド)317.7250.4-21.18%
CPUベンチマーク(4スレッド)86.262.8-27.15%
RAMベンチマーク14202983110.07%
OpenGL30.935.815.86%
Ethernet332933181.02%
WiFi 2.4Ghz38.639.62.59%
WiFi 5Ghz98.61078.52%
USB Drive Write35155342.86%
USB Drive Read32233628.13%

大幅な入出力の増強。発熱は少し気になるものの、魅力ある製品だと思います。
また、イノベーションと呼べるモデルチェンジだと思います。

API連携プラットフォーム概要(Overview)

ラズベリーパイ(Raspberry Pi)とNAS(Synology)の使い分け

記載済み記事

ネットワーク構成

SynologyのWEBサーバとRaspberry PiのWEB APIを外部公開にする必要があります。
SynologyとRaspberry Piの両方をWEBサーバーとして、外部公開します。
通常WEBサービスでは、ポート80(http://)と443(https://)が利用されます。
家庭向けの製品では、パケットの到着ポートで、アクセスURLを見て、パケット送付先を振り分けることは出来ないので、2台のWEBサーバを公開する際は、1台を別ポートで運用します。

NAT / Port Forward / Virtual Server設定

インターネット側IP+Port を ローカルネット側IP+Port の転送ルールを設定します。この技術や機能名がNAT、Port ForwardやVirtual Serverと呼ばれております。

パブリック側プライベート側
(グローバルIP)Port:80(Synology プライベートIP)Port:80
(グローバルIP)Port:443(Synology プライベートIP)Port:443
(グローバルIP)Port:8443(Raspberry PiプライベートIP)Port:443

この際に、グローバル側からのRaspberry Piへのアクセス方法は、「https://www.miki.-ie.com:8443」とポート番号を指定したアドレスとなります。

複数DOMAIN(ドメイン)の運用

複数の独自ドメインでWEBサーバを運用します。これは、WEBサーバのVirtual Server機能で実現します。Synologyでは、簡単に設定が可能ですので、設定方法などは割愛します。

常時電源が入っているマシンが2台。
1台がベストなのですが、現時点のベストプラクティスは2台構成
・Synology DiskStation DS218j:サーバー機能、NAS機能、バックアップスペース など
・Raspberry Pi 3 modelB +:各種プログラム動作環境

SynologyとRaspberry Pi

CPUの性能など詳細な比較は、別のサイトを参考にして下さい。
私の現時点(2019年7月時点)の答えは、両方導入。

Synology DiskStation DS218j

Raspberry Pi 3 modelB +

HDDはRAID化によりデータ保全性や製品の特性上高信頼な24時間運転が期待できます。
SSHなどでコンソールログインできるものの、自由度は低いです。
また、GUIで提供されている機能の完成度が高いので、個別なカスタマイズなしで運用な範囲をすべてSynologyで運用が基本方針です。
やはり製品寿命が気になります。
ただし自由度が高い。
新規技術が容易。
(コードさえかければ、今世の中にあるオープンソフトはほとんど動くのでは?)よって、日次バックアップで復旧可能な範囲でのデータ格納。
  • パブリック公開
  • WEBサーバー
  • DBサーバー
  • Node.js関係の開発スピードが速いプラットフォーム
  • OSコマンド

SynologyとRaspberry Piの利用方針

「カスタマイズなしで運用できるものはSynology、Synologyで運用出来ないものをRaspberry Pi」

システムオーバービュー

トリガーとアクション、そしてロジック

トリガー

    • 音声コマンド(Google Home / Google Home mini など)
    • 物理ボタンやスマホのボタン押下
    • 時間 (定期的なスケジュール実行など)
    • メール受信
    • ツイッター (特定情報発信者や特定キーワード)
    • 雨が、降ってきた
    • 室温上昇
    • 人感センサー

アクション

    • Google homeより音声発信発信 Notification
    • メール送信
    • ライン送信
    • 家電操作(テレビ、照明、エアコン)
    • パソコン操作

IFTTT(イフト)If This Then That

IFTTT(イフト)とは“if this then that”の略で、「こうなったら(if this)」「こうする(then that)」という 簡単なルール設定で連携させることができます。
  • [こうなったら]:トリガー
  • [こうする]アクション
多くのサービスなりが連携されており、トリガー部分にもアクション部分にも利用できます。詳しい紹介サイト:https://www.atmarkit.co.jp/ait/spv/1711/22/news031.html

ロジックの利便性

IFTTTは基本的にトリガーとアクションが1:1になります。条件判断などにも対応しておりません。1:1アクションには、基本的にIFTTTのレシピで完結するようにします。
Google Homeで標準で対応できない、グーグールホームとNATURE REMO 連携での、テレビのチャンネル変更や音量変更など。
また、一部ロジック定義が出来るサービスもありますが、トリガーもアクションも品不足で、トリガーの一部利用に止まります。
ここでは、一つのトリガーで複数のアクションや時間によって異なるアクションなどを、自宅サーバーで実現します。

全体API連携時のシステムアーキテクチャ

トリガーロジック
home-api on Raspberry Pi
アクション
IFTTT

  • Google Home音声入力
  • Twitter監視
  • メール監視
  • 天気トリガー など

IFTTT以外

  • タスクスケジューラーやCron実行
  • 他WEBサービス
トリガーに対してアクションをキック。

時間判定によるアクション内容変更

複数条件判定によるアクション実施の決定

IFTTT

  • ライン送信
  • メール送信

IFTTT以外

  • Google Home音声発信(google-home-notifier)
  • PC操作
  • 他WEBサービスへのAPI発行(Spotifyなど)

アーキテクチャオーバービュー(Architecture Overview)、IFTTT、LINE、Google Home、Twitter、Nature Remo、Raspberry Pi