Initial commit from agent
This commit is contained in:
48
capabilities/screen_vision.py
Normal file
48
capabilities/screen_vision.py
Normal file
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
Screen vision — captures screenshots and identifies active/open windows.
|
||||
Uses mss for fast capture and win32gui for window enumeration.
|
||||
"""
|
||||
import mss
|
||||
import base64
|
||||
import io
|
||||
from PIL import Image
|
||||
|
||||
try:
|
||||
import win32gui
|
||||
WIN32_AVAILABLE = True
|
||||
except ImportError:
|
||||
WIN32_AVAILABLE = False
|
||||
print("[JARVIS] pywin32 not available — window detection disabled")
|
||||
|
||||
def get_active_window_title() -> str:
|
||||
if WIN32_AVAILABLE:
|
||||
return win32gui.GetWindowText(win32gui.GetForegroundWindow())
|
||||
return "Unknown"
|
||||
|
||||
def list_open_windows() -> list[str]:
|
||||
if not WIN32_AVAILABLE:
|
||||
return []
|
||||
windows = []
|
||||
def _enum(hwnd, _):
|
||||
if win32gui.IsWindowVisible(hwnd):
|
||||
title = win32gui.GetWindowText(hwnd)
|
||||
if title:
|
||||
windows.append(title)
|
||||
win32gui.EnumWindows(_enum, None)
|
||||
return windows
|
||||
|
||||
def capture_screen() -> str:
|
||||
"""Returns base64-encoded PNG of the primary monitor."""
|
||||
with mss.mss() as sct:
|
||||
monitor = sct.monitors[1]
|
||||
img = sct.grab(monitor)
|
||||
pil_img = Image.frombytes("RGB", img.size, img.bgra, "raw", "BGRX")
|
||||
buffer = io.BytesIO()
|
||||
pil_img.save(buffer, format="PNG")
|
||||
return base64.b64encode(buffer.getvalue()).decode()
|
||||
|
||||
def capture_screen_file(path: str = "screenshot.png") -> str:
|
||||
"""Saves screenshot to file and returns the path."""
|
||||
with mss.mss() as sct:
|
||||
sct.shot(mon=1, output=path)
|
||||
return path
|
||||
Reference in New Issue
Block a user