この記事でわかること
「画面」を見て「判断」し、「自動クリック」をさせる。
「ディープラーニング」は要らないけど、「単純作業」を「自動で」やって欲しい・・!
という方のための記事です。
実は「Python」で「簡単に」作れますよ!
キーボード操作やマウス操作をプログラムから実施できるようにするpythonライブラリです!
作業の自動化 「pyautogui」を使おう!
Pythonコード | 簡単な例
import pyautogui
x, y = pyautogui.locateCenterOnScreen(”img.png”)
pyautogui.click(x,y)
このファイル「simple_ex.py」と同じフォルダに「img.png」を置きます。
実行すると「img.png」と同じ画像を画面上で探してきて、その位置をクリックします。
便利に使う例
ある画像を見て、別の画像をクリックさせることもできます。
動作
「スタートボタンを探してクリックさせる。ランプがついたらストップボタンを押す。」
・・・単純だけど人がやっている作業、ありますよねー。
早すぎるとわかりにくいので前後に3秒待ちます。
「Pause」で終わります。
ファイル名 | 画像 |
“start.png” | 「Start」ボタン |
“on.png” | 「on」ランプ |
“stop.png” | 「Stop」ボタ |
こういう微妙に手間がかかる作業を自動化したいんです!
Pythonコード | pyautogui と OpenCV を使用
import pyautogui, os
pyautogui.useImageNotFoundException()
def click_from_imagename(name_check, name_click, conf, message):
while True:
# check img
try:
pyautogui.locateCenterOnScreen(name_check, grayscale=True, confidence=conf)
except pyautogui.ImageNotFoundException:
print(".", end="")
pyautogui.sleep(0.3)
else:
# click img
try:
x, y = pyautogui.locateCenterOnScreen(name_click, grayscale=True, confidence=conf)
except pyautogui.ImageNotFoundException:
printa(".", end="")
pyautogui.sleep(0.3)
else:
#print('x:{}\ny:{}'.format(x, y))
pyautogui.click(x,y)
print(message)
break
s = "start.png"
o = "on.png"
p = "stop.png"
print("Start Watching!")
print("...Waiting 3sec...")
pyautogui.sleep(3)
click_from_imagename(s, s, 0.95, "Found Start Button! Pressed!")
print("...Waiting 3sec...")
pyautogui.sleep(3)
click_from_imagename(o, p, 0.95, "Found ON! Stop Pressed!")
os.system('PAUSE')
使い方のポイント
ライブラリ
Pythonライブラリの「pyautogui」と補助で「OpenCV」を使用します。適宜インストールしましょう。
conda install -c conda-forge pyautogui
conda install -c conda-forge opencv
failed with initial frozen solve. Retrying with flexible solve.
failed with repodata from current_repodata.json, will retry with next repodata source.
私は下記の対応で正常にインストールできました。
conda update --all
画像の認識
pyautogui.locateCenterOnScreen(name_check, grayscale=True, confidence=conf)
与えられた画像(name_check)を探します。
オプションとして画像をモノトーンにする「grayscale=True」と、完全一致でなくてもOKにする「confidence=0~1の間の数字」を入れています。
confidenceオプションの使用にはOpenCVライブラリが必要です。
このオプションは便利なのでいれましょう!
try:
pyautogui.locateCenterOnScreen(name_check, grayscale=True, confidence=conf)
except pyautogui.ImageNotFoundException:
ここでは「画像の有り無し」をアクション前に先にチェックします。
画像がないとpyautogui.locateCenterOnScreenはエラーを出すので、try/except文を使っています。
なおexceptは「pyautogui.ImageNotFoundException」をつけることで、「画像がなかった場合の例外処理」にしています。
これをwhile文で監視し続けるわけですね。
try:
exept:
else:
tryで成功した場合はelseに進みます。
二重try/exeptにすると若干読みづらいので、elseを利用しています。
クリックの実行
try:
x, y = pyautogui.locateCenterOnScreen(name_click, grayscale=True, confidence=conf)
else:
pyautogui.click(x,y)
「name_check」があることを認識した上で、「name_click」を探しに行きます。
「x, y = pyautogui.locateCenterOnScreen」とすることで、画面上の位置x,yを返してくれます。
無事見つかれば、elseに進んでその位置をクリックします。
AIってほどでもないけど、手軽に自動化してくれる処理が簡単に作れて素晴らしい・・・!!
日常の業務に便利です。
人に渡す場合はexeに!
このスクリプトは当然(ライブラリを入れた)Python環境が無いと動きません。
人に渡すときは「exeファイル」にすることもできます。
そんなときは「pyinstaller」を使いましょう!
conda install -c conda-forge pyinstaller
使い方はAnaconda Promptで、目的のフォルダに移動したあと
pyinstaller auto-click.py
を実行します。コンソールを見せない場合はオプションをつけて
pyinstaller auto-click.py --noconsole
としましょう!
画像のファイルはexeファイルと別に持っておく必要があります。
exeファイルと同じフォルダに画像データを入れて下さいね。
まとめ
Pythonのライブラリpyautoguiとopencvで、画像認識で自動クリックさせるスクリプトを紹介しました。
日々のじみーな作業を自動化しましょう!!
コメント