如何使用 opencv 打开 pkl 文件?

Posted

技术标签:

【中文标题】如何使用 opencv 打开 pkl 文件?【英文标题】:How do I open pkl files with opencv? 【发布时间】:2020-10-08 21:57:46 【问题描述】:

我在“somefile”中有一个包含 pkl 文件的文件夹,我需要使用 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】:

您可以尝试将其加载为 numpy 数组:

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

该错误听起来可能是您的数据存在问题。如果您的某些数据有问题,您可以将调用包装在 try/except 中。

【讨论】:

我编辑了我的代码以包含您上面建议的内容。我原来的错误消失了,但现在我收到错误“OpenCV:无法从文件中读取视频流”'chapter': 2, 'eye': 'left': 'pos_x': array([ 440.26857574, 439.99729279, 440.28660381, ..., 1143.2058986...”(完整的错误太长,无法包含在此评论中)我试图打开的视频文件是一个电影场景,其中包含情节和眼动追踪数据,但是opencv 似乎无法处理绘图或眼动追踪数据。您有线索吗? 我没有足够的信息来做出非常好的推荐。看起来您能够成功解开数据。看起来数据是 JSON 而不是视频数据。该文件包含由眼睛分隔的跟踪数据。也许该对象中的某处也有视频数据。如果没有,你有原始视频吗?您可能需要编写一个脚本来在视频数据之上绘制眼动追踪数据。数据从何而来?您确定可以将这些文件作为电影观看吗? 数据来自我的实验室。我不确定是否可以将未腌制的文件作为电影观看,但我也有原始视频数据,所以我现在试图在视频文件之上绘制眼动追踪数据。开始使用此脚本的最佳方式是什么?具体来说,我试图用一个圆圈来跟踪每只眼睛,但我正在努力根据我已经拥有的眼动追踪数据来移动这些圆圈。

以上是关于如何使用 opencv 打开 pkl 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何利用python读取PKL文件

如何使用 .pkl 文件预测图像

如何解压pkl文件?

python写入和读取h5、pkl、mat 文件

打开pkl文件提示解码错误解决方法

如何从 2 个 pkl 文件创建 Python 嵌套字典/将 2 个嵌套字典合并为一个?