Files
sakibot/source/command.py
T
2026-04-21 18:01:04 +02:00

66 lines
2.1 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
import logging
logging.basicConfig(format='[%(asctime)s] %(process)s %(levelname)s {%(filename)s:%(lineno)d} - %(message)s', level=logging.DEBUG)
try:
import cv2
except ImportError as e:
logging.error(f"Missing dependency: {e}")
logging.error("Install with: pip install opencv-python")
sys.exit(1)
class Command:
"""Dataclass for commands"""
__AUTHOR__ = 'anima'
__VERSION__ = '1.0.0'
image_dir: Path = Path('images/')
supported_extensions = {".png", ".jpg", ".jpeg", ".bmp"}
def __init__(self, image_name: str, commands: list, counter: int = None, threshold: float = 0.95, position: tuple = None):
self.valid = False
self.name = image_name
self.commands = commands
self.threshold = threshold
self.position = position
self.pos_dif = 10
self.counter = counter
self.count = 0
self.load_image()
def load_image(self) -> bool:
"""search, load and save image convertet as matchable object
Returns:
bool: Return True if image load successfull
"""
images = list(self.image_dir.rglob('*' + self.name + '*'))
if len(images) > 0:
for image in images:
logging.debug(f'found image: {image.name} (pattern: {self.name})')
if len(images) > 1:
logging.warning(f'more than one images found for pattern {self.name}, can not load command')
return False
elif len(images) == 1:
logging.info(f'load image for command {self.name}')
else:
logging.warning('no images found for pattern {self.name}')
return False
if image.suffix.lower() not in self.supported_extensions:
logging.warning(f'image type of {image} is not supported')
return False
self.image = cv2.imread(str(image), cv2.IMREAD_COLOR)
if image is None:
logging.warning(f'could not load {image}')
else:
self.valid = True
return self.valid
def check_position(self, )