diff --git a/.gitignore b/.gitignore index 8a2eb62..530cc46 100644 --- a/.gitignore +++ b/.gitignore @@ -184,3 +184,9 @@ poetry.toml pyrightconfig.json # End of https://www.toptal.com/developers/gitignore/api/python + + +# Custom ignores +src/nenuscanner/static/feed.jpg +db.sqlite + diff --git a/src/nenuscanner/camera.py b/src/nenuscanner/camera.py index 414e163..de9f333 100644 --- a/src/nenuscanner/camera.py +++ b/src/nenuscanner/camera.py @@ -1,4 +1,6 @@ import subprocess + +from flask import jsonify import gphoto2 as gp import shutil from . import leds, config @@ -75,6 +77,16 @@ class RealCamera(Camera): except Exception as e: print('An error occured when capturing photo', e) return None + + def capture_preview(self): + try: + subprocess.run( + "gphoto2 --capture-preview --stdout > src/nenuscanner/static/feed.jpg", + shell=True, check=True + ) + except subprocess.CalledProcessError as e: + print('An error occured when capturing photo', e) + raise CameraException(f"Erreur lors de la capture de l'image: {e}") def save(self, capture, output_file): preview = self.inner.file_get(capture.folder, capture.name[:-3] + 'JPG', gp.GP_FILE_TYPE_NORMAL) @@ -146,3 +158,8 @@ def config(): def set_config(parameter, value): return camera.set_config(parameter, value) + +class CameraException(Exception): + """Exception personnalisée pour les erreurs liées à la caméra.""" + def __init__(self, message): + super().__init__(message) \ No newline at end of file diff --git a/src/nenuscanner/routes/camera.py b/src/nenuscanner/routes/camera.py index 152527b..a050b59 100644 --- a/src/nenuscanner/routes/camera.py +++ b/src/nenuscanner/routes/camera.py @@ -1,8 +1,10 @@ from flask import Blueprint, render_template, request, send_file, jsonify import json +import subprocess from .. import camera as C + blueprint = Blueprint('camera', __name__) # Routes for object management @@ -76,4 +78,16 @@ def get_camera_config(): 'params': section_params }) - return jsonify(grouped_params) \ No newline at end of file + return jsonify(grouped_params) + +@blueprint.route('/capture_preview', methods=['POST']) +def capture_preview(): + """ + Capture un aperçu avec gphoto2 et sauvegarde dans static/feed.jpg + """ + try: + cam = C.get() + cam.capture_preview() + return jsonify({'status': 'ok'}) + except C.CameraException as e: + return jsonify({'status': 'error', 'error': str(e)}), 500 \ No newline at end of file diff --git a/src/nenuscanner/templates/camera.html b/src/nenuscanner/templates/camera.html index 5d3b6f6..a8ecd93 100644 --- a/src/nenuscanner/templates/camera.html +++ b/src/nenuscanner/templates/camera.html @@ -10,29 +10,17 @@