Как изменить скрипт Python, чтобы он продолжал цикл и ошибки с openCV - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в python и пытаюсь сделать переигровку для потоковых игр. Учить себя, как я иду. Код предназначен для переименования и воспроизведения новейшего видеоклипа из папки. Нужно продолжать бегать и проигрывать только одно новейшее видео. Это то, что я до сих пор. Он устанавливает каталог. Удаляет файл с именем replay.mp4 (возникают проблемы, если нет файла с именем replay.mp4). Затем измените имя нового файла на replay.mp4 и воспроизведите его в масштабированном окне и закройте, когда закончите. Это работает, но все равно выдает ошибку после закрытия (AttributeError: у объекта 'NoneType' нет атрибута 'shape').

Как я могу исправить свои ошибки и запустить непрерывность, но не повторять видео

Спасибо

См. Код ниже:

import os
import glob
import numpy as np
import cv2



os.chdir('C:/Users/Main/Videos/PUBG')
os.remove('replay.mp4')

newest = max(glob.iglob('*.[Mm][Pp]4'), key=os.path.getctime)

replay = ('C:/Users/Main/Videos/PUBG/replay.mp4')


os.replace((newest),(replay))

cap = cv2.VideoCapture((replay))

def rescale_frame(frame, percent=25):
    width = int(frame.shape[1] * percent/ 100)
    height = int(frame.shape[0] * percent/ 100)
    dim = (width, height)
    return cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)

while True:
    rect, frame = cap.read()
    frame25 = rescale_frame(frame, percent=25)
    cv2.imshow('frame25', frame25)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break



cap.release()
cv2.destroyAllWindows()

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

удалось решить проблему.Просто нужно выяснить, как зацикливаться

import os
import glob
import numpy as np
import cv2

os.chdir('C:/Users/Main/Videos/PUBG/')

newest = max(glob.iglob('*.[Mm][Pp]4'), key=os.path.getctime)

os.replace((newest), 'replay.mp4')

if newest != max(glob.iglob('*.[Mm][Pp]4'), key=os.path.getctime):
  cap = cv2.VideoCapture('C:/Users/Main/Videos/PUBG/replay.mp4')

def rescale_frame(frame, percent=25):
    width = int(frame.shape[1] * percent/ 100)
    height = int(frame.shape[0] * percent/ 100)
    dim = (width, height)
    return cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)

while True:
    ret ,frame = cap.read()
    if type(frame) == type(None):
        break
    frame25 = rescale_frame(frame, percent=25)
    cv2.imshow('frame25',frame25)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
  cap.release()
  cv2.destroyAllWindows()
os.remove('replay.mp4')
0 голосов
/ 25 апреля 2018

Вы можете просто использовать выражение try catch, если хотите избежать этой ошибки.При этом ваш код будет пытаться выполнить строки в случае исключения, он продолжит цикл.

   while True:

        rect, frame = cap.read()
        try:
            frame25 = rescale_frame(frame, percent=25)
        except:
            continue
        cv2.imshow('frame25', frame25)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

Или вы можете просто сделать:

   while True:

        rect, frame = cap.read()
        if frame== None:
               continue
        frame25 = rescale_frame(frame, percent=25)

        cv2.imshow('frame25', frame25)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...