Wizard In The Market
システムトレードの魔術師

*

Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ

公開日: : 最終更新日:2015/02/26 Autoaction, Python , , , , , , ,

3356358479_a0e3ee8a05_z

Photo by John Greenaway

[2015/02/07 追記]

こんなの見つけました。これがあれば不要ですね・・。

[/追記]

こんにちは、キリンです。

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の動作不良

スクリーンショットの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等からインストールしてください。

サンプルコード

こんな感じのコードを書けば、自動でFirefoxの検索窓から”python-autoaciton”を自動で検索してくれます。

まだ複合キーの送付等には対応していません。随時追加していこうと思います。

余談

作っている最中に、こんなのを見つけました。まだ詳しく調べられてませんが、実はこれで事足りるのかも?。

ご参考になれば幸いです!

にほんブログ村 為替ブログへ 
Fx-Kirin

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年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 67 follow us in feedly

関連記事

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の画像のように、Wid

記事を読む

PythonでsleepしているThreadを呼び起こすプラクティス

Pythonのsleep中のThreadをWake up PythonのThreadにて、RubyのThr

記事を読む

swig で foofunction is private と怒られた時。

例えばのエラーとしてはこれ。 問題は、公開する予定のクラスのpublicインスタンス変数にprivateにしなけれ

記事を読む

Python requests に DefaultTimeout を設定する

Pythonコード 参考リンク [bm url="https://stackoverflow.com/quest

記事を読む

Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる

こんにちは。キリンです。 最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れまくっていると苦行でし

記事を読む

Quantopian の pyfolio を単利運用に対応させる。

pyfolio は どんなデータを入れても複利運用として計算してしまうので、人によっては望まない検証方法だったりし

記事を読む

まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ

タイトルはあまり気にしないでください。全然、Bokehで消耗する価値があるとは思っています。ただ、最近Pandasの

記事を読む

numpy の2つ行列で片方にあるものだけを抽出する。

numpy で2つの時間のインデックスをarrayデータとして持っていて、x にはない時間のインデックスがyにはあっ

記事を読む

Python での ポートフォリオの計算

Python でのポートフォリオの計算 ポートフォリオの計算について色々調べてみた。とりあえず使いたいって人はpo

記事を読む

Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python-future.or

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine

My pc was periodically shut down on 7:40 am JS

Ubuntu で仮想ディスプレイを使う

雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の

→もっと見る

PAGE TOP ↑