Merge branch 'resolution-fix' into 'master'
Default resolution fix See merge request openflexure/openflexure-microscope-server!18
This commit is contained in:
commit
805c17b509
7 changed files with 24 additions and 17 deletions
|
|
@ -11,13 +11,13 @@ Microscope RC file
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Microscope configuration is made persistent via a microscope runtime-config (RC) file. By default, this
|
Microscope configuration is made persistent via a microscope runtime-config (RC) file. By default, this
|
||||||
file exists at ``~/.openflexure/microscoperc.yaml``, and contains basic parameters to set up the microscope.
|
file exists at ``~/.openflexure/microscope_settings.yaml``, and contains basic parameters to set up the microscope.
|
||||||
|
|
||||||
Additionally, by default, configurations for specific pieces of hardware (i.e. the Pi camera) are located
|
Additionally, by default, configurations for specific pieces of hardware (i.e. the Pi camera) are located
|
||||||
in separate "auxillary" config files, and are linked together by adding the config file's path to your main
|
in separate "auxillary" config files, and are linked together by adding the config file's path to your main
|
||||||
microscope RC file. This is set up by default, as shown below:
|
microscope RC file. This is set up by default, as shown below:
|
||||||
|
|
||||||
Default microscoperc.yaml
|
Default microscope_settings.yaml
|
||||||
+++++++++++++++++++++++++
|
+++++++++++++++++++++++++
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@ Generally, for adding anything other than very simple functionality, plugins sho
|
||||||
|
|
||||||
The main restriction is that the plugin package must be importable using an absolute import from within the Python environment being used to load your microscope.
|
The main restriction is that the plugin package must be importable using an absolute import from within the Python environment being used to load your microscope.
|
||||||
|
|
||||||
Loading plugins with microscoperc.yaml
|
Loading plugins with microscope_settings.yaml
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
Both types of plugin are loaded by specifying the plugin class in your :ref:`MicroscopeRC`. In the case of a single-file plugin, specify the path to the plugin file, followed by the name of your :py:class:`openflexure_microscope.plugins.MicroscopePlugin` child class, separated by a colon. For packaged plugins, specify the absolute module name in place of the path.
|
Both types of plugin are loaded by specifying the plugin class in your :ref:`MicroscopeRC`. In the case of a single-file plugin, specify the path to the plugin file, followed by the name of your :py:class:`openflexure_microscope.plugins.MicroscopePlugin` child class, separated by a colon. For packaged plugins, specify the absolute module name in place of the path.
|
||||||
|
|
||||||
For example, the plugins section of your microscoperc.yaml file may look like:
|
For example, the plugins section of your microscope_settings.yaml file may look like:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import sys, os
|
||||||
is_gunicorn = "gunicorn" in os.environ.get("SERVER_SOFTWARE", "")
|
is_gunicorn = "gunicorn" in os.environ.get("SERVER_SOFTWARE", "")
|
||||||
|
|
||||||
DEFAULT_LOGFILE = os.path.join(USER_CONFIG_DIR, 'openflexure_microscope.log')
|
DEFAULT_LOGFILE = os.path.join(USER_CONFIG_DIR, 'openflexure_microscope.log')
|
||||||
print(DEFAULT_LOGFILE)
|
|
||||||
|
|
||||||
if (__name__ == "__main__") or (not is_gunicorn):
|
if (__name__ == "__main__") or (not is_gunicorn):
|
||||||
# If imported, but not by gunicorn
|
# If imported, but not by gunicorn
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ from .set_picamera_gain import set_analog_gain, set_digital_gain
|
||||||
|
|
||||||
# Handle config and picamera settings
|
# Handle config and picamera settings
|
||||||
CONFIG_KEYS = {
|
CONFIG_KEYS = {
|
||||||
'video_resolution': (832, 624),
|
'video_resolution': (1640, 1232),
|
||||||
'image_resolution': (2592, 1944),
|
'image_resolution': (2592, 1944), # Default for PiCamera v1. Overridden in __init__
|
||||||
'numpy_resolution': (1312, 976),
|
'numpy_resolution': (1312, 976),
|
||||||
'jpeg_quality': 75,
|
'jpeg_quality': 75,
|
||||||
'picamera_settings': {
|
'picamera_settings': {
|
||||||
|
|
@ -86,6 +86,11 @@ class StreamingCamera(BaseCamera):
|
||||||
# Populate config and settings with all available keys
|
# Populate config and settings with all available keys
|
||||||
self.config.update(CONFIG_KEYS)
|
self.config.update(CONFIG_KEYS)
|
||||||
|
|
||||||
|
# Update config based on PiCamera parameters
|
||||||
|
self.config.update({
|
||||||
|
'image_resolution': tuple(self.camera.MAX_RESOLUTION)
|
||||||
|
})
|
||||||
|
|
||||||
# Load config dictionary if passed
|
# Load config dictionary if passed
|
||||||
if config:
|
if config:
|
||||||
self.apply_config(config)
|
self.apply_config(config)
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,24 @@ from collections import abc
|
||||||
# HANDLE THE DEFAULT CONFIGURATION FILE
|
# HANDLE THE DEFAULT CONFIGURATION FILE
|
||||||
|
|
||||||
HERE = os.path.abspath(os.path.dirname(__file__))
|
HERE = os.path.abspath(os.path.dirname(__file__))
|
||||||
DEFAULT_CONFIG_PATH = os.path.join(HERE, 'microscoperc.default.yaml')
|
DEFAULT_CONFIG_PATH = os.path.join(HERE, 'microscope_settings.default.yaml')
|
||||||
|
|
||||||
USER_CONFIG_DIR = os.path.join(os.path.expanduser("~"), ".openflexure") #: str: Default path of the user-config directory, containing runtime-config and calibration files. Obtained from ``os.path.join(os.path.expanduser("~"), ".openflexure")``.
|
USER_CONFIG_DIR = os.path.join(os.path.expanduser("~"), ".openflexure") #: str: Default path of the user-config directory, containing runtime-config and calibration files. Obtained from ``os.path.join(os.path.expanduser("~"), ".openflexure")``.
|
||||||
USER_CONFIG_FILE = os.path.join(USER_CONFIG_DIR, "microscoperc.yaml") #: str: Default path of the user microscoperc.yaml runtime-config file. Obtained from ``os.path.join(USER_CONFIG_DIR, "microscoperc.yaml")``
|
USER_CONFIG_FILE = os.path.join(USER_CONFIG_DIR, "microscope_settings.yaml") #: str: Default path of the user microscope_settings.yaml runtime-config file. Obtained from ``os.path.join(USER_CONFIG_DIR, "microscope_settings.yaml")``
|
||||||
|
|
||||||
|
USER_CONFIG_FILE_OLD = os.path.join(USER_CONFIG_DIR, "microscoperc.yaml")
|
||||||
|
|
||||||
|
# Load the default config
|
||||||
with open(DEFAULT_CONFIG_PATH, 'r') as default_rc:
|
with open(DEFAULT_CONFIG_PATH, 'r') as default_rc:
|
||||||
DEFAULT_CONFIG = default_rc.read()
|
DEFAULT_CONFIG = default_rc.read()
|
||||||
|
|
||||||
# HANDLE CUSTOM YAML PARSING
|
# Run a one-time conversion of the old microscoperc.yaml into the new microscope_settings.yaml
|
||||||
|
# TODO: Should be removed in >1.0.1?
|
||||||
|
if (not os.path.isfile(USER_CONFIG_FILE)) and (os.path.isfile(USER_CONFIG_FILE_OLD)):
|
||||||
|
os.rename(USER_CONFIG_FILE_OLD, USER_CONFIG_FILE)
|
||||||
|
|
||||||
|
|
||||||
|
# HANDLE CUSTOM YAML PARSING
|
||||||
def construct_yaml_bool(self, node):
|
def construct_yaml_bool(self, node):
|
||||||
"""
|
"""
|
||||||
Override PyYAML constructors handling of bools.
|
Override PyYAML constructors handling of bools.
|
||||||
|
|
@ -162,8 +170,8 @@ def initialise_file(config_path, populate: str = ""):
|
||||||
with open(config_path, 'w') as outfile:
|
with open(config_path, 'w') as outfile:
|
||||||
outfile.write(populate)
|
outfile.write(populate)
|
||||||
|
|
||||||
# MAIN CONFIG CLASS
|
|
||||||
|
|
||||||
|
# MAIN CONFIG CLASS
|
||||||
class OpenflexureConfig:
|
class OpenflexureConfig:
|
||||||
"""
|
"""
|
||||||
An object to handle expansion, conversion, and saving of the microscope configuration.
|
An object to handle expansion, conversion, and saving of the microscope configuration.
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ class Microscope(object):
|
||||||
if 'plugins' in self.rc.config:
|
if 'plugins' in self.rc.config:
|
||||||
self.attach_plugin_maps(self.rc.config['plugins'])
|
self.attach_plugin_maps(self.rc.config['plugins'])
|
||||||
else:
|
else:
|
||||||
logging.warning("No plugins specified in microscoperc.yaml. Skipping.")
|
logging.warning("No plugins specified in microscope_settings.yaml. Skipping.")
|
||||||
|
|
||||||
def reload_plugins(self):
|
def reload_plugins(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
# Resolutions for streaming and capture
|
|
||||||
video_resolution: [832, 624]
|
|
||||||
image_resolution: [2592, 1944]
|
|
||||||
numpy_resolution: [1312, 976]
|
|
||||||
|
|
||||||
# Field of view, in stage steps
|
# Field of view, in stage steps
|
||||||
fov: [4100, 3146]
|
fov: [4100, 3146]
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue