目的
- Android端末の画面キャプチャを高速で行いたい.
- 昨今スマホゲームの1ジャンルである音ゲーの自動テストを行うため
問題点
- 従来手法:adbコマンドからscreencapコマンドを使用
- 画面のFullHD化に伴い,キャプチャーから転送までに非常に時間がかかるようになってしまった.
- 下手するとキャプチャから画像を引っ張ってくるのに2秒ぐらいかかる.
これでは音ゲーのテストが出来ない.
試行錯誤
Android Screen Monitor
- adakoda様が制作されたものですが,開発が4年前で止まっていること,また当初想定された画面サイズから現在かなり肥大化したためキャプチャが追い付かないことなどから断念.
HDMI Capture Deviceの利用
-
JaSST'17のCygames様の発表を拝見させていただき,MHL経由でのHDMI Captureによる画像取得に思い至る.しかしながら,
筆者がC#書けないヘタレであることHDMI Capture Device自体が高価であること,また複数台接続に不安があることから,本手法を断念.
解決案
- CyberAgent様が以前発表されたSmartphone Test Farm (OpenSTF) の技術として,minicapというのがあるらしいのでこれをどうにかして使えないだろうか,と考える.
-
筆者はJavaScript書けないヘタレであるためゆくゆくはOpenCVとの連携も視野に入れるため,Pythonでの実装を考えることにする.
んで.
- 作ってみた.
- minicapと通信する部分は,中国の方が作成されたものをそのまま流用させていただいた.
実装
-
stream.py がminicapプロセスからのデータを取得する部分で,データの解析部分になる.
- データの説明については本家が一番であるため割愛
- 画像データ取得後,処理を行っているのはsample project の minicap.py で,取得した画像データをOpenCV形式に変換している.
感想
- 画面キャプチャが速くなったのはいいが,画面をタップしたりフリックしたりする動作がadb経由で遅いままなのでそっちを改善しないといけなくなった.