This commit is contained in:
Joel Collins 2020-10-28 17:32:14 +00:00
commit 9dd8004984
5 changed files with 16 additions and 8 deletions

View file

@ -325,7 +325,7 @@ class MoveAndMeasureAPI(ActionView):
if microscope.has_real_stage():
# Acquire microscope lock with 1s timeout
with microscope.lock(timeout=1):
with microscope.camera.lock, microscope.stage.lock:
return move_and_measure(microscope, dz=args.get("dz"))
else:

View file

@ -315,8 +315,6 @@ class PiCameraStreamer(BaseCamera):
def start_preview(self, fullscreen=True, window=None):
"""Start the on board GPU camera preview."""
logging.info("Starting the GPU preview")
with self.lock():
try:
if not self.camera.preview:

View file

@ -1,3 +1,3 @@
from . import capture, capture_manager
from .capture import CaptureObject
from .capture import CaptureObject, THUMBNAIL_SIZE
from .capture_manager import CaptureManager

View file

@ -6,6 +6,7 @@ import logging
import os
import uuid
from collections import OrderedDict
from PIL import Image
import dateutil.parser
@ -14,6 +15,7 @@ from openflexure_microscope.camera.piexif._exceptions import InvalidImageDataErr
from openflexure_microscope.config import JSONEncoder
EXIF_FORMATS = ["JPG", "JPEG", "TIF", "TIFF"]
THUMBNAIL_SIZE = (200, 150)
def pull_usercomment_dict(filepath):
@ -347,8 +349,16 @@ class CaptureObject(object):
thumbnail = exif_dict.pop("thumbnail")
if thumbnail:
return io.BytesIO(thumbnail)
# If no thumbnail exists, serve the full image
return self.data.getvalue()
# If no thumbnail exists, make and save one
thumb_bytes = io.BytesIO()
thumb_im = Image.open(self.data)
thumb_im.thumbnail(THUMBNAIL_SIZE)
thumb_im.save(thumb_bytes, "jpeg")
thumbnail = thumb_bytes.getvalue()
exif_dict["thumbnail"] = thumbnail
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, self.file)
return io.BytesIO(thumbnail)
def save(self) -> None:
"""Write stream to file, and save/update metadata file"""

View file

@ -10,7 +10,7 @@ import pkg_resources
from expiringdict import ExpiringDict
from openflexure_microscope.camera.mock import MissingCamera
from openflexure_microscope.captures import CaptureManager
from openflexure_microscope.captures import CaptureManager, THUMBNAIL_SIZE
from openflexure_microscope.stage.mock import MissingStage
from openflexure_microscope.stage.sanga import SangaDeltaStage, SangaStage
@ -387,7 +387,7 @@ class Microscope:
# Capture to output object
extras = {}
if fmt == "jpeg":
extras["thumbnail"] = (200, 150, 85)
extras["thumbnail"] = (*THUMBNAIL_SIZE, 85)
logging.info("Starting microscope capture %s", output.file)
self.camera.capture(
output,