ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

画像認識による自動操作で Radiko ガジェットをキーボードショートカットから操作できるようにする【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain

これまでの経緯。

Windows 版 Radiko ガジェット試してみてキーボードショートカットに対応していないので 使いづらいなあと言う話がありました。

そこでsiklix を使って画像認識による自動操作で使い勝手を改善しようとしました。
しかし自分のスキル不足なのか動作がゆっくりしすぎていて快適とは言えない操作感だったので結局お蔵入りになったのでした。

使い慣れたAutoHotkeyならどうか。

開発体制が徐々に整いつつあるAutoHotkeyで、いよいよ画像認識による自動操作までできるようになってきました
そこでAutoHotkeyならどこまで行けるかチャレンジしてみます。

再生までのボタン操作の段取りは以前作ったものと同じように行います。
AutoHotkeyには画像認識に特化した機能が備わっていないので少々ゴテゴテした実装となります。
手順としては次のようになります。

  • radiko ガジェットの ウィンドウをアクティブにする。
  • アクティブウィンドウのサイズを取得して Radiko ガジェットのウィンドウサイズを画像探索の範囲とします。
  • 画像が見つかった場合は発見した領域の左上の座標を返してもらえます。受け取った座標はウインドウの左上からの相対座標です。
  • 必要ならマウスポインターを受け取った座標に移動させます。

アプリケーションが見つからなかった時に起動する処理は割愛します。
このスクリプトを使う時は事前に起動しておいてくださいね。

画像探索部分はどこまで曖昧に認識してくれるか分からないので放送局を三つほどに増やして期待通りに画像認識できるか確認してみます。
三つの放送局から任意に選択できなければならんので、 WIN キー+functionキーで放送局を選択することにします。
F1で TBS ラジオ、 F2で文化放送、 F3でニッポン放送を選択できるようにします。

実装する。
いくつかの機能を関数にまとめてみましたが、どうしても画像認識周りで重厚な見た目になりますね。
使っているうちに洗練されたコードが組めるようになってくると思います。
だったらいいな。
放送局の選択で画像認識がうまくいかなかった時に永久ループになることだけは避けたかったのでループの回数が一定に達すれば諦めて処理を中断するようにしています。
一定回数として設定している30には何の根拠もありません。
多少ミスっても2周回ればなんとかなるやろ程度です。

放送局を認識するためにスクリーンショットから放送局のロゴを切り取って BMP 形式で保存します。
JPEG 形式 png 形式にも対応できますが、認識精度の点で不安があります。
と言うか JPEG ではうまくいきませんでした。
ロゴを大きく切り取るほど NG 判定される面積も大きくなって認識失敗するので特徴的な小さな画像を切り取る以外は信用ならないと考えた方が良いです。
操作ボタンについては以前撮影した png ファイルで対応できました。

使ってみる。

使ってみた様子を動画に撮影してみました。

スクリーンキーボードも動画に含めてfunctionキーを押しているところを確認できるようにしました。
文化放送ニッポン放送 TBS ラジオの順番に選択しています。
ちょっぴり音声が入ってしまってラジオコンテンツを再配布しちゃっているのはごめんなさい。
ボリュームを絞って消そうかと思いましたが、ボリュームのつまみがスピーカーのアイコンにかぶってしまって判定できないことに気がつきました。
今この瞬間は直す気力がない。
放置されたバグってやつです。
右方向にしか放送局を変えられないので一周回ってくるケースではまどろっこしさを感じます。
特に Radiko ガジェットを起動直後は放送局のロゴをダウンロードできていなくて表示できない時間がしばらく続くんですが、この際にロゴが見つからずに空回りすることがあります。
一周する間にダウンロードできるので、2週目では必ず成功しますが、さすがに2周回るとそれなりの時間がかかります。