【Python】 pyautoguiによるスクリーンショット撮影とピクセル解析

この記事では、Pythonのpyautoguiライブラリを使い、画面全体のスクリーンショットを撮影する方法と、画面上の特定座標のピクセルの色を解析する方法について解説します。これらは、GUIオートメーションにおいて、プログラムが画面の状態を「見る」ための基本的な機能です。


目次

1. スクリーンショットを撮る

pyautogui.screenshot()関数は、呼び出された瞬間の画面全体のスクリーンショットを撮影し、その画像をPillowのImageオブジェクトとして返します。

返されたImageオブジェクトは、.save()メソッドでファイルとして保存したり、.getpixel()メソッドで特定のピクセルの色情報を取得したりできます。

import pyautogui

# 画面全体のスクリーンショットを撮影
screenshot_image = pyautogui.screenshot()

# 撮影した画像をファイルに保存
screenshot_image.save('my_screenshot.png')

# 画面の(0, 0)座標(左上隅)のピクセルの色を取得
# 戻り値は(R, G, B)のタプル
color_at_origin = screenshot_image.getpixel((0, 0))
print(f"座標(0, 0)の色: {color_at_origin}")

# 別の座標の色を取得
color_at_50_200 = screenshot_image.getpixel((50, 200))
print(f"座標(50, 200)の色: {color_at_50_200}")

2. ピクセルの色を検証する

pyautogui.pixelMatchesColor()関数は、指定した座標のピクセルの色が、期待する色と一致するかどうかを直接判定するための便利な関数です。一致すればTrueを、そうでなければFalseを返します。

pyautogui.pixelMatchesColor(x, y, (R, G, B))

  • x, y: 検査したい画面上のX, Y座標。
  • (R, G, B): 期待する色のRGB値をタプルで指定。
import pyautogui

# 画面の(50, 200)座標のピクセルが、(60, 63, 65)という色であるかを確認
if pyautogui.pixelMatchesColor(50, 200, (60, 63, 65)):
    print("指定座標は期待通りの色です。")
else:
    print("指定座標は期待した色と異なります。")

# `tolerance`引数を使えば、色の誤差を許容することも可能
# if pyautogui.pixelMatchesColor(50, 200, (60, 63, 65), tolerance=10):
#     print("許容範囲内の色です。")

3. 実用例:特定のUI要素が表示されるまで待機する

pixelMatchesColor()は、特定のボタンやアイコンが表示されるまでプログラムの実行を待機させる、といった処理で特に役立ちます。

以下の例は、画面の特定座標が白((255, 255, 255))になるまで、1秒ごとにチェックを繰り返すループです。これは、例えば白いダイアログボックスが表示されるのを待つ、といった状況をシミュレートします。

import pyautogui
import time

# 画面の(100, 300)が白になるまで待機
print("指定座標が白になるまで待機します...")

while not pyautogui.pixelMatchesColor(100, 300, (255, 255, 255)):
    time.sleep(1)

print("指定座標が白になりました。処理を再開します。")

まとめ

pyautogui.screenshot()は画面の状態を画像として取得する機能を提供し、そのImageオブジェクトを通じてピクセルデータを分析できます。さらに、pyautogui.pixelMatchesColor()を使うことで、画面上の特定の位置の色を直接かつ簡単に検証できます。これらの機能を組み合わせることで、GUIアプリケーションの特定の状態をプログラムが認識し、それに応じて動作する、より高度な自動化スクリプトを作成することが可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次