This adds a plugin with a single endpoint, "recalibrate". The recalibrate methods are deliberately simple and not aware of the StreamingCamera because I want to share the maximum amount of code with non-microscope projects that also want to flatten the lens shading. The plugin is microscope-specific, and therefore handles shutting down the stream and managing the resolution of the camera, to allow the calibration to run without restarting the microscope server. Currently it **DOES NOT SAVE SETTINGS**. TODO: save the settings after recalibration. Arguably this isn't a job for this plugin, what we would need is: * A method to sync the StreamingCamera's settings with the underlying PiCamera object * A method to save the StreamingCamera's settings to disk. I think it would be neatest to provide the first of these as a method of the StreamingCamera class, and call it from the plugin. Saving the settings to disk (e.g. to the microscope rc file, or to somewhere else) should be a separate endpoint (although most interfaces will probably call it immediately after recalibration). |
||
|---|---|---|
| docs | ||
| openflexure_microscope | ||
| tests | ||
| utilities | ||
| .gitignore | ||
| poetry.lock | ||
| pyproject.toml | ||
| README.md | ||
| readthedocs.yaml | ||
OpenFlexure Microscope Software
Installation
- (Recommended) create a virtual environment
- Create a virtual environment with
python3 -m venv env(or your favourite virtual environment system) - Activate with
source env/bin/activate
- Create a virtual environment with
- Install non-python dependencies with
sudo apt-get install libatlas-base-dev libjasper-dev libjpeg-dev - Install module by running
pip install openflexure-microscope==1.0.0b5
Usage
Running the web API in Gunicorn (port 5000)
- Ensure Gunicorn is installed to the current environment (
pip install gunicorn) - Run
gunicorn --threads 5 --workers 1 --bind 0.0.0.0:5000 openflexure_microscope.api.app:app
REST(ish) API
The Flask app serves a (reasonably) RESTful web API. For most user-facing functionality, this is the preferred interface. API documentation, with example requests, is available here.
Developer notes
Build-system
As of 1.0.0b0, we're using Poetry to manage dependencies, build, and distribute the package. All package information and dependencies are found in pyproject.toml, in line with PEP 518. If you're developing this package, make use of poetry.lock to ensure you're using the latest locked dependency list.
Microscope plugins
The Microscope module, and Flask app, both support plugins for extending lower-level functionality not well suited to web API calls. This plugin system is still in fairly early development, and is not yet properly documented. The current documentation can be found here.
Running tests through the PTVSD remote debugger (port 3000)
- From the openflexure-microscope-software directory, run
python3 -m ptvsd --host 0.0.0.0 --port 3000 --wait tests/test_camera.py
Credits
Video streaming
Based on supporting code for the article video streaming with Flask and its follow-up Flask Video Streaming Revisited.