import cv2 import os from os.path import join import subprocess import shutil import time import gphoto2 as gp import gpiod from . import config, leds # Delay between to captures DELAY = 0.5 def capture(camera, output_path: str) -> bool: try: print('Capturing image') file_path = camera.capture(gp.GP_CAPTURE_IMAGE) print('Camera file path: {0}/{1}'.format(file_path.folder, file_path.name)) target = output_path + '.cr2' print('Copying image to', target) print(file_path.folder, file_path.name[:-3] + 'JPG') camera_file_jpg = camera.file_get(file_path.folder, file_path.name[:-3] + 'JPG', gp.GP_FILE_TYPE_NORMAL) camera_file_jpg.save(output_path + '.jpg') camera_file_raw = camera.file_get(file_path.folder, file_path.name, gp.GP_FILE_TYPE_RAW) camera_file_raw.save(target) camera.exit() camera.init() s = True except Exception as e: print(f'Somethings wrong on gphoto2') print(e) s = False return s def scan(output_dir: str): camera = gp.Camera() camera.init() os.makedirs(output_dir, exist_ok=True) gpio_leds = leds.GpioLeds(config.LEDS_UUIDS) with gpio_leds: for count, led in enumerate(gpio_leds.leds): print(f'Turn on {led}') img = join(output_dir, f'{led}') # Measure the time it takes to capture start = time.time() led.on() capture(camera, img) led.off() # For debug purposes # shutil.copyfile(join('data-keep/small', led + '.jpg'), img) delta = time.time() - start # Wait for at least one second between each capture if delta < DELAY: time.sleep(DELAY - delta) print(f'Turn off {led}') if count == len(config.LEDS_UUIDS) -1: gpio_leds.off() camera.exit() yield led