From 13ebaf71a4c39562bf564bde2bc2188a732c279e Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:23:27 +0000 Subject: [PATCH] Update 'KijowskiM.md' --- KijowskiM.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/KijowskiM.md b/KijowskiM.md index 27893e0..cad456a 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -79,3 +79,51 @@ Jeśli mamy już plik graficzny to ścieżka do niego jest przekazywana do klasy ### Implementacja projektu +Implementacja projektu znajduje się w klasie Neurons z pliku neurons.py. + +class Neurons: + def __init__(self): + pass + def get_output_layers(self, net): + layer_names = net.getLayerNames() + output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] + return output_layers + def whatIsIt(self, path): + image = cv2.imread(path) + scale = 0.00392 + classes = None + with open("yolov3.txt", 'r') as f: + classes = [line.strip() for line in f.readlines()] + net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") + blob = cv2.dnn.blobFromImage(image, scale, (608, 608), (0, 0, 0), True, crop=False) + net.setInput(blob) + outs = net.forward(self.get_output_layers(net)) + class_ids = [] + +W pierwszej części pliku wczytujemy wszystko zgodnie z zasadami detekcji dla tej metody. Wczytujemy naszą grafikę (ścieżka ze zmiennej path), model (yolov3.weights), nazwy klas (yolov3.txt), oraz konfigurację (yolov3.cfg). Następnie tworzymy sieć z modułu dnn (Deep Neural Networks) pakietu opencv (cv2) oraz tworzymy pustą listę na nasze przyszłe detekcje. Do listy outs pobieramy detekcje. + + for out in outs: + for detection in out: + scores = detection[5:] + class_id = np.argmax(scores) + confidence = scores[class_id] + if confidence > 0.2: + class_ids.append(class_id) + y = [classes[ids] for ids in class_ids] + +Gdy już mamy detekcje w liście outs, sprawdzamy które z nich mają prawdopodobieństwo większe niż 20% i dodajemy je do listy class_ids. Następnie zapisujemy nazwy tych klas do listy y za pomocą listy składanej. + + x = [0, 0, 0, 0, 0] + if "kruche" in y: + x[1]=1 + elif "niebezpieczne" in y: + x[4]=1 + elif "biohazard" in y: + x[4]=1 + elif "radioaktywne" in y: + x[3]=1 + elif "latwopalne" in y: + x[2]=1 + return [list(x)] + +następnie sprawdzamy detekcję i generujemy listę z jedynką na pozycji odpowiadającej odpowiedniej detekcji, którą następnie zwracamy. \ No newline at end of file