#python #tensorflow #keras #deep-learning #cv2
Вопрос:
Я пытаюсь протестировать свою модель на видео для прогнозирования.
Я хочу сделать прогноз, используя свою cnn(alexnet) lstm
модель на видео, которое у меня есть, но когда оно запускается, ничего из видео не появляется.
Вот мой код:
vid = cv2.VideoCapture("Data Fix/Data16_133.mp4")
while(vid.isOpened()):
ret, frame = vid.read()
vid.set(3, 480)
vid.set(4, 240)
start = time.time()
if ret == True:
total_frame = 1
draw = frame.copy()
draw = cv2.cvtColor(draw, cv2.COLOR_BGR2RGB)
scale_percent = 20 # percent of original size
width = 224
height = width
dim = (width, height)
frame_set = cv2.resize(draw, dim, interpolation = cv2.INTER_AREA)
frame_set=np.arange(10*width*height*3).reshape(10,width, height, 3)
frame_set.reshape(10, width, height, 3).shape
frame_set = np.expand_dims(frame_set, axis=0)
result=model.predict_on_batch(frame_set)
cv2.imshow('Result', result)
print(result)
if cv2.waitKey(1) amp; 0xFF == ord('q'):
break
vid.release()
cv2.destroyAllWindows()
когда я печатаю результат, он продолжает печатать это значение снова и снова, ничего не показывая из cv2.imshow
[[0.0602112 0.01403825 0.3782384 0.5362205 0.01129159]]
кто-нибудь имеет представление об этом?
любой ответ был бы признателен
в настоящее время я пытаюсь в этом уроке сделать модель и то, как я помещаю набор данных, одинаковыми, разница в том, что я не использовал MobileNet
трансферное обучение, я изменил его с помощью AlexNet
модели.
Ответ №1:
Проблема в том, что ваши результаты не являются изображением, которое вы можете отобразить с помощью OpenCV
. Ваши результаты выводятся из вашей модели, которая, согласно общей записной книжке, является моделью классификации и представляет вероятности классов. Я предполагаю, что вы пытаетесь предсказать какой-то класс, соответствующий видео. Если вы хотите увидеть рамку, то вы должны использовать ее вот так:
cv2.imshow('frame', frame) # to see the frame
# below to see the draw
cv2.imshow('draw', draw)
Изменить: Если вы хотите показать предсказанный класс на изображении,
выполните следующие действия
# Get the predicted class from the result using argmax
pred_class = np.argmax(result)
# Here I assume that the index is the desired class like most cases
# Now we will write the class label on the image
# Set the font and place
font = cv2.FONT_HERSHEY_SIMPLEX
org = (50, 50)
cv2.putText(frame, str(pred_class), org, font, .5, (255,255,255),2,cv2.LINE_AA)
# now just show the frame
cv2.imshow('frame', frame)
Комментарии:
1. но если я покажу только кадр и нарисую, разве он не будет показывать прогноз на видео тоже?
2. @JuniorPython вы должны четко понимать, чего вы хотите? вы хотите показать класс результата на кадре?
3. я имею в виду, что в этом посте ясно сказано, что я хочу показать результат прогнозирования с использованием моей модели, а не просто показать видео…..
4. Это работает, и это показывает прогноз, к сожалению, я пытаюсь посмотреть другое видео, прогноз не изменился и всегда имеет один и тот же класс, я думаю, что это из моей модели Спасибо за вашу помощь