第五回 デジタルガジェット祭り!
音声によるPC操作に挑戦
2018年6月28日
先端IT活用推進コンソーシアム
クラウド・テクノロジー活用部会
リーダー 荒本道隆
はじめに
 このプレゼンでは、音声だけでPC操作に挑戦します
◦ もしも変な事が起こっても、暖かい目で見守ってください
 今回のデモで使用可能なコマンドリスト
◦ 「コンピュータ、次」
◦ 「コンピュータ、右」
◦ 「コンピュータ、前」
◦ 「コンピュータ、左」
◦ 「コンピュータ、メモ帳を開いて」
 ※プレゼンしているPCは何も手を加えていません
◦ PCのUSBにRaspberryPi ZeroWを挿しただけ
◦ なので、PCやOSに関係なく、同じ事ができます
2
- - - - - 注意事項 - - - - -
 今回の手法は『BadUSB』攻撃の上位互換です
 NICやシリアルでもPCと接続でき、簡単で無敵に凶悪
 RaspberryPi Zeroを悪用しないでください
◦ 一部のArduino(UNOは不可)やAndroidでも同じ事は出来ます
 『BadUSB』攻撃とは
◦ 悪意ある操作をUSBデバイスから送りつけるハッキング手法
◦ USBキーボードで出来る操作は、すべてが実行可能
 ファイル削除
 Firewall停止
 パスワード入力
◦ USBキーボードを使用している以上、防ぐことはできない
3
システム構成:概要
4
Webカメラのマイクを使用
ラズパイ3
ラズパイ Zero W
USB接続
USB接続
無線LAN
julius | grep “コンピュータ” | netcat 192.168.1.2 1111
netcat -lk -p 1111 | bash ...
システム構成:詳細
 音声認識にはJulius(オープンソース)を使用
◦ 認識精度はとても良くない
 辞書の作り方に工夫が必要
 認識方法をルールベース→SVMに変えた版もある
 Raspberry Pi Zero は USBHID として認識させられる
◦ HID:ヒューマンインターフェイスデバイス
キーボード、マウス、ゲームコントローラ
◦ これが出来るのはUSBポートが1つだけのZeroのみ
 『ラズパイ OTG』で検索(OTG = OnThe Go)
 『ラズパイ HID』で検索
 USBでセンサを挿せなくなるので、別の何かが必要
 1台のPCにキーボードはいくつでも接続できる
◦ マウスも同様にいくつでも接続できる
5
Juliusについて
 シニア勉強会でのハンズオンの手順を利用
◦ https://qiita.com/mininobu/items/609aed76f5767f0aa99b
『Raspberry Pi+Juliusで音声を認識する』
◦ configure前に以下を実行
 自動的に primary mic device にALSAが選択される
 juliusで環境変数のALSADEVが参照されるようになる
 辞書(ルール)の作り方
◦ 辞書からしか選択できないので、ノイズ対応ルールを入れる
 あ、い、う、え、お、か、....
◦ 誤認識されたくないコマンドはルールを長くする
6
$ sudo apt install libasound2-dev
$ arecord -l
$ export ALSADEV="plughw:1,0"
作ってみた感想
 Juliusの音声認識精度がイマイチ
◦ 「コンピュータ、○○」とノイズ対応辞書でギリ実用レベル
◦ 実用にはSVMを使った実装も評価する価値アリ
 RaspberryPiを2台にした事について
◦ netcatコマンド最高
 難しいコードは書いていません
◦ grep と awk と bash だけで実現
 「この文字がきたら、これを実行する」が実装できれば何でもOK
 一部のコマンドは勝手にバッファリングするので注意
◦ USBの「HID UsageTables」(168P) を参照するのが面倒
7
場面によっては使える
こんな事もできるはず
8
音声 or ジェスチャー
ラズパイ3
ラズパイ Zero W
USB接続
USB接続
無線LAN
julius | grep “波動拳” | netcat 192.168.1.2 1111
netcat -lk -p 1111 | bash ...
「コンピュータ、メモ帳を開いて」
9
最後に

第5回 デジタルガジェット祭り! スマートスピーカー特集(6)