iOS のショートカットで音ゲーのスコアを記録する
※ これは RICORA Advent Calendar 2022 6日目の記事です
「ショートカット」App は iOS / iPadOS 13 以降に標準で入っていて(最近では Mac にも?)色々できて便利なのにあまり使ってる人がいない気がするので、布教を兼ねて音ゲーのスコアをデータ化する方法を紹介する。
「ショートカット」App とは?
「アクション」を繋げてプログラムっぽいものを作って作業を自動化するアプリ。かなり色々なことができて、ちょっとしたことならそのためのアプリを探さずに自分でサクッと組んで実現できる。記事が長くなるので詳しい作り方は各々調べてください…。アプリ内の「ギャラリー」の項目にサンプルが多数用意されているので、まずはそれを見てみるとよい。
私が作成したものを二つほど挙げる。
撮った写真から PDF を作成
2年前の授業がフルリモートだった時代には、小テストの解答をこれと似たようなもので PDF 化して提出していた。
音ゲー起動時に通知off、画面を明るくする
何かをトリガーにして実行させることもできる(オートメーション)。ここでは特定のアプリ(Arcaea, Dynamix など)が開いたときに実行されるようにしている。NFC タグを使うこともできる。
goryugo.com
ここから本題
やりたいのは「音ゲーのリザルト画面から情報を取り出してデータ化する」ということ。スクショを撮って文字認識 (OCR) で実現する(ショートカットで OCR を使うには iOS / iPadOS 15 以上が必要?)
作成したショートカットを呼び出す方法は、
- 「ショートカット」App 内で一覧から選択
- オートメーション
- 共有シート
- ホーム画面にアイコン / ウィジェットを置く
- AssistiveTouch
- 背面タップ
などがある。今回は画面を切り替えずに呼び出せる AssistiveTouch を使う。私の場合は既に1回タップに画面回転ロック / 解除、長押しにスクショを割り当てているので、これはダブルタップに割り当てる。
デモ
Arcaea で動かしたデモ
リザルト画面で AssistiveTouch をダブルタップすると画面から曲名、スコア、難易度を抽出して現在時刻と共に CSV として Dropbox 上のファイルに追記する。Arcaea, Dynamix, KALPA に対応させた。
ショートカットの中身
呼び出すショートカット名は「スコア保存」とする。
まず画面のスクショを撮る。画像のトリミングと OCR を使って、特定の位置に特定の文字列が書かれているかどうかを調べることでどのゲームのリザルトか判別する。
後述のようなショートカットをゲームごとに作成しておき、認識したゲームに対応するものを呼び出して最初に撮ったスクショを渡す。
ショートカットでは各アクションの結果が個別に保持されていて、「マジック変数」で取り出すことができる。ここでは最初に撮ったスクショのマジック変数に "ss" という名前を付けている。加えて、一般的なプログラム言語でいう変数(データの入れ物)を使うこともできる。
Arcaea の例
Arcaea のリザルトを認識するとこのショートカット(画像)が呼び出される(ショートカット名は「スコア保存-arcaea」)。
赤枠のあたりをトリミングしてそれぞれに OCR を使って曲名、スコア、難易度を取り出す(それぞれマジック変数に "title", "score", "level" の名前を付けている)。同様にすれば判定数や最大コンボ数を取ることもできるはず。
現在時刻(マジック変数 "date")と併せて CSV の行 ("csvout") を作り、OCR が認識した内容を確認するためにそれを画面に表示。問題なければ Dropbox 上のファイルに追記して終了(代わりに別のアクションを使えば iCloud 上のファイルや端末内のローカルファイルを指定することも可)。
他のゲームでもトリミング位置が違うだけでやることは同様。ゲームごとにこのようなショートカットを作り、「スコア保存」から呼び出す。
ショートカットを AssistiveTouch に割り当てる
「設定」App -> アクセシビリティ -> タッチ -> AssistiveTouch と進む。
AssistiveTouch を有効にし、「カスタムアクション」に「スコア保存」を割り当てる。
問題点
OCR に付随する問題がどうしても生じてしまう。
日本語がうまく認識できない
Arcaea の場合は言語設定を英語にすれば曲名も英語になるので対処できるが…他のゲームは無理そう。
Dynamix のスコアの認識がうまくいかないことが多い
たぶんデジタル表示っぽいフォントを使ってるせい。PC に渡してテンプレートマッチングとかすれば読めそうだけどショートカットで完結させたいので妥協…。
ショートカットの実行に時間がかかる
おそらく Dropbox 上で読み書きしているせい。普段はローカルファイルに書き込んで、定期的に Dropbox へ反映させても良いかもしれない。
作った CSV の使い道
いくつか問題点はあるものの、大半のリザルトを自動でデータ化することができた。
Arcaea に関してはポテンシャル計算のためにハイスコアを表計算で記録しているので、この CSV からハイスコアを自動反映させるマクロを作ると良さそう。とはいえ OCR の誤認識を吸収するのは結構面倒…?
他のゲームについては特にそのようなことはしていないので、現状は単にいつどの曲を遊んだか記録しておけるのみ。
最後に
今回は音ゲーのリザルトを記録する方法を紹介したが、同じようにすれば他ジャンルのゲームでも手に入ったアイテムの集計などに使えるはずである。