Pythonを使ってスクリーンショットを自動化する方法について解説します。この記事では、特定の範囲のスクリーンショットを定期的に撮影し、画面に変化があった場合にのみ画像を保存するプログラムを作成します。
必要なライブラリ
以下のライブラリが必要です。
- Python 3.9.13
- OpenCV (opencv-contrib-python) 4.5.5.64
- Pillow 9.1.0
- numpy 1.21.6
コードの解説
まず、必要なモジュールをインポートします。
import os
import cv2
import time
import ctypes
import numpy as np
from PIL import ImageGrab
from datetime import datetime as dt
次に、スクリーンショットを取る範囲を指定します。
def screenshot_position():
try:
windll.shcore.SetProcessDpiAwareness(True)
except:
pass
そして、指定した範囲のスクリーンショットを定期的に撮影し、画面に変化があった場合にのみ画像を保存する関数を定義します。
def screenshot_loop(stop_time, dir_path, x1, y1, x2, y2):
try:
while True:
time.sleep(stop_time)
img = ImageGrab.grab(bbox=(x1, y1, x2, y2), all_screens=True)
img_ima = np.array(img)
if 'img_mae' in locals():
backSub = cv2.createBackgroundSubtractorMOG2()
fgmask = backSub.apply(img_mae)
fgmask = backSub.apply(img_ima)
if np.count_nonzero(fgmask) / fgmask.size * 100 < 0.5:
continue
img.save(f'{dir_path}/{dt.now().strftime("%y%m%d%H%M%S")}.png')
img_mae = img_ima
except KeyboardInterrupt:
print('\\n■■キャプチャ終了■■')
以上で、Pythonを使ってスクリーンショットを自動化するプログラムの作成が完了しました。
このプログラムは、指定した範囲のスクリーンショットを定期的に撮影し、画面に変化があった場合にのみ画像を保存します。これにより、何度もスクリーンショットボタンを押す手間を省くことができます。