Update 'KijowskiM.md'
This commit is contained in:
parent
f3808a146a
commit
13ebaf71a4
48
KijowskiM.md
48
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
|
||||||
|
|
||||||
|
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.
|
Loading…
Reference in New Issue
Block a user