OpenCV: код для повторного подключения отключенной камеры работает нормально, но во внешнем кадре захваченного видео не загружается - PullRequest
0 голосов
/ 21 февраля 2019

Я написал этот простой код Python для повторного подключения к IP-камере, к которой подключена моя система, на случай, если камера отключится.

import numpy as np
import cv2
import time

def work_with_captured_video():
    while True:
        ret, frame = camera.read()
        if not ret:
            print("Camera is disconnected!")
            camera.release()
            return False
            break
        else:
            cv2.imshow('frame', frame)
            return True
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

while True:
    camera = cv2.VideoCapture('rtsp://<ip specific to my camera>')
    if camera.isOpened():
        print('Camera is connected')
        #call function
        response = work_with_captured_video()
        if response == False:
            time.sleep(10)
            continue
    else:
        print('Camera not connected')
        camera.release()
        time.sleep(10)
        continue

Я могу сказать, что код работает нормально, а камера подключается зановопосле того, как он был отключен на некоторое время.Потому что в журнале я мог видеть операторы печати, как и ожидалось (которые я вставил в свой код для проверки состояния подключения)

Пожалуйста, смотрите прикрепленное изображение для того же: enter image description here

Обнаружена проблема:

1. Хотя я написал код cv2.imshow для просмотра видеопотока, я не могу увидеть ни одного видеопотока.

Просто пустое окнозагружается

Подача видео не прекращается (точнее, в моем случае: это пустое окно не гаснет) после нажатия клавиши «q» на клавиатуре, хотя для этого есть код, написанный для этого

Примечание:Я использую Ubuntu (ЦП), но я также пытался запустить код из системы Windows, но там также загружается только пустое окно без показа захваченного видеокадра.Более того:

В системе Windows, я вижу сообщение об ошибке, что: «Python перестал работать»

Я сомневаюсь: если бы Python перестал работать, то как остальные части кодавыполняется, и я вижу сообщения типа «отключен» .. «Подключен» и т. д. как ожидалось?

Было бы полезно, если бы вы могли пролить свет на решение этой проблемы.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2019

Подача видео не прекращается (точнее, в моем случае: это пустое окно не гаснет) после нажатия клавиши q на клавиатуре, хотя для этого есть код, написанный для

def work_with_captured_video():
while True:
    ret, frame = camera.read()
    if not ret:
        print("Camera is disconnected!")
        camera.release()
        return False
        break
    else:
        cv2.imshow('frame', frame)
        return True # Here You are returning the status.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

В функции, work_with_captured_video(), вы возвращаете статус True до cv2.waitKey(1).По сути, это должно быть примерно так:

def work_with_captured_video():
    while True:
        ret, frame = camera.read()
        if not ret:
            print("Camera is disconnected!")
            camera.release()
            return False
            #break --> Not required.
        else:
            cv2.imshow('frame', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
     return True

Как только вы закончите с циклом while, вы вернете статус True.

  1. Хотя я написал код cv2.imshow, чтобы увидеть видео-канал, я не могу увидеть ни одного видео-канала.
while True:
    camera = cv2.VideoCapture('rtsp://<ip specific to my camera>')
    if camera.isOpened():
        print('Camera is connected')
        #call function
        response = work_with_captured_video()
        if response == False:
            time.sleep(10)
            continue
    else:
        print('Camera not connected')
        camera.release()
        time.sleep(10)
        continue

Пожалуйста, передайте функцию work_with_captured_video() с аргументом camera.Функция не передается никаким аргументом, поэтому строка if not ret: имеет переменную ret в виде False.

def work_with_captured_video(camera):
    while True:
        ret, frame = camera.read()
        if not ret:
            print("Camera is disconnected!")
            camera.release()
            return False
        else:
            cv2.imshow('frame', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    return True

while True:
    camera = cv2.VideoCapture('rtsp://<ip specific to my camera>')
    if camera.isOpened():
        print('Camera is connected')
        #call function
        response = work_with_captured_video(camera)
        if response == False:
            time.sleep(10)
            continue
    else:
        print('Camera not connected')
        camera.release()
        time.sleep(10)
        continue

После внесения этих изменений ваш код будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...