如何使用 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章