Autofocus verify based on sharpness range, removed repetitive logging
This commit is contained in:
parent
f1c315783c
commit
aed5a22983
2 changed files with 22 additions and 15 deletions
|
|
@ -238,15 +238,15 @@ class AutofocusThing(Thing):
|
||||||
return heights.tolist(), sizes.tolist()
|
return heights.tolist(), sizes.tolist()
|
||||||
|
|
||||||
@thing_action
|
@thing_action
|
||||||
def verify_focus_sharpness(self, sweep_sizes: list, camera: WrappedCamera, leniency: int = 1):
|
def verify_focus_sharpness(self, sweep_sizes: list, camera: WrappedCamera, threshold: float = 0.95):
|
||||||
'''Take the sharpness curve of the autofocus, and the size of the current frame
|
'''Take the sharpness curve of the autofocus, and the size of the current frame
|
||||||
to see if the autofocus completed successfully. Returns True if current sharpness
|
to see if the autofocus completed successfully. Returns True if current sharpness
|
||||||
is within "leniency" number of frames from the peak of the autofocus'''
|
is within "leniency" number of frames from the peak of the autofocus'''
|
||||||
|
|
||||||
current_sharpness = camera.grab_jpeg_size(stream_name='lores')
|
current_sharpness = camera.grab_jpeg_size(stream_name='lores')
|
||||||
|
|
||||||
peak = np.argmax(sweep_sizes)
|
peak = np.max(sweep_sizes)
|
||||||
accepted_range = [peak - leniency, peak + leniency]
|
base = np.min(sweep_sizes)
|
||||||
|
cutoff = threshold * (peak - base)
|
||||||
|
|
||||||
sharpness_range = [sweep_sizes[i] for i in accepted_range]
|
return current_sharpness >= base + cutoff
|
||||||
return current_sharpness >= min(sharpness_range)
|
|
||||||
|
|
@ -642,7 +642,7 @@ class SmartScanThing(Thing):
|
||||||
while True:
|
while True:
|
||||||
jpeg_zs, jpeg_sizes = autofocus.looping_autofocus(dz=self.autofocus_dz, start = 'base')
|
jpeg_zs, jpeg_sizes = autofocus.looping_autofocus(dz=self.autofocus_dz, start = 'base')
|
||||||
current_height = stage.position["z"]
|
current_height = stage.position["z"]
|
||||||
autofocus_success = autofocus.verify_focus_sharpness(sweep_sizes = jpeg_sizes, camera = CamDep, leniency = 1)
|
autofocus_success = autofocus.verify_focus_sharpness(sweep_sizes = jpeg_sizes, camera = CamDep, threshold = 0.92)
|
||||||
logger.info(f"We just tested the focus! Result was {autofocus_success}")
|
logger.info(f"We just tested the focus! Result was {autofocus_success}")
|
||||||
|
|
||||||
if autofocus_success:
|
if autofocus_success:
|
||||||
|
|
@ -655,7 +655,7 @@ class SmartScanThing(Thing):
|
||||||
nearest_focused_site[-1],
|
nearest_focused_site[-1],
|
||||||
loc[0:2],
|
loc[0:2],
|
||||||
current_height,
|
current_height,
|
||||||
0.3,
|
0.5,
|
||||||
)
|
)
|
||||||
|
|
||||||
# if there haven't been any previous autofocuses, we have to assume this one worked
|
# if there haven't been any previous autofocuses, we have to assume this one worked
|
||||||
|
|
@ -721,6 +721,7 @@ class SmartScanThing(Thing):
|
||||||
logger.info(f'Rejected moving to {i} as it is out of range')
|
logger.info(f'Rejected moving to {i} as it is out of range')
|
||||||
path = temp_path.copy()
|
path = temp_path.copy()
|
||||||
path = sorted(path, key=lambda x: (steps_from_centre(x, true_path[0][:2], dx, dy), distance_to_site(loc[:2], x)))
|
path = sorted(path, key=lambda x: (steps_from_centre(x, true_path[0][:2], dx, dy), distance_to_site(loc[:2], x)))
|
||||||
|
self.create_zip_of_scan(logger = logger, scan_name = scan_folder.split('scans/')[1], download_zip = False)
|
||||||
|
|
||||||
except InvocationCancelledError:
|
except InvocationCancelledError:
|
||||||
logger.error("Stopping scan because it was cancelled.")
|
logger.error("Stopping scan because it was cancelled.")
|
||||||
|
|
@ -1036,7 +1037,12 @@ class SmartScanThing(Thing):
|
||||||
)
|
)
|
||||||
if not os.path.isdir(images_folder):
|
if not os.path.isdir(images_folder):
|
||||||
raise FileNotFoundError(f"Tried to make a zip archive of {images_folder} but it does not exist.")
|
raise FileNotFoundError(f"Tried to make a zip archive of {images_folder} but it does not exist.")
|
||||||
logger.info("Creating zip archive of images (may take some time)...")
|
# logger.info("Creating zip archive of images (may take some time)...")
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
root_directory = Path(images_folder)
|
||||||
|
print(sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file()))
|
||||||
|
|
||||||
zip_fname = f'{os.path.join(scan_folder, "images")}.zip'
|
zip_fname = f'{os.path.join(scan_folder, "images")}.zip'
|
||||||
|
|
||||||
|
|
@ -1050,8 +1056,6 @@ class SmartScanThing(Thing):
|
||||||
# get a list of files in the existing zip
|
# get a list of files in the existing zip
|
||||||
current_zip = self.get_files_in_zip(zip_fname)
|
current_zip = self.get_files_in_zip(zip_fname)
|
||||||
|
|
||||||
logger.info(current_zip)
|
|
||||||
|
|
||||||
# get a list of files in the folder we're zipping
|
# get a list of files in the folder we're zipping
|
||||||
folder_path = self.scan_folder_path(scan_name)
|
folder_path = self.scan_folder_path(scan_name)
|
||||||
files = glob.glob(folder_path + '/**/*', recursive=True)
|
files = glob.glob(folder_path + '/**/*', recursive=True)
|
||||||
|
|
@ -1065,11 +1069,14 @@ class SmartScanThing(Thing):
|
||||||
with zipfile.ZipFile(zip_fname, mode="a") as zip:
|
with zipfile.ZipFile(zip_fname, mode="a") as zip:
|
||||||
for file in files:
|
for file in files:
|
||||||
if any(banned_name in file for banned_name in files_to_delay):
|
if any(banned_name in file for banned_name in files_to_delay):
|
||||||
logger.info(f'we only add {file} into zip at the end of the scan')
|
# logger.info(f'we only add {file} into zip at the end of the scan')
|
||||||
|
pass
|
||||||
elif file in current_zip:
|
elif file in current_zip:
|
||||||
logger.info(f'{file} is already in zip')
|
# logger.info(f'{file} is already in zip')
|
||||||
elif ".zip" in file:
|
pass
|
||||||
logger.info('Not adding the .zip to itself')
|
elif ".zip" in file or 'raw' in file:
|
||||||
|
# logger.info('Not adding the .zip to itself')
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
logger.info(f'appending {file} to zip')
|
logger.info(f'appending {file} to zip')
|
||||||
zip.write(os.path.join(folder_path, file), arcname=file)
|
zip.write(os.path.join(folder_path, file), arcname=file)
|
||||||
|
|
@ -1090,7 +1097,7 @@ class SmartScanThing(Thing):
|
||||||
if any(banned_name in file for banned_name in files_to_delay):
|
if any(banned_name in file for banned_name in files_to_delay):
|
||||||
logger.info(f'we are finally adding {file} into zip')
|
logger.info(f'we are finally adding {file} into zip')
|
||||||
zip.write(os.path.join(folder_path, file), arcname=file)
|
zip.write(os.path.join(folder_path, file), arcname=file)
|
||||||
|
logger.info('about to download zip')
|
||||||
return ZipBlob.from_file(zip_fname)
|
return ZipBlob.from_file(zip_fname)
|
||||||
|
|
||||||
@thing_action
|
@thing_action
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue