\

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を使ってスクリーンショットを自動化するプログラムの作成が完了しました。

このプログラムは、指定した範囲のスクリーンショットを定期的に撮影し、画面に変化があった場合にのみ画像を保存します。これにより、何度もスクリーンショットボタンを押す手間を省くことができます。

参考

投稿者 admin

コメントを残す

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