Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 17360

Implement multiprocessing to test two videos simultaneously in opencv for object detection

$
0
0

I am implementing an object detection model using a YOLO algorithm with PyTorch and OpenCV. Running my model on a single video works fine. But whenever I am trying to use multiprocessing for testing more videos at once it is freezing. Can you please explain what is wrong with this code ??

import torchimport cv2import timefrom multiprocessing import Processmodel = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/best.pt', force_reload=True)def detectObject(video,name):    cap = cv2.VideoCapture(video)    while cap.isOpened():        pTime = time.time()        ret, img = cap.read()        cTime = time.time()        fps = str(int(1 / (cTime - pTime)))        if img is None:            break        else:            results = model(img)            labels = results.xyxyn[0][:, -1].cpu().numpy()            cord = results.xyxyn[0][:, :-1].cpu().numpy()            n = len(labels)            x_shape, y_shape = img.shape[1], img.shape[0]            for i in range(n):                row = cord[i]                # If score is less than 0.3 we avoid making a prediction.                if row[4] < 0.3:                    continue                x1 = int(row[0] * x_shape)                y1 = int(row[1] * y_shape)                x2 = int(row[2] * x_shape)                y2 = int(row[3] * y_shape)                bgr = (0, 255, 0)  # color of the box                classes = model.names  # Get the name of label index                label_font = cv2.FONT_HERSHEY_COMPLEX  # Font for the label.                cv2.rectangle(img, (x1, y1), (x2, y2), bgr, 2)  # Plot the boxes                cv2.putText(img, classes[int(labels[i])], (x1, y1), label_font, 2, bgr, 2)                cv2.putText(img, f'FPS={fps}', (8, 70), label_font, 3, (100, 255, 0), 3, cv2.LINE_AA)        img = cv2.resize(img, (700, 700))        cv2.imshow(name, img)        if cv2.waitKey(1) & 0xFF == ord('q'):            break    cap.release()Videos = ['../Dataset/Test1.mp4','../Dataset/Test2.mp4']for i in Videos:    process = Process(target=detectObject, args=(i, str(i)))    process.start()

Every time I run that code it freezes.Here is the output :

Downloading: "https://github.com/ultralytics/yolov5/archive/master.zip" to /home/com/.cache/torch/hub/master.zipYOLOv5 🚀 2022-6-27 Python-3.9.9 torch-1.11.0+cu102 CPUFusing layers... YOLOv5s summary: 213 layers, 7023610 parameters, 0 gradientsAdding AutoShape... 

Viewing all articles
Browse latest Browse all 17360

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>