Как открыть файлы pkl с помощью opencv? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть папка с файлами pkl в somefile, которую мне нужно открыть как видео с помощью opencv, но я продолжаю получать ошибку _pickle.UnpicklingError: unpickling stack underflow. Что я делаю не так? Я знаю, что мой код некрасивый ... Пожалуйста, не жарь меня, лол

import cv2 import os import pickle import numpy as np

subdir ='somefile' files = os.listdir(subdir)

# open pkl filesfor f in files:
with open(subdir + '/' + f, 'rb') as infile:
    try:
        unpickled_videos = pickle.load(infile)
        for video in unpickled_videos:
            print('{} has been unpickled'.format(os.path.abspath(video)))
            # play video from file
            for video in unpickled_videos:
                if video == 'eye':
                    # create VideoCapture object, read from input file
                    cap = cv2.VideoCapture('eye' + '.mp4')

                    # check if camera opened successfully
                    if (cap.isOpened() == False):
                        print("Error opening {}".format(os.path.abspath(video)))

                    # convert resolutions from float to integer
                    frame_width = int(cap.get(3))
                    frame_height = int(cap.get(4))
                    fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)

                    # define codec and create VideoWriter object
                    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
                    out = cv2.VideoWriter(video + '.MP4', fourcc, fps, (frame_width, frame_height), True)

                    # read until video is completed
                    while True:
                        # capture frame-by-frame
                        ret, frame = cap.read()

                        # display resulting frame
                        cv2.imshow('frame', frame)
                        # press Q on keyboard to exit
                        if cv2.waitKey(0) & 0xFF == ord('q'):
                            break

    except FileNotFoundError:
        print('{} not found!'.format(f))
        pass
    except EOFError:
        print('End of file error')
        pass 

#when everything done, release video capture object and close all frames 
#cap.release() out.release() cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете попробовать загрузить его как массив numpy с:

import numpy as np. 
data = np.load(input_filename, allow_pickle=True)

Ошибка звучит так, как будто это может быть проблема с вашими данными. В случае, если некоторые из ваших данных являются проблемными c, вы можете заключить вызов в команду try / except.

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