Commit graph

2579 commits

Author SHA1 Message Date
Richard Bowman
65f467af64 Fix "About" page 2023-11-02 21:17:31 +00:00
Richard Bowman
4e7fa44a73 Remove microscope settings
microscope name should be defined in config, by a
separate program/service
2023-11-02 20:34:42 +00:00
Richard Bowman
27b1f42935 Updated camera stage mapping settings 2023-11-02 20:32:15 +00:00
Richard Bowman
c5c02eb029 Linted 2023-11-02 20:30:54 +00:00
Richard Bowman
79752a2a4c Camera settings for labthings-picamera2
I've updated URLs and tidied things a bit, so that we can
now adjust the key camera settings with the new camera
drivers.
2023-11-02 16:54:22 +00:00
Richard Bowman
13229d9b99 Command to run the server interactively
It's sometimes helpful to run the server as openflexure-ws,
there's now a command in the readme that matches (for
now) the service definition.
2023-11-02 10:39:37 +00:00
Richard Bowman
4caba58d6c Revert to Sangaboard, rather than proscan 2023-11-01 18:02:16 +00:00
Richard Bowman
796622b802 Relax scipy version 2023-10-31 22:28:47 +00:00
Richard Bowman
b9804cdc2d Serve static web app at / 2023-09-06 11:56:20 +01:00
Richard Bowman
da711a7d8c linter fixes 2023-09-04 22:08:27 +01:00
Richard Bowman
799dc7f522 WIP: update webapp to use new backend
This is still very much WIP, but I now have fast
autofocus, stage moves, image streaming, and click-to-move.
2023-09-04 22:00:56 +01:00
Richard Bowman
e82acf2941 Add thing_state metadata 2023-09-04 11:43:32 +01:00
Richard Bowman
63d7a6eb4d WIP: camera stage mapping
This still has some bugs, mostly related to numpy and serialisation.
2023-08-31 19:37:09 +01:00
Richard Bowman
6e04618051 Autofocus module!
Currently only has fast_autofocus, and there
may be some work to do on timing, but it works :)

Getting timestamps from the camera rather than
time.time() would be ideal, but it would take some thought to tie that up with
the encoder.

I'm using a low-res stream, as it seems impossible to
turn the bitrate control of the MJPEG stream off,
at least within the picamera2 API.
2023-08-30 21:34:06 +01:00
Richard Bowman
081654533f First images on labthings-fastapi
We now have very basic camera and stage support.
2023-08-29 17:02:16 +01:00
Richard Bowman
ac45423739 Merge branch 'sangaboard-v4' into 'master'
Support latest sangaboard firmware

See merge request openflexure/openflexure-microscope-server!154
2023-04-12 07:23:15 +00:00
Richard Bowman
7abdbdde4a Add full list of server prerequisites
The server needs various packages installed on
the system. This list is lifted from the SD card
builder repository.
2023-04-06 21:27:51 +01:00
Richard Bowman
a95baee25f Fix lxml and update README
lxml requires an apt-installed package to work.
I've also mentioned in README that Pipfile
is now pi-specific.
2023-04-06 16:03:20 +01:00
Richard Bowman
d0aad6633c Redo CI to run on armv6
I've refactored the CI substantially, using the
new `extends` keyword to tidy it up a lot.
I have also changed from running the Python
tests on Python:3.7 to using a Raspberry Pi
OS from the Balena project.

This means we are now ONLY locking
dependencies for the Pi, and we are no longer
expecting the Pipfile to work on non-arm
systems.
2023-04-06 15:20:48 +01:00
Richard Bowman
fdafeca446 Only consider piwheels in Pipfile
Including both piwheels and pypi in Pipfile caused hash mismatches,
which caused installation to fail. I've removed pypi, but this may
break installation on other platforms.

I may need to duplicate Pipfile and Pipfile.lock, one for Pi and
one for non-Pi platforms.

I can confim this commit installed successfully on a Pi.
2023-04-03 22:03:57 +01:00
Richard Bowman
12fd9a5f4a Mention dependencies in readme 2023-04-03 20:38:57 +01:00
Richard Bowman
62eef8f8e1 Re-lock dependencies on a Raspberry Pi
I couldn't install this on a Pi, because it incorrectly chose
versions of e.g. numpy that did not exist in binary form for the
pi. I re-locked dependencies with:

`PIP_ONLY_BINARY=":all:" pipenv lock --dev`

This forced the use of wheels, and not only completed but did so
in ~10 minutes.
2023-04-03 20:32:52 +01:00
Richard Bowman
3f9c3447de Fixed typos in comments spotted in code review 2023-03-23 13:31:25 +00:00
Richard Bowman
d948d3f04d Merge branch 'Update-WoT-links' into 'sangaboard-v4'
Update swagger with links to WoT documentation

See merge request openflexure/openflexure-microscope-server!155
2023-03-22 10:37:47 +00:00
Richard Bowman
1f558bbeb7 OpenAPI Validation Fixes
OpenAPI validation seems to have become stricter about checking for None defaults
in parameters that don't allow None. I have
modified two things as a result:

1. StageTypeProperty (used to pick between SangaStage and SangaDeltaStage)
now defaults to SangaStage (which is the
original behaviour anyway)
2. It is now allowed to pass x,y,z=None when making a move - this is the same as
not passing the respective argument, so the
function already correctly handled this case.
2023-03-22 08:58:04 +00:00
Richard Bowman
4b73fd82f6 Format fix 2023-03-21 15:11:24 +00:00
Richard Bowman
824248583d Add !154 to changelog 2023-03-21 15:05:22 +00:00
Joe Knapper
f6691cbc11 Update openapi.py with live links to WoT documentation 2023-03-21 15:05:21 +00:00
Richard Bowman
8e50a90fb2 Explicitly mark arguments as optional
mypy now considers implicitly Optional arguments
to be errors - I have made them now explicitly
Optional, which passes.
2023-03-21 15:04:49 +00:00
Richard Bowman
ba62bdf867 Update pysangaboard to 0.3.3 2023-03-21 12:51:03 +00:00
Richard Bowman
f2f00b0d11 Update w3c schema to 2020 format
The `thing-context` definition used a 2019 draft of how to specify a
tuple (where `items` set the mandatory items and `additionalItems`
set the rest).  These have been renamed to `prefixItems` and `items`
respectively, and I have applied this change.  Schema now validates
again :)
2022-08-09 13:33:10 +01:00
Richard Bowman
80d026d778 Downgrade markupsafe so jinja2 still works 2022-08-09 13:18:07 +01:00
Richard Bowman
106b50d333 Format fixes from black 2022-08-09 13:17:45 +01:00
Richard Bowman
9dbb083ee7 More Marshmallow argument updates 2022-08-09 13:16:10 +01:00
Richard Bowman
e22f36b308 Start explicit metadata argument for marshmallow
A side effect of re-locking dependencies is having a newer marshmallow.
This deprecates having `description=` as a keyword, and puts it in a
separate metadata arg instead.

This commit is the start of my search-and-replaceing to update to the new
format.
2022-08-09 12:52:57 +01:00
Richard Bowman
78ef9c531b Format fixes from black 2022-08-09 09:37:03 +01:00
Richard Bowman
5404521458 Use different names for unused variables
mypy flagged too many assignments to `_` which this commit fixes.
2022-08-09 09:36:25 +01:00
Richard Bowman
a9fff24848 Explicitly specify encoding
The update to pylint means we were failing because open()
doesn't specify the encoding everywhere.  I have now specified utf-8
everywhere.  This was patchy before, and is default behaviour on the
Pi.  There's a slim chance it will cause some issues on Windows, but
that shouldn't affect anyone outside the developers.

I've also ignored a couple of new spurious warnings, and explicitly
ignored some unused variables.
2022-08-09 07:16:44 +01:00
Richard Bowman
9b7fba55b6 Update CI script to new syntax 2022-08-08 22:22:55 +01:00
Richard Bowman
3aa2721d28 Update changelog (version is already 2.11.0) 2022-08-08 22:19:30 +01:00
Richard Bowman
d98cc3ff34 Update sangaboard dependency and re-lock
Dependencies could use some revision - in particular could we use
Flask 2?  That's a LabThings issue really...

I have updated a few dependencies (mostly dev ones), as ever Black is
an issue - have reverted to the previous pinned prerelease because the
full release is incompatible with flask 2.
2022-08-08 22:08:20 +01:00
Richard Bowman
ed6e22d020 Bump version and add sangaboard v4 dependency 2022-08-04 17:08:34 +01:00
Richard Bowman
3d164936cb Merge branch 'background-detection-for-scans' into 'master'
Background detect and better focus handling in tiled scans

See merge request openflexure/openflexure-microscope-server!153
2022-05-05 16:12:49 +00:00
Richard Bowman
e356d11e7e Linter/type checking fixes 2022-04-20 13:31:33 +01:00
Richard Bowman
18145d4b67 Refactored new (and some old) code to tidy up scan function
I have:
* Moved the autofocus and focus-prediction code into a
new `FocusManager` class.  This hopefully keeps the logic relating to
axial motion in one place.
* Moved set-up code relating to autofocus and background detection
into separate functions.
* Changed the scan path from a ragged list-of-lists to a one dimensional
list.  I've left the old 2D function and added a new 1D function that
calls it and coverts, so it's not a breaking change.

The actual sequence of moves executed, and the accompanying logic, is
unchanged from the previous commit.  I've tested this a couple of times,
on my microscope with actual hardware.
I don't think it's necessary to test more widely as this is only a
refactoring change, not an algorithm change.

The shift from 2D to 1D scan path was one I initially decided against,
because I was trying to keep the new code as small as possible, and
avoid refactoring what's already there.  Since I'm doing that anyway,
I have taken the opportunity to eliminate the concept of scan
"lines".

The old behaviour was to always use the position of the last point
as the starting point for the next autofocus.  There was an exception
to this for raster scans, where the big jump used the first point
of the last line instead.  The new behaviour always uses the closest
point, which reproduces this behaviour without the need for a hard
coded exception.

If the "fast" scan axis (y) has a longer step size than the "slow"
scan axis (x), we may base the autofocus off the previous row, rather
than the previous point in the current row.  I don't see that this
should be any less reliable than the current behaviour, and is
arguably better.  It's also unlikely to be noticed, because our
default scan settings have longer spacing in X.  I think the
reduced complexity of the code is definitely worth the small
chance of changing some edge-case behaviour.
2022-04-20 13:14:23 +01:00
Richard Bowman
7f66235cac Lint and type fixes 2022-04-06 23:36:55 +01:00
Richard Bowman
cfb1bb09a6 Added scan control for background detect
There is now a button that appears when the background-detect
extension is installed, allowing you to skip autofocus if the
field looks like background.
2022-04-06 23:17:10 +01:00
Richard Bowman
333b52aa9b background detect and better focus handling
The primary change here is that there's now an option
to skip autofocus if the background detect plugin says
the current image is background.

I have also overhauled the way it picks the next Z position
based on Joe's code; instead of just using the last point, it will
pick the closest point where we have a successful autofocus
recorded.  This will usually be the last point, except for raster
scans where it neatly reproduces the behaviour of the old code
but without needing to treat it as a special case (when we jump
back to the start of a line, it will use the z position of the start
of the previous line, rather than the end of the previous line).

This does represent a minor change to previous behaviour, but
it should not break anything that isn't already broken, i.e. it might
cause slightly odd behaviour if autofocus gives random results -
but probably indistinguishable from the current behaviour.
2022-04-06 23:15:25 +01:00
Julian Stirling
fe3af0fd29 Merge branch 'version-bump-and-changelog' into 'master'
Version bump and changelog

See merge request openflexure/openflexure-microscope-server!152
2022-01-17 12:23:52 +00:00
Richard Bowman
ecc861a06e Merge branch 'glyg-master-patch-10249' into 'master'
Fix small typo, fixes #243

Closes #243

See merge request openflexure/openflexure-microscope-server!148
2022-01-17 11:45:34 +00:00