Windows 10 でおうちハックする

本記事は、おうちハック Advent Calendar 2017 の 11日目の記事です。

おうちハック＋機械学習の話の予定でしたが、都合により別の内容でお送りします。楽しみにされていた方ごめんなさい。そのかわりといっては何ですが**詫びデータセット**をご用意しましたのでご自由ご利用ください。もし、データを使って面白い発見があったり、データを利用して何かできましたら [@ksasao](https://twitter.com/ksasao) までお知らせいただけると喜びます。

## 配布するデータセット
* 自宅のドア開閉データ1年分(約150万件)
 * 参考記事: [ボタン電池1個で数年持つ無線ドア開閉センサを作る](https://qiita.com/ksasao/items/1a221843894fdb57677b)
* 自宅の消費電力推移１年分(約1000万件)
 * 参考記事: [空気を読むUIを作る](https://qiita.com/ksasao/items/4b52ced817c70edc901c)

ダウンロードURL: https://1drv.ms/f/s!AtVeMj_gKPtbpe41PCZKYgp5s9OsYA
ライセンスは [NYSL Version 0.9982](http://www.kmonos.net/nysl/) です。

注) データには一部欠落があります

使い方の例: [おうちセンサでキャラクターと暮らしてみた](https://www.slideshare.net/mobile/ksasao/ss-53491169)

# Windows 10 でおうちハックする
おうちハックといえは、Raspberry Pi や Arduino + Mac が定番ですが、あえて Windows を利用してみましょう。Windows を使うメリットは、Python や Node.js だけでなく、高品質な市販ソフトや Windows 10 で追加された OCR, [顔認識](https://docs.microsoft.com/ja-jp/windows/uwp/audio-video-camera/detect-and-track-faces-in-an-image), クラウド音声認識 などの機能が利用できることです。また、最近のアップデートで、サブシステムとして Linux (Ubuntu のコンソール) も動作するようになりました。最近では、[LattePanda](http://akizukidenshi.com/catalog/g/gM-12549/) など、小型ながらフル版の Windows 10 が動作するボードが入手できるようになってきましたので、おうちハックに利用しやすくなってきました。

## 市販ソフトなどの利用
おうちハックにつかえそうな Windows ならではのソフトウェアをいくつか紹介していきましょう

### 音声合成
おうちハックの出力として、音声合成を利用したいことはよくあります。Windowsであれば、かわいい声が多く取り揃えられている [VOICEROID](http://www.ah-soft.com/voiceroid/) などが利用可能です。例えば下記のような感じです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">HEARTalkと音声認識を組み合わせてヒミツのクマちゃんと会話が成立した！音声合成は東北きりたん。 <a href="https://t.co/O31lXVG1b6">pic.twitter.com/O31lXVG1b6</a></p>&mdash; ミクミンP/Kazuhiro Sasao (@ksasao) <a href="https://twitter.com/ksasao/status/897068857650630656?ref_src=twsrc%5Etfw">2017年8月14日</a></blockquote>

* [HEARTalk で自然な応答システムを作る](https://qiita.com/ksasao/items/e7ca345b3402d41b29d2)

かわいいですね！

VOICEROID には音声合成のAPIは提供されていませんが、[棒読みちゃん](http://chi.usamimi.info/Program/Application/BouyomiChan/)と[読みちゃんプラグイン Voiceroid Talk Plus Ver.8.1.0.0](http://ch.nicovideo.jp/Wangdora/blomaga/ar126461) を導入し、棒読みちゃんのクリップボード監視を有効にすると、クリップボード経由で音声合成が可能となります。コマンドプロンプトからクリップボードへ文字列を渡すコードは次のようになります。

```echo 任意のセリフ | clip```

簡単ですね。棒読みちゃんのプラグインを利用すると、[CeVIO](http://cevio.jp/)やWindows標準の音声合成なども同様に利用可能です。

### 音声認識
Windows 10 から導入された UWP (Universal Windows Platform) の API は、いわゆるストアアプリだけでなく、Visual Studio から NuGet で [UWPDesktop](https://www.nuget.org/packages/UwpDesktop/) を追加することで、従来のコマンドプロンプトやWindows Forms, WPFなどから呼び出すことが可能です。

コマンドプロンプトから音声認識を利用するサンプルコード

* https://gist.github.com/ksasao/c864192eb25494dd95e553015cb12acf

### OCR
同様に OCR も利用可能です。最近はデスクトップが高DPI化しており、ユーザーが見ているデスクトップ上の文字列をそのまま OCR にかけてもそれなりに正確に文字を読み取ることができます。サンプルコードは下記の gist へのリンクを参照してください。この API はオフラインでも利用可能です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">OneNote の OCR結果と Windows 10 組み込みの OCR の結果が一致することを確認 <a href="https://gist.github.com/ksasao/43879bfead8d4308290b95d84effa693">https://gist.github.com/ksasao/43879bfead8d4308290b95d84effa693</a> <a href="https://t.co/bYWO02B4Jb">pic.twitter.com/bYWO02B4Jb</a></p>&mdash; ミクミンP/Kazuhiro Sasao (@ksasao) <a href="https://twitter.com/ksasao/status/928643759822086144?ref_src=twsrc%5Etfw">2017年11月9日</a></blockquote>

### 任意の Windows アプリケーションの利用
家の状況などに応じて任意のアプリケーションを操作したいことがあります。一般的にソフトウェア開発では自動テストによりソフトウェアの品質を担保しますが、自動テストツール利用することでほぼ任意のソフトウェアが操作可能です。

例えば、[TestAssistant](http://www.codeer.co.jp/AutoTest/testassistant) を利用すると、ボタン操作の自動化に必要な情報が簡単に取得できます。

### Linux コマンドの利用
Windows 10 の 2017年秋のアップデートで Windows Subsystem for Linux を介して、SSH, Git などのコマンドが利用できるようになりました。ぜひ導入しましょう。

* 参考記事: [Windows Subsystem for Linuxとは？ そのインストールと使い方](http://www.buildinsider.net/enterprise/wsl/01)　(BuildInsider様)

Windowsのファイルシステムとも標準で連携できるので使い勝手が良いです。

## ハードウェアの利用
Windows でもシリアルポートなどが利用できるので、他のプラットフォーム向けであってもおおよそのものが動かせますが、上述の LattePanda には Arduino が内蔵されており、Windows から I/O を操作することができます。Lチカも簡単です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">LattePandaが届いたのでとりあえずLチカ。LattePanda側に Remote Tools for Visual Studio 2017 のみ入れてリモートデバッグ。便利。 <a href="https://t.co/com92p5v9S">pic.twitter.com/com92p5v9S</a></p>&mdash; ミクミンP/Kazuhiro Sasao (@ksasao) <a href="https://twitter.com/ksasao/status/919441676220841984?ref_src=twsrc%5Etfw">2017年10月15日</a></blockquote>

Windows Forms から LED を制御

```csharp
 using System;
 using System.Windows.Forms;
 using LattePanda.Firmata;
 
 namespace LattePandaHelloWorld
 {
    public partial class Form1 : Form
    {
        Arduino _arduino = new Arduino("COM3");
        public Form1()
        {
            InitializeComponent();
            _arduino.pinMode(13, Arduino.OUTPUT);
        }
        bool _pin = false;
        private void button1_Click(object sender, EventArgs e)
        {
            _arduino.digitalWrite(13, _pin?Arduino.HIGH: Arduino.LOW);
            _pin = !_pin;
        }
    }
 }
```

## まとめ
Windows でもおうちハック向けの環境が整ってきました。是非お試しください。