Search code examples
pythonqtyolopysimplegui

Error when trying to run code based on PysimpleGUIqt


I am trying to run a code using PysimpleGUIqt but it gives following error:

enter image description here

I have tried to install windows but getting following error:

enter image description here

If I try to install window it will be installed but error remains. I even installed pyqt5 but nothing changed. Have no idea how to solve it. The whole code is attached below for your reference which is originally taken from here:

import numpy as np
import argparse
import time
import cv2
import os
import PySimpleGUIQt as sg

layout =    [
        [sg.Text('YOLO')],
        [sg.Text('Path to image'), sg.In(r'C:/Python/PycharmProjects/YoloObjectDetection/images/baggage_claim.jpg',size=(40,1), key='image'), sg.FileBrowse()],
        [sg.Text('Yolo base path'), sg.In(r'yolo-coco',size=(40,1), key='yolo'), sg.FolderBrowse()],
        [sg.Text('Confidence'), sg.Slider(range=(0,10),orientation='h', resolution=1, default_value=5, size=(15,15), key='confidence')],
        [sg.Text('Threshold'), sg.Slider(range=(0,10), orientation='h', resolution=1, default_value=3, size=(15,15), key='threshold')],
        [sg.OK(), sg.Cancel(), sg.Stretch()]
            ]

win = sg.Window('YOLO',
                default_element_size=(14,1),
                text_justification='right',
                auto_size_text=False).Layout(layout)
event, values = win.Read()
args = values
win.Close()

args['threshold'] = float(args['threshold']/10)
args['confidence'] = float(args['confidence']/10)

labelsPath = os.path.sep.join([args["yolo"], "coco.names"])
LABELS = open(labelsPath).read().strip().split("\n")

np.random.seed(42)
COLORS = np.random.randint(0, 255, size=(len(LABELS), 3),
    dtype="uint8")

weightsPath = os.path.sep.join([args["yolo"], "yolov3.weights"])
configPath = os.path.sep.join([args["yolo"], "yolov3.cfg"])

print("[INFO] loading YOLO from disk...")
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)

image = cv2.imread(args["image"])

(H, W) = image.shape[:2]

ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]


blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416),
    swapRB=True, crop=False)
net.setInput(blob)
start = time.time()
layerOutputs = net.forward(ln)
end = time.time()


print("[INFO] YOLO took {:.6f} seconds".format(end - start))


boxes = []
confidences = []
classIDs = []

for output in layerOutputs:
    for detection in output:
        
        scores = detection[5:]
        classID = np.argmax(scores)
        confidence = scores[classID]

    
        if confidence > args["confidence"]:
        
            box = detection[0:4] * np.array([W, H, W, H])
            (centerX, centerY, width, height) = box.astype("int")

            
            x = int(centerX - (width / 2))
            y = int(centerY - (height / 2))

        
            boxes.append([x, y, int(width), int(height)])
            confidences.append(float(confidence))
            classIDs.append(classID)


idxs = cv2.dnn.NMSBoxes(boxes, confidences, args["confidence"],
    args["threshold"])

if len(idxs) > 0:
    for i in idxs.flatten():
        (x, y) = (boxes[i][0], boxes[i][1])
        (w, h) = (boxes[i][2], boxes[i][3])

        color = [int(c) for c in COLORS[classIDs[i]]]
        cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)
        text = "{}: {:.4f}".format(LABELS[classIDs[i]], confidences[i])
        cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
            0.5, color, 2)

imgbytes = cv2.imencode('.png', image)[1].tobytes()  # ditto


layout =    [
        [sg.Text('Yolo Output')],
        [sg.Image(data=imgbytes)],
        [sg.OK(), sg.Cancel()]
            ]

win = sg.Window('YOLO',
                default_element_size=(14,1),
                text_justification='right',
                auto_size_text=False).Layout(layout)
event, values = win.Read()
win.Close()

cv2.waitKey(0)

EDIT:

Based on suggestions made by @Robert Davis I have tried to modify %QT_PLUGIN_PATH% but there was no such path in my system environment.


Solution

  • It looks strange but I just made this change in the preamble:

    import PySimpleGUI as sg
    

    Instead of:

    import PySimpleGUIQt as sg
    

    And it is all well now.