エラーが発生しますnumpy.ndarray object has no attribute 'read'
およびnumpy.ndarray object has no attribute 'seek'
。オンラインで答えを探してみましたが、失敗しました。
私がやろうとしているのは、ビデオ内のオブジェクトを検出することです。この場合、シマウマを検出したいと考えています。
画像検出器を撮影し、ビデオに適用しようとしています。ビデオの各フレームをループして、最終的にフレームを関数draw_boxes
。
エラーメッセージは次のとおりです。
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'
そしてここに関連するコードがあります:
model = load_model('model.h5')
# define the expected input shape for the model
input_w, input_h = 416, 416
# define the anchors
anchors = [[116,90, 156,198, 373,326], [30,61, 62,45, 59,119], [10,13, 16,30, 33,23]]
# define the labels
labels = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck",
"boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench",
"bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe",
"backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard",
"sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard",
"tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana",
"Apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake",
"chair", "sofa", "pottedplant", "bed", "diningtable", "toilet", "tvmonitor", "laptop", "mouse",
"remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator",
"book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]
vs = cv2.VideoCapture('Zebras.mp4')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
writer = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
class_threshold = 0.6
boxes = list()
while True:
(grabbed, frame) = vs.read()
if grabbed==True:
image, image_w, image_h = load_image_pixels(frame, (input_w, input_h))
yhat = model.predict(image)
for i in range(len(yhat)):
# decode the output of the network
boxes += decode_netout(yhat[i][0], anchors[i], class_threshhold, input_h, input_w)
# correct the sizes of the bounding boxes for the shape of the image
correct_yolo_boxes(boxes, image_h, image_w, input_h, input_w)
# suppress non-maximal boxes
do_nms(boxes, 0.5)
# get the details of the detected objects
v_boxes, v_labels, v_scores = get_boxes(boxes, labels, class_threshold)
# draw what we found
frame = draw_boxes(frame, v_boxes, v_labels, v_scores)
writer.write(frame)
cv2.imshow('frame', frame)
if cv2.waitkey(1) & 0xFF == ord('q'):
break
else:
break
vs.release()
writer.release()
cv2.destroyAllWindows()
これが私が問題を解決した方法です(つまり、エラーを取り除きました):
##[..]
cv2.imwrite("framex.jpg", frame)
filename = "framex.jpg"
image, image_w, image_h = load_image_pixels(filename, (input_w, input_h))
##[..]
frame = draw_boxes(filename, v_boxes, v_labels, v_scores)
##[..]