hand / state.py
Neil67's picture
Deploy gesture image player
e47efb2 verified
Raw
History Blame Contribute Delete
1.81 kB
from pathlib import Path
import numpy as np
from PIL import Image, ImageDraw
SUPPORTED_IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".bmp", ".webp"}
class ImageState:
def __init__(self, assets_dir: str = "assets"):
self.assets_dir = Path(assets_dir)
self.image_paths = self._load_image_paths()
self.index = 0
def _load_image_paths(self):
if not self.assets_dir.exists():
return []
paths = []
for path in sorted(self.assets_dir.iterdir()):
if path.suffix.lower() in SUPPORTED_IMAGE_EXTENSIONS:
paths.append(path)
return paths
def next_image(self):
if not self.image_paths:
return None
self.index = (self.index + 1) % len(self.image_paths)
return self.image_paths[self.index]
def prev_image(self):
if not self.image_paths:
return None
self.index = (self.index - 1) % len(self.image_paths)
return self.image_paths[self.index]
def first_image(self):
if not self.image_paths:
return None
self.index = 0
return self.image_paths[self.index]
def last_image(self):
if not self.image_paths:
return None
self.index = len(self.image_paths) - 1
return self.image_paths[self.index]
def get_current_image(self):
if not self.image_paths:
return self._create_placeholder_image()
image = Image.open(self.image_paths[self.index]).convert("RGB")
return np.array(image)
def _create_placeholder_image(self):
image = Image.new("RGB", (640, 360), color=(40, 40, 40))
draw = ImageDraw.Draw(image)
draw.text((20, 20), "No images in assets/", fill=(255, 255, 255))
return np.array(image)