raspberrypi: various fast network camera improvements

This commit is contained in:
Calin Crisan 2016-10-03 21:05:21 +03:00
parent 824361cf1d
commit ffbc49a5d6
4 changed files with 562 additions and 82 deletions

View File

@ -72,7 +72,7 @@ DRC_CHOICES = [
('off', 'Off'), ('off', 'Off'),
('low', 'Low'), ('low', 'Low'),
('medium', 'Medium'), ('medium', 'Medium'),
('hight', 'High') ('high', 'High')
] ]
IMXFX_CHOICES = [ IMXFX_CHOICES = [
@ -288,6 +288,7 @@ def _set_motioneye_add_remove_cameras(enabled):
def _get_raspimjpeg_settings(camera_id): def _get_raspimjpeg_settings(camera_id):
s = { s = {
'preview': False,
'brightness': 50, 'brightness': 50,
'contrast': 0, 'contrast': 0,
'saturation': 0, 'saturation': 0,
@ -300,6 +301,7 @@ def _get_raspimjpeg_settings(camera_id):
'metering': 'average', 'metering': 'average',
'drc': 'off', 'drc': 'off',
'vstab': False, 'vstab': False,
'denoise': False,
'imxfx': 'none', 'imxfx': 'none',
'width': 640, 'width': 640,
'height': 480, 'height': 480,
@ -307,7 +309,11 @@ def _get_raspimjpeg_settings(camera_id):
'vflip': False, 'vflip': False,
'hflip': False, 'hflip': False,
'framerate': 15, 'framerate': 15,
'quality': 25 'quality': 25,
'zoomx': 0,
'zoomy': 0,
'zoomw': 100,
'zoomh': 100
} }
if os.path.exists(RASPIMJPEG_CONF): if os.path.exists(RASPIMJPEG_CONF):
@ -338,6 +344,19 @@ def _get_raspimjpeg_settings(camera_id):
elif value == 'true': elif value == 'true':
value = True value = True
if name == 'zoom':
try:
parts = value.split(',')
s['zoomx'] = int(float(parts[0]) * 100)
s['zoomy'] = int(float(parts[1]) * 100)
s['zoomw'] = int(float(parts[2]) * 100)
s['zoomh'] = int(float(parts[3]) * 100)
except:
logging.error('failed to parse zoom setting "%s"' % value)
continue
s[name] = value s[name] = value
@ -357,6 +376,10 @@ def _set_raspimjpeg_settings(camera_id, s):
s['width'] = int(s['resolution'].split('x')[0]) s['width'] = int(s['resolution'].split('x')[0])
s['height'] = int(s.pop('resolution').split('x')[1]) s['height'] = int(s.pop('resolution').split('x')[1])
s['zoom'] = '%.2f,%.2f,%.2f,%.2f' % (
s.pop('zoomx') / 100.0, s.pop('zoomy') / 100.0,
s.pop('zoomw') / 100.0, s.pop('zoomh') / 100.0)
s['contrast'] = s['contrast'] * 2 - 100 s['contrast'] = s['contrast'] * 2 - 100
s['saturation'] = s['saturation'] * 2 - 100 s['saturation'] = s['saturation'] * 2 - 100
@ -759,6 +782,124 @@ def seQuality():
} }
@additional_config
def seZoomx():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom X',
'description': 'sets the horizontal zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomy():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Y',
'description': 'sets the vertical zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomw():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Width',
'description': 'sets the zoom width',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomh():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Height',
'description': 'sets the zoom height',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def sePreview():
if not _get_streameye_enabled():
return None
return {
'label': 'HDMI Preview',
'description': 'enable this if you want to see the preview on an HDMI-connected monitor',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def streamEyeCameraSeparator3(): def streamEyeCameraSeparator3():
return { return {
@ -794,31 +935,6 @@ def seIso():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'EV Compensation',
'description': 'sets a desired EV compensation level for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seShutter(): def seShutter():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -871,6 +987,31 @@ def seExposure():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'Exposure Compensation',
'description': 'sets a desired exposure compensation for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seAwb(): def seAwb():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -950,6 +1091,25 @@ def seVstab():
} }
@additional_config
def seDenoise():
if not _get_streameye_enabled():
return None
return {
'label': 'Denoise',
'description': 'enables image denoising',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seImxfx(): def seImxfx():
if not _get_streameye_enabled(): if not _get_streameye_enabled():

View File

@ -72,7 +72,7 @@ DRC_CHOICES = [
('off', 'Off'), ('off', 'Off'),
('low', 'Low'), ('low', 'Low'),
('medium', 'Medium'), ('medium', 'Medium'),
('hight', 'High') ('high', 'High')
] ]
IMXFX_CHOICES = [ IMXFX_CHOICES = [
@ -288,6 +288,7 @@ def _set_motioneye_add_remove_cameras(enabled):
def _get_raspimjpeg_settings(camera_id): def _get_raspimjpeg_settings(camera_id):
s = { s = {
'preview': False,
'brightness': 50, 'brightness': 50,
'contrast': 0, 'contrast': 0,
'saturation': 0, 'saturation': 0,
@ -300,6 +301,7 @@ def _get_raspimjpeg_settings(camera_id):
'metering': 'average', 'metering': 'average',
'drc': 'off', 'drc': 'off',
'vstab': False, 'vstab': False,
'denoise': False,
'imxfx': 'none', 'imxfx': 'none',
'width': 640, 'width': 640,
'height': 480, 'height': 480,
@ -307,7 +309,11 @@ def _get_raspimjpeg_settings(camera_id):
'vflip': False, 'vflip': False,
'hflip': False, 'hflip': False,
'framerate': 15, 'framerate': 15,
'quality': 25 'quality': 25,
'zoomx': 0,
'zoomy': 0,
'zoomw': 100,
'zoomh': 100
} }
if os.path.exists(RASPIMJPEG_CONF): if os.path.exists(RASPIMJPEG_CONF):
@ -338,6 +344,19 @@ def _get_raspimjpeg_settings(camera_id):
elif value == 'true': elif value == 'true':
value = True value = True
if name == 'zoom':
try:
parts = value.split(',')
s['zoomx'] = int(float(parts[0]) * 100)
s['zoomy'] = int(float(parts[1]) * 100)
s['zoomw'] = int(float(parts[2]) * 100)
s['zoomh'] = int(float(parts[3]) * 100)
except:
logging.error('failed to parse zoom setting "%s"' % value)
continue
s[name] = value s[name] = value
@ -357,6 +376,10 @@ def _set_raspimjpeg_settings(camera_id, s):
s['width'] = int(s['resolution'].split('x')[0]) s['width'] = int(s['resolution'].split('x')[0])
s['height'] = int(s.pop('resolution').split('x')[1]) s['height'] = int(s.pop('resolution').split('x')[1])
s['zoom'] = '%.2f,%.2f,%.2f,%.2f' % (
s.pop('zoomx') / 100.0, s.pop('zoomy') / 100.0,
s.pop('zoomw') / 100.0, s.pop('zoomh') / 100.0)
s['contrast'] = s['contrast'] * 2 - 100 s['contrast'] = s['contrast'] * 2 - 100
s['saturation'] = s['saturation'] * 2 - 100 s['saturation'] = s['saturation'] * 2 - 100
@ -759,6 +782,124 @@ def seQuality():
} }
@additional_config
def seZoomx():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom X',
'description': 'sets the horizontal zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomy():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Y',
'description': 'sets the vertical zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomw():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Width',
'description': 'sets the zoom width',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomh():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Height',
'description': 'sets the zoom height',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def sePreview():
if not _get_streameye_enabled():
return None
return {
'label': 'HDMI Preview',
'description': 'enable this if you want to see the preview on an HDMI-connected monitor',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def streamEyeCameraSeparator3(): def streamEyeCameraSeparator3():
return { return {
@ -794,31 +935,6 @@ def seIso():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'EV Compensation',
'description': 'sets a desired EV compensation level for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seShutter(): def seShutter():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -871,6 +987,31 @@ def seExposure():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'Exposure Compensation',
'description': 'sets a desired exposure compensation for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seAwb(): def seAwb():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -950,6 +1091,25 @@ def seVstab():
} }
@additional_config
def seDenoise():
if not _get_streameye_enabled():
return None
return {
'label': 'Denoise',
'description': 'enables image denoising',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seImxfx(): def seImxfx():
if not _get_streameye_enabled(): if not _get_streameye_enabled():

View File

@ -72,7 +72,7 @@ DRC_CHOICES = [
('off', 'Off'), ('off', 'Off'),
('low', 'Low'), ('low', 'Low'),
('medium', 'Medium'), ('medium', 'Medium'),
('hight', 'High') ('high', 'High')
] ]
IMXFX_CHOICES = [ IMXFX_CHOICES = [
@ -288,6 +288,7 @@ def _set_motioneye_add_remove_cameras(enabled):
def _get_raspimjpeg_settings(camera_id): def _get_raspimjpeg_settings(camera_id):
s = { s = {
'preview': False,
'brightness': 50, 'brightness': 50,
'contrast': 0, 'contrast': 0,
'saturation': 0, 'saturation': 0,
@ -300,6 +301,7 @@ def _get_raspimjpeg_settings(camera_id):
'metering': 'average', 'metering': 'average',
'drc': 'off', 'drc': 'off',
'vstab': False, 'vstab': False,
'denoise': False,
'imxfx': 'none', 'imxfx': 'none',
'width': 640, 'width': 640,
'height': 480, 'height': 480,
@ -307,7 +309,11 @@ def _get_raspimjpeg_settings(camera_id):
'vflip': False, 'vflip': False,
'hflip': False, 'hflip': False,
'framerate': 15, 'framerate': 15,
'quality': 25 'quality': 25,
'zoomx': 0,
'zoomy': 0,
'zoomw': 100,
'zoomh': 100
} }
if os.path.exists(RASPIMJPEG_CONF): if os.path.exists(RASPIMJPEG_CONF):
@ -338,6 +344,19 @@ def _get_raspimjpeg_settings(camera_id):
elif value == 'true': elif value == 'true':
value = True value = True
if name == 'zoom':
try:
parts = value.split(',')
s['zoomx'] = int(float(parts[0]) * 100)
s['zoomy'] = int(float(parts[1]) * 100)
s['zoomw'] = int(float(parts[2]) * 100)
s['zoomh'] = int(float(parts[3]) * 100)
except:
logging.error('failed to parse zoom setting "%s"' % value)
continue
s[name] = value s[name] = value
@ -357,6 +376,10 @@ def _set_raspimjpeg_settings(camera_id, s):
s['width'] = int(s['resolution'].split('x')[0]) s['width'] = int(s['resolution'].split('x')[0])
s['height'] = int(s.pop('resolution').split('x')[1]) s['height'] = int(s.pop('resolution').split('x')[1])
s['zoom'] = '%.2f,%.2f,%.2f,%.2f' % (
s.pop('zoomx') / 100.0, s.pop('zoomy') / 100.0,
s.pop('zoomw') / 100.0, s.pop('zoomh') / 100.0)
s['contrast'] = s['contrast'] * 2 - 100 s['contrast'] = s['contrast'] * 2 - 100
s['saturation'] = s['saturation'] * 2 - 100 s['saturation'] = s['saturation'] * 2 - 100
@ -759,6 +782,124 @@ def seQuality():
} }
@additional_config
def seZoomx():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom X',
'description': 'sets the horizontal zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomy():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Y',
'description': 'sets the vertical zoom offset',
'type': 'range',
'min': 0,
'max': 80,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomw():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Width',
'description': 'sets the zoom width',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def seZoomh():
if not _get_streameye_enabled():
return None
return {
'label': 'Zoom Height',
'description': 'sets the zoom height',
'type': 'range',
'min': 20,
'max': 100,
'snap': 2,
'ticksnum': 5,
'decimals': 0,
'unit': '%',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config
def sePreview():
if not _get_streameye_enabled():
return None
return {
'label': 'HDMI Preview',
'description': 'enable this if you want to see the preview on an HDMI-connected monitor',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def streamEyeCameraSeparator3(): def streamEyeCameraSeparator3():
return { return {
@ -794,31 +935,6 @@ def seIso():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'EV Compensation',
'description': 'sets a desired EV compensation level for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seShutter(): def seShutter():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -871,6 +987,31 @@ def seExposure():
} }
@additional_config
def seEv():
if not _get_streameye_enabled():
return None
return {
'label': 'Exposure Compensation',
'description': 'sets a desired exposure compensation for this camera',
'type': 'range',
'min': -25,
'max': 25,
'snap': 1,
'ticksnum': 11,
'decimals': 0,
'unit': '',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seAwb(): def seAwb():
if not _get_streameye_enabled(): if not _get_streameye_enabled():
@ -950,6 +1091,25 @@ def seVstab():
} }
@additional_config
def seDenoise():
if not _get_streameye_enabled():
return None
return {
'label': 'Denoise',
'description': 'enables image denoising',
'type': 'bool',
'section': 'device',
'advanced': True,
'camera': True,
'required': True,
'get': _get_raspimjpeg_settings,
'set': _set_raspimjpeg_settings,
'get_set_dict': True
}
@additional_config @additional_config
def seImxfx(): def seImxfx():
if not _get_streameye_enabled(): if not _get_streameye_enabled():

View File

@ -4,7 +4,7 @@
# #
################################################################################ ################################################################################
STREAMEYE_VERSION = 121126d99531bc4a4ddecd9e90721eb44f065d93 STREAMEYE_VERSION = ffd6f28a094f70c70893f6e516610459faa15ea2
STREAMEYE_SITE = $(call github,ccrisan,streameye,$(STREAMEYE_VERSION)) STREAMEYE_SITE = $(call github,ccrisan,streameye,$(STREAMEYE_VERSION))
STREAMEYE_LICENSE = GPLv3 STREAMEYE_LICENSE = GPLv3