Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ
公開日:
:
Autoaction, Python autoaction, autohotkey, autokey, gui automation, programming, python, sikuli, xpresser
Photo by John Greenaway
こんにちは、キリンです。
WindowsにAutoHotKeyという自動操作を簡単に作成できるソフトがありまして、その代替的機能をUbuntu上で実現できるソフトがないかと探していました。しかし、納得の行く既存のソフトがなかったので自分で作成してみたというお話です。
目次
AutoHotKeyとは
AutoHotkey とは、Microsoft Windowsが導入されているパーソナルコンピュータに常駐して一連の操作を自動化するためのユーティリティソフトウェアである。(Wikipediaより)
このソフト、めちゃくちゃ便利なんですよね。画像検出でGUIの操作ができるWindows上のマクロソフトの中でもカスタマイズ性に富んでいて、何よりも画像検出の速度が速い。使っていたRuby上からコマンドライン呼び出しで引数を渡しながらGUIの自動操作を行うということを良くしていました。自作DLLの呼び出しもでき、MySQLとの連動ができるライブラリの公開もあったりして、ほんとなんでもできるようになっている自動化ソフトです。
これだけ便利だと、なかなか他を使わなくなってしまうんですが、今回はLinux環境ということで諦めざるをえません。なので代替ソフトがないかなぁと探してみました。
代替ソフトウェアの候補
似たようなことを考える人は多いようで、すでにまとめてらっしゃる方がいたので記事をご紹介します。
色々紹介されていますが、個人的に使えそうだなと思ったのは以下の3つです。
AutoKey
AutoHotKeyの常駐アプリとしての機能を補完したいならこれ。ただ、画像検出でクリックする機能がない。あと、できるならpython上で動かしたい。
Sikuli
Linux上で画像検出による自動クリックを実現したいならこれ。ただ、Jythonというのが気に入らない。
Xpresser
Python上で動くライブラリ。動画は実際にXpresserを使って、GUI操作自動化スクリプトを即座に作ったhowto動画です。機能だけみてみたら個人的には大満足!
・・・のはずなんだけど、Xpresserがちゃんと動かないんです。デバッグしながら色々調べてみたところ、Xpresserで使っているSimpleCVというライブラリがちゃんと機能していない模様。
SimpleCVとは?
OpenCVのラッパーのような感じで、簡単にOpenCVを使おうよみたいな趣旨で作成されたライブラリみたいです。
SimpleCVの動作不良
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from SimpleCV import * import sys, time, socket source = Image("/home/myuser/Pictures/Tooltip_004.png", sample=True) # the image to search template = source.crop(10, 10, 30, 30) t = 5 #methods = ["SQR_DIFF","SQR_DIFF_NORM","CCOEFF","CCOEFF_NORM","CCORR","CCORR_NORM"] methods = ["CCOEFF_NORM"] # the various types of template matching available for m in methods: print "current method:", m # print the method being used result = Image("/home/myuser/Pictures/Tooltip_004.png", sample=True) dl = DrawingLayer((source.width,source.height)) fs = source.findTemplate(template,threshold=t,method=m) for match in fs: print match, match.quality dl.rectangle((match.x,match.y),(match.width(),match.height()),color=Color.RED) result.addDrawingLayer(dl) result.applyLayers() #result.show() result.save("/home/myuser/Pictures/Tooltip_004_%s.png"%(m)) time.sleep(3) |
スクリーンショットのPNGから指定位置の画像(x=10, y=10, w=30, h=30)を取り出して、ちゃんと取り出した部分を画像検出で抽出するかということを検証した簡単なプログラム。本来ならばっちりx=10, y=10の点で最も良い結果が得られるはずなのに、全然ちゃんと動かない。とんでもない点が抽出されたり、何よりQualityの値が悪すぎて使い物になりません。なので、ちゃんと動く大元のOpenCVを使って改良してみました。
GUI操作自動化ライブラリ Autoaction
Xpresserの優秀なモジュールであるxutils.pyを使って、簡単にGUIを操作自動化のライブラリを作ってみました。
まだクリックすることと、キーボードを入力することしか対応していませんが、必要になり次第、徐々に機能の拡充を図っていこうと思います。
インストール
インストールはsetup.pyしか用意していませんので、GitHub上からダウンロードして、ディレクトリのルートで下記コマンドを実行してください。
python-opencvも必要なので、インストールしてない人はapt-get等からインストールしてください。
|
1 |
python setup.py install |
サンプルコード
こんな感じのコードを書けば、自動でFirefoxの検索窓から”python-autoaciton”を自動で検索してくれます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import os from autoaction import Autoaction if __name__ == "__main__": file_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "images") # Set the image directory auto = Autoaction(file_dir) # click_image() will click the image on the screen # x, y is the width from the matching point. auto.click_image("firefox_icon.png", x=5, y=5) auto.sleep(3) auto.click_image("search.png", x=5, y=5) auto.sleep(1) # type() will type the keyboard following the input string. # When you input array string, you can use special keys. auto.type(["python-autoaction", "<Enter>"]) |
まだ複合キーの送付等には対応していません。随時追加していこうと思います。
余談
作っている最中に、こんなのを見つけました。まだ詳しく調べられてませんが、実はこれで事足りるのかも?。
ご参考になれば幸いです!
About Fx-Kirin
2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。自分が得た経験から少しでもこれからFXを始める人の一助になればとブログを日々更新している。
- Web |
- More Posts (29)
References
| 1. | ↑ | source.width,source.height |
| 2. | ↑ | match.x,match.y),(match.width(),match.height( |
Adsense
関連記事
-
-
Pythonのsocketでプロセス間通信をして価格データ等を送信する
どうも、お久しぶりです。キリンです。 取り敢えず1ヶ月ほど、連続でブログの更新を続けてみたのですが、そ
-
-
話題のクローラー・スクレイピング!PythonならScrapyが超優秀な件
Rubyの読書会に行ったら、Pythonの面白いお話を聞けたというお話です。 Rubyクローラー本の読書会に参
Adsense
サイト内検索
NEW ENTRY
-
- Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ
こんにちは、キリンです。 WindowsにAutoHotKeyという自動操作を簡単
-
- Pythonのsocketでプロセス間通信をして価格データ等を送信する
どうも、お久しぶりです。キリンです。 取り敢えず1ヶ月ほど、連続でブログの更新を続
-
- Notification drawer欄の時計に秒数表示を追加する方法
昨日の記事への追記で、Statusbarから下へフリックした時に表示されるNotificatio
-
- Androidのステータスバーに秒数表示を追加する方法
FXや株のトレードをしていると秒単位で時間を確認したいことってよくありますよね。経済指標の発
-
- 元ファンドマネージャーがビジネススクールで株式投資を語る授業が面白い
先日の記事でご紹介したように、最近gaccoの授業を受けてみています。痒いところに手が届
-
人気記事一覧
Pythonのsocketでプロセス間通信をして価格データ等を送信する 640 views
話題のクローラー・スクレイピング!PythonならScrapyが超優秀な件 201 views
Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ 108 views
乗っ取られてからでは遅い!WordPressのログインのセキュリティを向上 54 views
SEO効果大!自動で記事に目次を追加しよう 39 views
元ファンドマネージャーがビジネススクールで株式投資を語る授業が面白い 33 views
開講したばかり!統計学の授業をgaccoで無料で受講! 32 views
キリンおすすめFX業者