Ask Your Question
0

yolo with opencv error

asked 2019-12-06 09:59:54 -0600

Fahad Ahmed gravatar image

updated 2019-12-06 10:46:14 -0600

berak gravatar image

I am trying to yolo in opencv but getting the error CODE IS BELOW

import cv2
import numpy as np
import time

# Load Yolo
net = cv2.dnn.readNet("weights/yolov3-tiny.weights", "cfg/yolov3-tiny.cfg")
classes = []
with open("coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))

# Loading image
cap = cv2.VideoCapture(0)

font = cv2.FONT_HERSHEY_PLAIN
starting_time = time.time()
frame_id = 0
while True:
    _, frame = cap.read()
    frame_id += 1

    height, width, channels = frame.shape

    # Detecting objects
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

    net.setInput(blob)
    outs = net.forward(output_layers)

    # Showing informations on the screen
    class_ids = []
    confidences = []
    boxes = []
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.2:
                # Object detected
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)

                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.8, 0.3)

    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            confidence = confidences[i]
            color = colors[class_ids[i]]
            cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
            cv2.putText(frame, label + " " + str(round(confidence, 2)), (x, y + 30), font, 3, color, 3)



    elapsed_time = time.time() - starting_time
    fps = frame_id / elapsed_time
    cv2.putText(frame, "FPS: " + str(round(fps, 2)), (10, 50), font, 4, (0, 0, 0), 3)
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()

ERROR

Traceback (most recent call last):
  File "C:\Users\iamfa\Desktop\yolo_realtime_detection_cpu\real_time_yolo.py", line 6, in <module>
    net = cv2.dnn.readNet("weights/yolov3-tiny.weights", "cfg/yolov3-tiny.cfg")
cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\dnn\src\darknet\darknet_importer.cpp:214: error: (-212:Parsing error) Failed to parse NetParameter file: weights/yolov3-tiny.weights in function 'cv::dnn::dnn4_v20190902::readNetFromDarknet'

[Finished in 0.9s]
edit retag flag offensive close merge delete

Comments

can you look at the files you downloaded ? (things can go wrong, and maybe there's just an html error msg instead of the expected weights)

berak gravatar imageberak ( 2019-12-06 14:07:38 -0600 )edit

Mine is working now. I used same code from YOLO on CPU

supra56 gravatar imagesupra56 ( 2019-12-06 21:12:10 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
1

answered 2019-12-06 13:59:06 -0600

mvuori gravatar image

The error is, as you know: "Failed to parse NetParameter file: weights/yolov3-tiny.weights".

There is something wrong with the contents of it, or perhaps the file does not exist, or the default directory is not what you expect and thus the relative path does not point to the file.

edit flag offensive delete link more

Comments

Its usually that the file is missing. (I had this error message when i messed up my testing paths) Try using an absolute path to exclude this possebility.

holger gravatar imageholger ( 2019-12-06 16:12:44 -0600 )edit

@holger. Did you downloaded yolov2-tiny.weights and yolov3-tiny.cfg?. It is not absolute path.

supra56 gravatar imagesupra56 ( 2019-12-06 21:15:23 -0600 )edit

Hmm i dont really understand^^ I don't have any problems reading my network with a relative paths - its working :-) My weights and config were trained by myself - so yes i downloaded them from my cloud.

I just wanted to point out that - if you have problems in that area (reading the model) - try an absolute path to exclude an error source.

holger gravatar imageholger ( 2019-12-07 16:24:30 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2019-12-06 09:59:54 -0600

Seen: 12,613 times

Last updated: Dec 06 '19