Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.82 KB | None | 0 0
  1. from onvif import ONVIFCamera
  2. import os
  3. import io
  4. import rtsp
  5. import requests
  6.  
  7. class Camera:
  8.     def __init__(self, ip, port, user='admin', password='Supervisor'):
  9.         self.ip = ip
  10.         self.port = port
  11.         self.user = user
  12.         self.password = password
  13.         self.cam = ONVIFCamera(ip, port, user, password)
  14.         self.media = self.cam.create_media_service()
  15.         self.imaging = self.cam.create_imaging_service()
  16.         self.vstoken = self.media.GetVideoSources()[0]._token
  17.         self.request = self.imaging.create_type("SetImagingSettings")
  18.         self.request.VideoSourceToken = self.vstoken
  19.  
  20.     def GetImagingSettings(self):
  21.         return self.imaging.GetImagingSettings({'VideoSourceToken': self.vsctoken })
  22.  
  23.     def GetSnapshotUri(self):
  24.         uri = None
  25.         token = self.media.GetProfiles()[0]._token
  26.  
  27.         try:
  28.             uri = self.media.GetSnapshotUri({'ProfileToken': token}).Uri
  29.         except Exception as e:
  30.             pass
  31.  
  32.         return uri
  33.  
  34.     def get_private_stream_url(self):
  35.         uri = None
  36.         token = self.media.GetProfiles()[0]._token
  37.  
  38.         obj = self.media.create_type('GetStreamUri')
  39.         obj.ProfileToken = token
  40.         obj.StreamSetup = {
  41.             'Stream': 'RTP-Unicast',
  42.             'Transport': {'Protocol': 'RTSP'}
  43.         }
  44.  
  45.         try:
  46.             uri = self.media.GetStreamUri(obj).Uri
  47.             if len(self.user + self.password) > 0:
  48.                 uri = uri[:7] + self.user + ':' + self.password + "@" + uri[7:]
  49.  
  50.         except Exception as e:
  51.             pass
  52.  
  53.         return uri
  54.  
  55.  
  56.     def get_public_snapshot_url(self):
  57.         # make sure that snapshots folder is exists
  58.         if not os.path.isdir('snapshots'):
  59.             os.makedirs('snapshots')
  60.  
  61.         private_uri = self.GetSnapshotUri()
  62.         if private_uri is not None:
  63.             try:
  64.                 r = requests.get(private_uri, auth=(self.user, self.password))
  65.  
  66.                 if r.ok:
  67.                     filename = 'snapshots/' + self.ip + ":" + str(self.port) + '.jpg'
  68.                     with open(filename, 'wb') as snapshot:
  69.                         snapshot.write(r.content)
  70.                     return "/" + filename
  71.             except Exception as e:
  72.                 print('get_public_snapshot_url: request error: ', e)
  73.  
  74.  
  75.         # try to get snapshot from stream
  76.         private_stream_url = self.get_private_stream_url()
  77.  
  78.         if private_stream_url is not None:
  79.             client = rtsp.Client(rtsp_server_uri=private_stream_url, verbose=False)
  80.             image = client.read()
  81.  
  82.             if image is not None:
  83.                 imgByteArr = io.BytesIO()
  84.                 image.save(imgByteArr, format='jpeg')
  85.                 image = imgByteArr.getvalue()
  86.  
  87.             client.close()
  88.             filename = 'snapshots/' + self.ip + ":" + str(self.port) + '.jpg'
  89.  
  90.             with open(filename, 'wb') as snapshot:
  91.                 snapshot.write(image)
  92.  
  93.             return "/" + filename
  94.  
  95.         return None
  96.  
  97.     def CreateRequest(self):
  98.         self.request.ImagingSettings = self.GetImagingSettings()
  99.         return self.request
  100.  
  101.     def GetImagingSettings(self):
  102.         return self.imaging.GetImagingSettings({'VideoSourceToken': self.vstoken })
  103.  
  104.     def GetBrightness(self):
  105.         try:
  106.             brightness = self.imaging.GetImagingSettings({'VideoSourceToken': self.vstoken}).Brightness
  107.         except:
  108.             brightness = None
  109.         return brightness
  110.  
  111.     def GetColorSaturation(self):
  112.         try:
  113.             saturation = self.imaging.GetImagingSettings({'VideoSourceToken': self.vstoken}).ColorSaturation
  114.         except:
  115.             saturation = None
  116.         return saturation
  117.  
  118.     def GetContrast(self):
  119.         try:
  120.             contrast = self.imaging.GetImagingSettings({'VideoSourceToken': self.vstoken}).Contrast
  121.         except:
  122.             contrast = None
  123.         return contrast
  124.  
  125.     def SetExposureMode(self, mode):
  126.         request = self.CreateRequest()
  127.         request.ImagingSettings.Exposure.Mode = mode
  128.         return self.imaging.SetImagingSettings(request)
  129.  
  130.     def SetWhiteBalanceMode(self, mode):
  131.         request = self.CreateRequest()
  132.         request.ImagingSettings.WhiteBalance.Mode = mode
  133.         return self.imaging.SetImagingSettings(request)
  134.  
  135.     def SetColorSaturation(self, saturation):
  136.         request = self.CreateRequest()
  137.         request.ImagingSettings.ColorSaturation = saturation
  138.         return self.imaging.SetImagingSettings(request)
  139.  
  140.     def SetBrightness(self, brightness):
  141.         request = self.CreateRequest()
  142.         request.ImagingSettings.Brightness = brightness
  143.         return self.imaging.SetImagingSettings(request)
  144.  
  145.     def SetContrast(self, contrast):
  146.         request = self.CreateRequest()
  147.         request.ImagingSettings.Contrast = contrast
  148.         return self.imaging.SetImagingSettings(request)
  149.  
  150.     def SetExposureGain(self, gain):
  151.         request = self.CreateRequest()
  152.         request.ImagingSettings.Exposure.Gain = gain
  153.         return self.imaging.SetImagingSettings(request)
  154.  
  155.     def SetExposureTime(self, time):
  156.         request = self.CreateRequest()
  157.         request.ImagingSettings.Exposure.ExposureTime = time
  158.         return self.imaging.SetImagingSettings(request)
  159.  
  160.     def SetExposureIris(self, iris):
  161.         request = self.CreateRequest()
  162.         request.ImagingSettings.Exposure.Iris = iris
  163.         return self.imaging.SetImagingSettings(request)
  164.  
  165.     def SetWbCrGain(self, crgain):
  166.         request = self.CreateRequest()
  167.         request.ImagingSettings.WhiteBalance.CrGain = crgain
  168.         self.imaging.SetImagingSettings(request)
  169.  
  170.     def SetWbCbGain(self, cbgain):
  171.         request = self.CreateRequest()
  172.         request.ImagingSettings.WhiteBalance.CbGain = cbgain
  173.         self.imaging.SetImagingSettings(request)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement