Merge pull request #23 from themoosman/add-setters
Add Image Settings (basic and advanced)
This commit is contained in:
@@ -62,7 +62,7 @@ GET:
|
|||||||
|
|
||||||
SET:
|
SET:
|
||||||
- [X] Display -> OSD
|
- [X] Display -> OSD
|
||||||
- [ ] Recording -> Encode (Clear and Fluent Stream)
|
- [X] Recording -> Encode (Clear and Fluent Stream)
|
||||||
- [ ] Recording -> Advance (Scheduling)
|
- [ ] Recording -> Advance (Scheduling)
|
||||||
- [X] Network -> General
|
- [X] Network -> General
|
||||||
- [X] Network -> Advanced
|
- [X] Network -> Advanced
|
||||||
@@ -83,5 +83,5 @@ SET:
|
|||||||
- [x] PTZ
|
- [x] PTZ
|
||||||
- [x] Zoom
|
- [x] Zoom
|
||||||
- [x] Focus
|
- [x] Focus
|
||||||
- [ ] Image (Brightness, Contrast, Saturation, Hue, Sharp, Mirror, Rotate)
|
- [X] Image (Brightness, Contrast, Saturation, Hue, Sharp, Mirror, Rotate)
|
||||||
- [ ] Advanced Image (Anti-flicker, Exposure, White Balance, DayNight, Backlight, LED light, 3D-NR)
|
- [X] Advanced Image (Anti-flicker, Exposure, White Balance, DayNight, Backlight, LED light, 3D-NR)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from .system import SystemAPIMixin
|
|||||||
from .user import UserAPIMixin
|
from .user import UserAPIMixin
|
||||||
from .ptz import PtzAPIMixin
|
from .ptz import PtzAPIMixin
|
||||||
from .alarm import AlarmAPIMixin
|
from .alarm import AlarmAPIMixin
|
||||||
|
from .image import ImageAPIMixin
|
||||||
from resthandle import Request
|
from resthandle import Request
|
||||||
|
|
||||||
|
|
||||||
@@ -18,7 +19,8 @@ class APIHandler(SystemAPIMixin,
|
|||||||
RecordingAPIMixin,
|
RecordingAPIMixin,
|
||||||
ZoomAPIMixin,
|
ZoomAPIMixin,
|
||||||
PtzAPIMixin,
|
PtzAPIMixin,
|
||||||
AlarmAPIMixin):
|
AlarmAPIMixin,
|
||||||
|
ImageAPIMixin):
|
||||||
"""
|
"""
|
||||||
The APIHandler class is the backend part of the API, the actual API calls
|
The APIHandler class is the backend part of the API, the actual API calls
|
||||||
are implemented in Mixins.
|
are implemented in Mixins.
|
||||||
@@ -80,8 +82,8 @@ class APIHandler(SystemAPIMixin,
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
data = [{"cmd": "Logout", "action": 0}]
|
data = [{"cmd": "Logout", "action": 0}]
|
||||||
ret = self._execute_command('Logout', data)
|
self._execute_command('Logout', data)
|
||||||
print(ret)
|
# print(ret)
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Error Logout\n", e)
|
print("Error Logout\n", e)
|
||||||
|
|||||||
101
api/image.py
Normal file
101
api/image.py
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
|
||||||
|
class ImageAPIMixin:
|
||||||
|
"""API calls for image settings."""
|
||||||
|
|
||||||
|
def set_adv_image_settings(self,
|
||||||
|
anti_flicker='Outdoor',
|
||||||
|
exposure='Auto',
|
||||||
|
gain_min=1,
|
||||||
|
gain_max=62,
|
||||||
|
shutter_min=1,
|
||||||
|
shutter_max=125,
|
||||||
|
blue_gain=128,
|
||||||
|
red_gain=128,
|
||||||
|
white_balance='Auto',
|
||||||
|
day_night='Auto',
|
||||||
|
back_light='DynamicRangeControl',
|
||||||
|
blc=128,
|
||||||
|
drc=128,
|
||||||
|
rotation=0,
|
||||||
|
mirroring=0,
|
||||||
|
nr3d=1) -> object:
|
||||||
|
"""
|
||||||
|
Sets the advanced camera settings.
|
||||||
|
|
||||||
|
:param anti_flicker: string
|
||||||
|
:param exposure: string
|
||||||
|
:param gain_min: int
|
||||||
|
:param gain_max: string
|
||||||
|
:param shutter_min: int
|
||||||
|
:param shutter_max: int
|
||||||
|
:param blue_gain: int
|
||||||
|
:param red_gain: int
|
||||||
|
:param white_balance: string
|
||||||
|
:param day_night: string
|
||||||
|
:param back_light: string
|
||||||
|
:param blc: int
|
||||||
|
:param drc: int
|
||||||
|
:param rotation: int
|
||||||
|
:param mirroring: int
|
||||||
|
:param nr3d: int
|
||||||
|
:return: response
|
||||||
|
"""
|
||||||
|
body = [{
|
||||||
|
"cmd": "SetIsp",
|
||||||
|
"action": 0,
|
||||||
|
"param": {
|
||||||
|
"Isp": {
|
||||||
|
"channel": 0,
|
||||||
|
"antiFlicker": anti_flicker,
|
||||||
|
"exposure": exposure,
|
||||||
|
"gain": {"min": gain_min, "max": gain_max},
|
||||||
|
"shutter": {"min": shutter_min, "max": shutter_max},
|
||||||
|
"blueGain": blue_gain,
|
||||||
|
"redGain": red_gain,
|
||||||
|
"whiteBalance": white_balance,
|
||||||
|
"dayNight": day_night,
|
||||||
|
"backLight": back_light,
|
||||||
|
"blc": blc,
|
||||||
|
"drc": drc,
|
||||||
|
"rotation": rotation,
|
||||||
|
"mirroring": mirroring,
|
||||||
|
"nr3d": nr3d
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
return self._execute_command('SetIsp', body)
|
||||||
|
|
||||||
|
def set_image_settings(self,
|
||||||
|
brightness=128,
|
||||||
|
contrast=62,
|
||||||
|
hue=1,
|
||||||
|
saturation=125,
|
||||||
|
sharpness=128) -> object:
|
||||||
|
"""
|
||||||
|
Sets the camera image settings.
|
||||||
|
|
||||||
|
:param brightness: int
|
||||||
|
:param contrast: string
|
||||||
|
:param hue: int
|
||||||
|
:param saturation: int
|
||||||
|
:param sharpness: int
|
||||||
|
:return: response
|
||||||
|
"""
|
||||||
|
body = [
|
||||||
|
{
|
||||||
|
"cmd": "SetImage",
|
||||||
|
"action": 0,
|
||||||
|
"param": {
|
||||||
|
"Image": {
|
||||||
|
"bright": brightness,
|
||||||
|
"channel": 0,
|
||||||
|
"contrast": contrast,
|
||||||
|
"hue": hue,
|
||||||
|
"saturation": saturation,
|
||||||
|
"sharpen": sharpness
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
return self._execute_command('SetImage', body)
|
||||||
@@ -27,6 +27,48 @@ class RecordingAPIMixin:
|
|||||||
body = [{"cmd": "GetRec", "action": 1, "param": {"channel": 0}}]
|
body = [{"cmd": "GetRec", "action": 1, "param": {"channel": 0}}]
|
||||||
return self._execute_command('GetRec', body)
|
return self._execute_command('GetRec', body)
|
||||||
|
|
||||||
|
def set_recording_encoding(self,
|
||||||
|
audio=0,
|
||||||
|
main_bit_rate=8192,
|
||||||
|
main_frame_rate=8,
|
||||||
|
main_profile='High',
|
||||||
|
main_size="2560*1440",
|
||||||
|
sub_bit_rate=160,
|
||||||
|
sub_frame_rate=7,
|
||||||
|
sub_profile='High',
|
||||||
|
sub_size='640*480') -> object:
|
||||||
|
"""
|
||||||
|
Sets the current camera encoding settings for "Clear" and "Fluent" profiles.
|
||||||
|
:param audio: int Audio on or off
|
||||||
|
:param main_bit_rate: int Clear Bit Rate
|
||||||
|
:param main_frame_rate: int Clear Frame Rate
|
||||||
|
:param main_profile: string Clear Profile
|
||||||
|
:param main_size: string Clear Size
|
||||||
|
:param sub_bit_rate: int Fluent Bit Rate
|
||||||
|
:param sub_frame_rate: int Fluent Frame Rate
|
||||||
|
:param sub_profile: string Fluent Profile
|
||||||
|
:param sub_size: string Fluent Size
|
||||||
|
:return: response
|
||||||
|
"""
|
||||||
|
body = [{"cmd": "SetEnc",
|
||||||
|
"action": 0,
|
||||||
|
"param":
|
||||||
|
{"Enc":
|
||||||
|
{"audio": audio,
|
||||||
|
"channel": 0,
|
||||||
|
"mainStream": {
|
||||||
|
"bitRate": main_bit_rate,
|
||||||
|
"frameRate": main_frame_rate,
|
||||||
|
"profile": main_profile,
|
||||||
|
"size": main_size},
|
||||||
|
"subStream": {
|
||||||
|
"bitRate": sub_bit_rate,
|
||||||
|
"frameRate": sub_frame_rate,
|
||||||
|
"profile": sub_profile,
|
||||||
|
"size": sub_size}}
|
||||||
|
}}]
|
||||||
|
return self._execute_command('SetEnc', body)
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# RTSP Stream
|
# RTSP Stream
|
||||||
###########
|
###########
|
||||||
|
|||||||
Reference in New Issue
Block a user