import json import time import zeep from onvif import ONVIFCamera hangshu =7 lieshu = 60 #cv2.namedWindow("AI-ECO",cv2.WINDOW_FREERATIO)#WINDOW_FREERATIO record_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) def zeep_pythonvalue(self, xmlvalue): return xmlvalue class Onvif_hik(object): def __init__(self, ip: str, username: str, password: str): self.ip = ip self.username = username self.password = password self.save_path = "./{}T{}.jpg".format(self.ip, str(time.time())) # ½ØÍ¼±£´æÂ·¾¶ self.content_cam() def content_cam(self): """ Á´½ÓÏà»úµØÖ· :return: """ try: self.mycam = ONVIFCamera(self.ip,1024 , self.username, self.password) self.media = self.mycam.create_media_service() # ´´½¨Ã½Ìå·þÎñ # µÃµ½Ä¿±ê¸ÅÒªÎļþ zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue self.media_profile = self.media.GetProfiles()[0] # »ñÈ¡ÅäÖÃÐÅÏ¢ self.ptz = self.mycam.create_ptz_service() # ´´½¨¿ØÖÆÌ¨·þÎñ return True except Exception as e: return False def Snapshot(self): """ ½ØÍ¼ :return: """ res = self.media.GetSnapshotUri({'ProfileToken': self.media_profile.token}) response = requests.get(res.Uri, auth=HTTPDigestAuth(self.username, self.password)) with open(self.save_path, 'wb') as f: # ±£´æ½ØÍ¼ f.write(response.content) def get_presets(self): """ »ñȡԤÖõãÁбí :return:Ô¤ÖõãÁбí--ËùÓеÄÔ¤Öõã """ presets = self.ptz.GetPresets({'ProfileToken': self.media_profile.token}) # »ñÈ¡ËùÓÐÔ¤Öõã,·µ»ØÖµ£ºlist return presets def goto_preset(self, presets_token: int): """ ÒÆ¶¯µ½Ö¸¶¨Ô¤Öõã :param presets_token: Ä¿µÄλÖõÄtoken£¬»ñȡԤÖõ㷵»ØÖµÖÐ :return: """ try: # self.ptz.GotoPreset( # {'ProfileToken': self.media_profile.token, "PresetToken": presets_token}) # ÒÆ¶¯µ½Ö¸¶¨Ô¤ÖõãλÖà params = self.ptz.create_type('GotoPreset') params.ProfileToken = self.media_profile.token params.PresetToken = presets_token self.ptz.GotoPreset(params) except Exception as e: print(e) def zoom(self, zoom: str, timeout: int = 1): """ ±ä½¹ :param zoom: 1ΪÀ­½ü»ò-1ΪԶÀë :param timeout: ÉúЧʱ¼ä :return: """ request = self.ptz.create_type('ContinuousMove') request.ProfileToken = self.media_profile.token request.Velocity = {"Zoom": zoom} self.ptz.ContinuousMove(request) time.sleep(timeout) self.ptz.Stop({'ProfileToken': request.ProfileToken}) def get_status(self): """ »ñÈ¡µ±Ç°Ô¤ÖõãµÄÐÅÏ¢ :return: """ params = self.ptz.create_type('GetStatus') params.ProfileToken = self.media_profile.token res = self.ptz.GetStatus(params) print(res.MoveStatus.PanTilt) return res def absolute_move(self,p=180,t=0,z=0): pan = p/180.0#0.988889 #- left + right pan_speed = 1 tilt = 0.618182 - t/55.0 #+up -down 0~1 tilt_speed = 1 zoom = 1-z zoom_speed = 1 # Create media service object # Get target profile request = self.ptz.create_type('AbsoluteMove') request.ProfileToken = self.media_profile.token self.ptz.Stop({'ProfileToken': self.media_profile.token}) if request.Position is None: request.Position = self.ptz.GetStatus({'ProfileToken': self.media_profile.token}).Position if request.Speed is None: request.Speed = self.ptz.GetStatus({'ProfileToken': self.media_profile.token}).Position request.Position.PanTilt.x = pan request.Speed.PanTilt.x = pan_speed request.Position.PanTilt.y = tilt request.Speed.PanTilt.y = tilt_speed request.Position.Zoom = zoom request.Speed.Zoom = zoom_speed self.ptz.AbsoluteMove(request) print('finish') def deal (p,t,z,o,cap,num,Detection,Fine,img,start): print(p, " ", t, " ", z) o.absolute_move(p, t, z) #time.sleep(1) label = [] errorNum = 0 while (o.get_status().MoveStatus.PanTilt != "IDLE"): print("camera is moving") if start: time.sleep(5) while True: cap = cv2.VideoCapture("rtsp://admin:whc123456@192.0.0.30:554/h264/ch1/main/av_stream") if cap.isOpened(): #time.sleep(1) # allcount = cap.get(cv2.CAP_PROP_FRAME_COUNT) # cap.set(cv2.CAP_PROP_POS_FRAMES,allcount) res, frame = cap.read() #a = cap.get(cv2.CAP_PROP_BUFFERSIZE) # print(allcount) # while not res: # res, frame = cap.read() if res: img_show, label,box = Detection.inference(frame, Fine) img_show = cv2.resize(img_show,(1024,768)) # cv2.imshow("AI-ECO",img_show) # cv2.waitKey(1) img.append( Image.fromarray(cv2.cvtColor(img_show, cv2.COLOR_BGR2RGB))) #cv2.imwrite("./test/{}_{}.jpg".format(str(j).zfill(2), str(i).zfill(2)), img_show) num += 1 break else: print("empty") errorNum+=1 if errorNum>=2: cap = cv2.VideoCapture("rtsp://admin:whc123456@192.0.0.30:554/h264/ch1/main/av_stream") return num,img,label,box def long_pic_paste(image): image_result = Image.new(image[0][0].mode, ( 1024 * lieshu,hangshu * 768), 0xffffff) for j in range(hangshu): for i in range(lieshu): #print(j," ",i) image_result.paste(image[j][i], (i*1024, j*768)) image_result.save("../data_MPKFNet/result/{}.jpg".format(record_time)) if __name__ == '__main__': o = Onvif_hik(ip="117.178.217.84", username="admin", password="Aa123456") o.absolute_move(1, 0.5, 0.5)