0
votes

I am trying to save the video after detection in yolo,it saves thew video but dont show detected items.Code is here import cv2 from darkflow.net.build import TFNet import numpy as np import time import os from PyQt5 import QtCore, QtWidgets, QtGui, uic from PyQt5.QtWidgets import QPushButton, QInputDialog, QLineEdit from PyQt5.uic import loadUi import sys from PIL import Image

option= { 'model':'cfg/yolo.cfg', 'load':'bin/yolov2.weights', 'threshold': 0.3, } class MyWindow(QtWidgets.QMainWindow):

def __init__(self):
    super(MyWindow, self).__init__()
    loadUi("new.ui", self)
    self.testcam.clicked.connect(self.CameraTest)
    self.start.clicked.connect(self.Camera)


def CameraTest(self):
    cap = cv2.VideoCapture(0)
    cap.set(3,640) # set Width
    cap.set(4,480) # set Height
    while(True):
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        cv2.imshow('CamTest', frame)

        k = cv2.waitKey(30) & 0xff
        if k == 27: # press 'ESC' to quit
            break
    cap.release()
    cv2.destroyAllWindows()
def Camera(self):

    tfnet = TFNet(option)
    colors = [tuple(255 * np.random.rand(3)) for _ in range(10)]

    cap= cv2.VideoCapture(0)
    #cap.set(cv2.CAP_PROP_FRAME_WIDTH, 512)
    #cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 512)
    fourcc=cv2.VideoWriter_fourcc(*'XVID')
    out=cv2.VideoWriter('new.avi',fourcc,20.0,(640,480))

    while True:
        stime = time.time()
        ret, frame = cap.read()
        out.write(frame)
        if (ret==True):

            results = tfnet.return_predict(frame)
            for color, result in zip(colors, results):
                tl = (result['topleft']['x'], result['topleft']['y'])
                br = (result['bottomright']['x'], result['bottomright']['y'])
                label = result['label']
                confidence = result['confidence']
                text = '{}: {:.0f}%'.format(label, confidence * 100)
                frame = cv2.rectangle(frame, tl, br, color, 5)
                frame = cv2.putText(
                    frame, text, tl, cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 0), 2)
            cv2.imshow('frame', frame)
            print('FPS {:.1f}'.format(1 / (time.time() - stime)))
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

if name == 'main': import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

1
It seem you do prediction on the frame after writing that frame into the video. Put out.write(frame) at the end of the while loopMH304

1 Answers

0
votes

these two lines should be written before the loop

codec = cv2.VideoWriter_fourcc(*"MJPG")

out = cv2.VideoWriter('./processed.avi' , codec, fps, (width, height))

this should be inside the loop just above imshow()

out.write(frame)