obswebsocketで特定ソースのスクリーンショットを撮る方法

BLIP2でキャプション作って、キャプションからAIにイラスト褒めさせる遊びしてました。


それで次はOBSの画面上のスクショを取得してAIになんか適当なこと言わせたかったんですが、スクショ取得する部分ではまっちゃったのでメモ。
これで適当なタイミングで要素を取得して、AIに適当なこと言わせられそうです。

import obswebsocket, obswebsocket.requests
import base64
import json
# OBSに接続します
client = obswebsocket.obsws("localhost", 4444,"パスワード")
client.connect()

# ソース名を使用してスクリーンショットを取得します
response = client.call(obswebsocket.requests.TakeSourceScreenshot(sourceName='ソース名', embedPictureFormat='png', width=None, height=None))
response_dict = response.__dict__
img_data = response_dict["datain"]["img"].split(",")[1]

img_data = img_data.encode('utf-8')
# パディングが欠落している場合は、パディングを追加します
missing_padding = len(img_data) % 4
if missing_padding != 0:
    img_data += b'=' * (4 - missing_padding)

# スクリーンショットをファイルに保存します
with open('screenshot.png', 'wb') as f:
    f.write(base64.b64decode(img_data))

# OBSから切断します
client.disconnect()

この記事が気に入ったらサポートをしてみませんか?