Python numpy.ndarray对象没有属性';阅读';(和搜索)
我得到的错误是Python numpy.ndarray对象没有属性';阅读';(和搜索),python,numpy,deep-learning,object-detection,Python,Numpy,Deep Learning,Object Detection,我得到的错误是numpy.ndarray对象没有属性“read”和numpy.ndarray对象没有属性“seek”。我试着在网上寻找答案,但失败了 我想做的是检测视频中的物体——在这种情况下,我想检测斑马 我拿了一个图像检测器,我正试图把它应用到视频中。我试图在视频的每一帧上循环,并最终将该帧传递给函数draw\u box 以下是错误消息: Traceback (most recent call last): File "/Users/ysquared/Library/Python/3.7
numpy.ndarray对象没有属性“read”
和numpy.ndarray对象没有属性“seek”
。我试着在网上寻找答案,但失败了
我想做的是检测视频中的物体——在这种情况下,我想检测斑马
我拿了一个图像检测器,我正试图把它应用到视频中。我试图在视频的每一帧上循环,并最终将该帧传递给函数
draw\u box
以下是错误消息:
Traceback (most recent call last):
File "/Users/ysquared/Library/Python/3.7/lib/python/site-packages/PIL/Image.py", line 2770, in open
fp.seek(0)
AttributeError: 'numpy.ndarray' object has no attribute 'seek'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 204, in <module>
File "<string>", line 118, in load_image_pixels
File "/Users/ysquared/Library/Python/3.7/lib/python/site-packages/keras_preprocessing/image/utils.py", line 110, in load_img
img = pil_image.open(path)
File "/Users/ysquared/Library/Python/3.7/lib/python/site-packages/PIL/Image.py", line 2772, in open
fp = io.BytesIO(fp.read())
AttributeError: 'numpy.ndarray' object has no attribute 'read'
seek
和read
是打开的文件可以做的事情。我从回溯推断,这个错误发生在
image, image_w, image_h = load_image_pixels(frame, (input_w, input_h))
行,并且问题必须出现在框架
参数中。该函数需要一个打开的文件或文件名,但frame
显然是numpy数组。其定义见上文:
(grabbed, frame) = vs.read()
所以它是mp4中的一个帧,一个数组,而不是一个文件
因此,您需要为
load\u image\u pixels
提供一个文件名,或者需要使用其他一些函数来处理frame
数组
一般的网络搜索对这种错误没有帮助。它既过于宽泛又过于具体
没有属性
Python中的错误很常见。这意味着该点上的对象具有不同于程序员预期的类。例如,如果cv
读取找不到文件,它将返回None
,而不是图像。您不能像处理图像一样处理None
。但是使用数组而不是文件名的特殊组合是独一无二的
在进行web搜索之前,请尝试了解错误发生的位置以及所涉及的变量。检查它的实际性质(类型、形状等)和对代码的期望,以及调用的函数。以下是我解决问题的方法(即消除错误):
##[..]
cv2.imwrite(“framex.jpg”,frame)
filename=“framex.jpg”
image,image\u w,image\u h=加载\u image\u像素(文件名,(输入\u w,输入\u h))
##[..]
框架=绘制框(文件名、v框、v标签、v分数)
##[..]
如何将帧(如您所说,是numpy数组)转换为文件(如jpg文件)?所以我想弄明白的是如何将帧(一个numpy数组)转换成jpg文件,这样load\u image\u pixels
就可以使用正确的类型。我已经尝试了从keras.preprocessing.Image导入的Image.fromarray
,array\u to\u img
。如果您能帮助我,我将不胜感激。如果帧
已经是数组,为什么您需要使用加载图像\u像素
?为什么将其保存为文件只是为了再次加载到数组或keras
结构中?您是否正在学习针对不同类型输入的教程?load\u image\u pixels
还会返回图像的高度和宽度以及图像。图像的高度和宽度被另一个函数占用。这就是为什么我认为我需要使用load\u image\u pixels
。你不能从数组中推断高度和宽度吗?函数draw\u box
使用的是文件名而不是numpy数组。与加载图像像素不同,我不能修改这个。要检测对象,我需要绘制框
。所以我需要将numpy数组转换为jpg文件。