Возникли проблемы при реализации модели CNN LSTM, которую я сделал в видео

#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. Это работает, и это показывает прогноз, к сожалению, я пытаюсь посмотреть другое видео, прогноз не изменился и всегда имеет один и тот же класс, я думаю, что это из моей модели Спасибо за вашу помощь