2017-11-26 6 views
-1

내 IP 카메라가 약간 불안정하고 임의로 연결이 끊어지는 것 같습니다. 내 스크립트가 연결이 끊어져서 몇 번 다시 연결을 시도 할 때를 결정할 수 있기를 원합니다. 시도 사이에 5-10 초 정도 기다리는 것이 좋습니다. 나는 몇 가지 시도했지만 아무것도 작동하지 않습니다. RET가 false 인 경우Python : 자동으로 IP 카메라 다시 연결

이 내 기본 스크립트는 스크립트가 종료된다

#!/usr/local/bin/python3 

import cv2 
import time 
import datetime 

print("start time: " + datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p")) 

cap = cv2.VideoCapture('rtsp://<ip><port>/live0.264') 

while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    # Confirm we have a valid image returned 
    if not ret: 
     print("disconnected!") 
     break 

    # Our operations on the frame come here 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA) 

    # Display the resulting frame 
    cv2.imshow('frame', gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

print("end time: " + time.strftime("%X")) 
# When everything is done, release the capture 
cap.release() 
cv2.destroyAllWindows() 

편집 : 내 네트워크가 일시적으로 다운 될 것을 나는 또한 스크립트와 같은 경우에는 카메라를 다시 연결을 시도하는 것 또는 그런 것도 좋아.

+1

무엇이 작동하지 않습니까? 오류가 있습니까? –

+0

Actualy 나는 해결책을 모른다. 그러나 나는 당신이 ip 카메라를 고쳐야한다고 생각한다. –

+0

전에 무작위로 ip 카메라를 연결해 본 적이 없다. 이것은 값싼 카메라이다. 나는 그것의 펌웨어 또는 무엇이든지 그것의 연결을 끊을 원인에 대한 통제권이 없다. 문제가 카메라가 아니더라도 스크립트가 다른 이유로 연결이 끊어지면 스크립트를 카메라에 복구 할 수 있기를 원합니다. – brewcrazy

답변

0

나는 마침내이 문제를 해결할 수있었습니다. 다행히도 이것은 똑같은 일을하는 다른 사람들에게 유용 할 것입니다.

사실 모션 감지시 모션 감지 및 비디오 녹화를위한 논리를 가진보다 복잡한 스크립트의 쉘입니다. 내가 여전히 테스트를하고 있지만이 모든 기본 로직 (그리고 내 허위 IP 카메라)으로 모든 것이 잘 작동하고있다.

#!/usr/local/bin/python3 

import cv2 
import datetime 
import time 


def reset_attempts(): 
    return 50 


def process_video(attempts): 

    while(True): 
     (grabbed, frame) = camera.read() 

     if not grabbed: 
      print("disconnected!") 
      camera.release() 

      if attempts > 0: 
       time.sleep(5) 
       return True 
      else: 
       return False 


recall = True 
attempts = reset_attempts() 

while(recall): 
    camera = cv2.VideoCapture("rtsp://<ip><port>/live0.264") 

    if camera.isOpened(): 
     print("[INFO] Camera connected at " + 
       datetime.datetime.now().strftime("%m-%d-%Y %I:%M:%S%p")) 
     attempts = reset_attempts() 
     recall = process_video(attempts) 
    else: 
     print("Camera not opened " + 
       datetime.datetime.now().strftime("%m-%d-%Y %I:%M:%S%p")) 
     camera.release() 
     attempts -= 1 
     print("attempts: " + str(attempts)) 

     # give the camera some time to recover 
     time.sleep(5) 
     continue