-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCameraController.py
More file actions
150 lines (125 loc) · 5.72 KB
/
Copy pathCameraController.py
File metadata and controls
150 lines (125 loc) · 5.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from onvif import ONVIFCamera
import datetime
class CameraController:
def __init__(self,
CAMERA_HOST='192.168.37.3',
CAMERA_PORT=80,
CAMERA_USER='admin',
CAMERA_PASS='6m8vw'):
# Подключение к камере
self.camera = ONVIFCamera(CAMERA_HOST, CAMERA_PORT, CAMERA_USER, CAMERA_PASS)
# Получение медиасервиса камеры
self.media_service = self.camera.create_media_service()
# Получение профилей камеры
self.profiles = self.media_service.GetProfiles()
self.profile_token = self.profiles[0].token
# Получение PTZ сервиса камеры
self.ptz_service = self.camera.create_ptz_service()
self.request_abs = self.get_zoom_request()
self.vs_token = self.media_service.GetVideoSources()[0].token
self.imaging_service = self.camera.create_imaging_service()
self.img_settings = self.imaging_service.GetImagingSettings({'VideoSourceToken': self.vs_token})
self.move_focus_request = self.imaging_service.create_type('Move')
self.move_focus_request.VideoSourceToken = self.vs_token
self.connected = False
self.zoom_level = 0
self.focus_level = 0
self.iris_level = 0
# self.updateDeviceTime()
# при старте устанавливаем самый широкоугольный режим
self.zoom_handler(0)
# def updateDeviceTime(self):
# self.devicemgmt = self.camera.create_devicemgmt_service()
# # Get system date and time
# camTime = self.camera.devicemgmt.GetSystemDateAndTime()
# now = datetime.datetime.now()
# camTime.TimeZone = 'GMT+0:00:00'
# camTime.UTCDateTime.Date.Year = now.year
# camTime.UTCDateTime.Date.Month = now.month
# camTime.UTCDateTime.Date.Day = now.day
# camTime.UTCDateTime.Time.Hour = now.hour
# camTime.UTCDateTime.Time.Minute = now.minute
# camTime.UTCDateTime.Time.Second = now.second
# time_params = self.camera.devicemgmt.create_type('SetSystemDateAndTime')
# time_params.DateTimeType = 'Manual'
# time_params.DaylightSavings = True
# time_params.TimeZone = camTime.TimeZone
# time_params.UTCDateTime = camTime.UTCDateTime
# self.camera.devicemgmt.SetSystemDateAndTime(time_params)
# get ZOOM absoluteMove request
def get_zoom_request(self):
request_abs = self.ptz_service.create_type('AbsoluteMove')
request_abs.ProfileToken = self.profile_token
if request_abs.Position is None:
request_abs.Position = self.ptz_service.GetStatus(
{'ProfileToken': self.profile_token}).Position
if request_abs.Speed is None:
request_abs.Speed = self.ptz_service.GetStatus(
{'ProfileToken': self.profile_token}).Position
return request_abs
# def set_zoom(self, zoom_level):
# self.zoom_level = zoom_level
# ptz_request = self.ptz_service.create_type('ContinuousMove')
# ptz_request.ProfileToken = self.profile_token
# ptz_request.Velocity = self.ptz_service.GetStatus({'ProfileToken': self.profile_token}).Position
# ptz_request.Velocity.Zoom = {'x': zoom_level}
#
# self.ptz_service.ContinuousMove(ptz_request)
def connect(self):
self.connected = True
# print("Camera connected")
def validate_value(self, value):
if value < 0:
value = 0
if value > 1:
value = 1
return value
# Управление зумом
def set_zoom(self, pos):
self.request_abs.Position.Zoom.x = self.validate_value(pos)
self.request_abs.Speed.Zoom.x = 1
self.ptz_service.AbsoluteMove(self.request_abs)
def focus_mode_auto(self, auto_mode=False):
if auto_mode:
print("Focus mode set to AUTO")
self.img_settings.Focus.AutoFocusMode = 'AUTO'
else:
print("Focus mode set to MANUAL")
self.img_settings.Focus.AutoFocusMode = 'MANUAL'
self.imaging_service.SetImagingSettings(
{'VideoSourceToken': self.vs_token, 'ImagingSettings': self.img_settings}
)
def zoom_handler(self, pos):
if self.connected:
pos = self.validate_value(pos)
self.zoom_level = pos
print(f"Zoom set to {pos}")
self.set_zoom(pos)
else:
print("Camera not connected")
def focus_handler(self, pos, speed=1):
if self.connected:
pos = self.validate_value(pos)
self.focus_level = pos
print(f"Focus set to {pos}")
fc2 = {'Absolute': {'Position': pos, 'Speed': speed}}
self.imaging_service.Move({'VideoSourceToken': self.move_focus_request.VideoSourceToken, 'Focus': fc2})
# self.imaging_service.Stop({'VideoSourceToken': self.move_focus_request.VideoSourceToken})
else:
print("Camera not connected")
def iris_handler(self, pos):
if self.connected:
pos = self.validate_value(pos)
self.iris_level = pos
self.img_settings.Exposure.Iris = pos
self.imaging_service.SetImagingSettings(
{'VideoSourceToken': self.vs_token, 'ImagingSettings': self.img_settings})
self.img_settings = self.imaging_service.GetImagingSettings({'VideoSourceToken': self.vs_token})
print(f"Iris set to {pos}")
else:
print("Camera not connected")
def photo_handler(self):
if self.connected:
print("Photo taken")
else:
print("Camera not connected")