JTalkベースの自作スマートスピーカーがあります。ラズパイ用ACアダプタを挿したスイッチ付きコンセントでのON/OFFとは別にラズパイ用boot/reboot/shutdown物理ボタン付き。音声認識にJuliusを使った自作スマートスピーカーに伝言とメモの機能を実装するにあたり、マイクとスピーカーを専有してしまうOSSやALSAからPulseAudioに移行しました。ちなみに便利なのでラズパイだけでなく、PC/Debianにも自作スマートスピーカー機能を搭載しています。Designerによる操作パネルも作成しました。今回は、自作スマートスピーカー機能においてマウス操作もできるようにすべく、GUIツールキットであるPyGTK/Gladeでスマートスピーカー用の操作パネルを作ってみることにしました。JTalkスマートスピーカー用やパソコンから遠隔操作でラズパイスマートスピーカーを操作することにしました。Linuxで(というか、今どきは、たいていクロスプラットフォームも)デスクトップアプリを作るにあたっては、GTK/GTK+やQtなどを使うことは知っていましたが、自身としてはこれらで作るのは、初めてです。当初、全てブラウザで実装...とも思いましたが、いろいろ考えるとブラウザ起動-ページ表示も含めアプリを作る方が賢明かと思うに至りました。Tutorialを発見、これを使ってみることにしました。読み進めていくとGlade(やGtk.Builder)についても書いてあり、これは、どうやらレイアウト・デザインのみ行なうことができる(結果XMLファイル≒GtkBuilderファイルとして出力してくれる)ソフトウェアで後からスクリプトを実装できるとのこと。Gladeの(メニューからポップアップされる)開発者向けマニュアルからGTKについてたどってみると複雑なユーザーインタフェースを作る場合には、GtkBuilderとGTK固有の説明マークアップ言語の利用が推奨され、Gladeのようなビジュアルユーザーインタフェースエディタを使うこともできるよとのこと。Widgetsのサンプルをほぼそのまま使わせて頂き、いくつかボタンを配置・機能させるところまで。これに伴い、ボタン押下時に既存のスクリプトを実行できるよう追記、また、起動用の.desktopファイルの作成・デスクトップへの配置をしてみました。結果から言うと、こんな画面(文字は日本語も可)を表示させてみることにしました。これは、先週作った自作スマートスピーカーによるYoutubeの音楽再生、スキップ、停止とOpenはさておき、Closeは、当該画面を閉じるボタンで動作確認済みです。要は、スマートスピーカー機能をデスクトップアプリとしても使うことができるということです。./home/xxx/tmp/sp_ctrl_panel.py$pythonスクリプトはこんな感じです。~/Desktop$デスクトップファイルは、適当なものを/usr/share/applicationsから選んでコピー・編集してこんな感じに。...して)おくのでしょうが、メニューやタスクバーにおきたいわけでもない為、~/Desktopに置いておくだけに留めました。(E)]にチェックを入れておきます。しない場合、デスクトップに配置されたアイコンをクリックすると[安全性が確認されていないアプリケーションランチャ]と言う名の警告ポップアップが出力されますが、[警告を無視して起動(L)]なり、[安全性が確認されたものとする(T)]なりをクリックすれば、冒頭の操作画面が表示されます。リモートホストの操作パソコンからラズパイ上のスマートスピーカー機能を操作するにあたっては、sshコマンドで接続先のサーバでコマンドを実行するのようにsshを使用します。コマンド部の(シングル・ダブル問わず)クォートの有無で結果が返るのがローカルかリモートか決まるというのは、興味深いですね。これでローカルからリモート側のコマンドやスクリプトを実行できます。リモートホスト(ラズパイ)へのアクセスにパスワードを求められると自動化できない為、パスワード無しでログインできるようにしておく必要があります。..."を使ってリモートホスト側に公開鍵をコピーします。することでパスワード・パスフレーズなしでローカルからリモートホストにssh接続できるようになります。user@remotehost]を接頭辞として入れる以外は、当該ホスト上でコマンドやスクリプトを実行するのと同様にローカルからリモートホストを操作することができるようになりますし、それらをローカルでスクリプトに書くこともできるようになります。"/remote/path/to/jpop_play.sh"fi$ただ、今回は、sp_ctrl_panel.pyで、この[ssh]によるコマンドを直でコールしようにもうまくいかなかった為、shellスクリプトに書いてこれを指定する恰好としました。これは再生ボタン押下時の例ですが、スキップや停止ボタン全てラズパイ用にスクリプトを作り、同様にしました。自身の場合、ラズベリーパイのスマートスピーカーは、使う時以外は、電源を落としている為、疎通チェックして通った場合のみ、コマンドを実行するようにしました。遠隔操作の場合、リモートホスト側にもプロセスはあるものの、ラッパスクリプト側でプレイリストをランダムに並べ替えてループ内でsshコマンドを投げる等ごにょごにょした場合、ローカル(今回はノートPC)側にもラッパスクリプトに加え、その中で実行したsshのプロセスがあります。よって単にsshコマンドを投げただけなら何事もなくとも、ごにょごにょした上に立つsshコマンドの場合には、ごにょごにょ含めてなんぼなのでローカルホストのPCの電源を落とすとリモートホスト側にも影響があり、プレイリストなどでは、再生が途中で停止してしまったりするので要注意。今回の方法だと、デスクトップアプリである操作パネルについては、操作パネルを起動し直せば十分、せいぜいデスクトップをクリックしてアクティブにした状態で[F5]で良さ気ですが、先のようなパスに置いてメニューに登録する場合には、[Alt]+[F2]後、[r]と入力、[Enter]すると反映されるでしょう。notesを試してみたコンピュータービジョンOCR/光学文字認識OCRエンジンTesseractの精度確認OpenCV/Tesseractで7セグLCD値を読んでみるメインメニューホームページ作成メニューウェブ開発メニュー2004-2008-someday。