AI打遊戲-貳(收集訓練圖片)

發表於2023-09-19

目標

  • 使用錄屏軟體將遊戲錄製成影片
  • 使用程式碼,每幾秒將影片幀儲存成圖片,作為後續訓練集

步驟

錄製遊戲影片

安裝錄屏軟體OBS

  • 可以用任意錄屏軟體,如果沒有的話可以下載開源的錄屏軟體"OBS Studio"
  • 直接上OBS Studio 官網,下載對應平臺版本
  • 雙擊安裝,一直下一步到安裝完成

OBS設定

  • 使用"管理員"啟動OBS(這步很重要!!!否則有可能無法獲取到遊戲視窗)
  • 啟動遊戲
  • 新增場景 > 新增來源 > 遊戲源 > 採集特定視窗 > 視窗選擇"Tap Ninja"
  • 畫布中顯示遊戲畫面即為成功

1_0_OBS.png

錄製影片

  • 點選右下角的"開始錄製"
  • 錄製過程中同時玩這個遊戲,增加樣本的豐富程度
  • 錄製10-30分鐘的影片

影片幀儲存為圖片

  • 使用opencv-python讀取影片
  • 每隔3秒取一個影片幀,儲存成本地圖片

程式碼環境

  • 啟動一個python專案,python版本>=3.8
  • 安裝opencv
# 安裝opencv
pip install opencv-python
# 使用阿里雲映象安裝
pip install -i https://mirrors.aliyun.com/pypi/simple/  opencv-python

截圖

  • 使用opencv截圖
import cv2
import os


def build_dir(dir_path):
    """
    建立目錄(當目錄不存在時)
    """
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)


def main(video_path, image_dir, pick_interval_seconds):
    # 開啟影片檔案
    cap = cv2.VideoCapture(video_path)

    # 獲取每秒幀數
    fps = cap.get(cv2.CAP_PROP_FPS)
    pick_number = int(fps * pick_interval_seconds)

    frame_index = 0
    while cap.isOpened():
        # 讀取幀
        ret, frame = cap.read()
        if not ret:
            break

        # 幀索引可以被選取號整除時,儲存這張圖片
        if frame_index % pick_number == 0:
            # 拼接圖片路徑
            image_path = os.path.join(image_dir, f"{frame_index}.jpg")
            # 儲存圖片
            cv2.imwrite(image_path, frame)
            print(f"截圖已儲存: {image_path}")

        frame_index += 1

    print("截圖已經完成")


if __name__ == "__main__":
    # 影片地址
    video_path = "E:\\ai-play-game\\2023-09-12 23-27-51.mp4"
    # 圖片存放路徑
    image_dir = "E:\\ai-play-game\\images"
    # 影片幀擷取間隔秒數
    pick_interval_seconds = 3

    build_dir(image_dir)
    main(video_path, image_dir, pick_interval_seconds)

本節結果

  • 得到一段遊戲影片檔案
  • 200~300張影片幀截圖圖片

相關文章