Voraussetzungen: Python OpenCV

Die Waffenerkennung mit Objekterkennung ist ein hilfreiches Werkzeug in Ihrem Repository. Es bildet das Rückgrat vieler fantastischer industrieller Anwendungen. OpenCV (Open Source Computer Vision Library) ist eine hochoptimierte Bibliothek mit Schwerpunkt auf Echtzeitanwendungen.

Ansatz:
 
1) Erstellung einer Haarcascade-Datei mit Waffen: Siehe Erstellung einer eigenen Haarkaskade

Von hier aus erfahren Sie, wie Sie Ihre eigene Haarcascade-Datei erstellen. Mit Ihrem einzelnen positiven Bild können Sie den Befehl opencv_createsamples verwenden, um mithilfe Ihrer negativen Bilder eine Reihe positiver Beispiele zu erstellen. Ihr positives Bild wird diesen Negativen überlagert, und es wird abgewinkelt sein und alle möglichen Dinge. Es kann tatsächlich ziemlich gut funktionieren, besonders wenn Sie wirklich nur nach einem bestimmten Objekt suchen. Wenn Sie jedoch alle Waffen identifizieren möchten, möchten Sie Tausende von einzigartigen Bildern von Waffen haben, anstatt die opencv_createsamples zu verwenden, um Proben für Sie zu generieren. Wir werden es einfach halten und nur ein positives Bild verwenden und dann eine Reihe von Samples mit unseren Negativen erstellen.

Hinweis: Für die erstellte Gun-Haar-Kaskade klicken Sie hier.



2) Erkennung von Waffen mit OpenCV

import numpy as np 
import cv2 
import imutils 
import datetime 
  
   
gun_cascade = cv2.CascadeClassifier('cascade.xml') 
camera = cv2.VideoCapture(0) 
   
firstFrame = None
gun_exist = False
   
while True: 
      
    ret, frame = camera.read() 
   
    frame = imutils.resize(frame, width = 500) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
       
    gun = gun_cascade.detectMultiScale(gray, 
                                       1.3, 5, 
                                       minSize = (100, 100)) 
       
    if len(gun) > 0: 
        gun_exist = True
           
    for (x, y, w, h) in gun: 
          
        frame = cv2.rectangle(frame, 
                              (x, y), 
                              (x + w, y + h), 
                              (255, 0, 0), 2) 
        roi_gray = gray[y:y + h, x:x + w] 
        roi_color = frame[y:y + h, x:x + w]     
   
    if firstFrame is None: 
        firstFrame = gray 
        continue
   
    
    
    cv2.putText(frame, datetime.datetime.now().strftime("% A % d % B % Y % I:% M:% S % p"), 
                (10, frame.shape[0] - 10), 
                cv2.FONT_HERSHEY_SIMPLEX, 
                0.35, (0, 0, 255), 1) 
   
    cv2.imshow("Security Feed", frame) 
    key = cv2.waitKey(1) & 0xFF
      
    if key == ord('q'): 
        break
  
        if gun_exist: 
    print("guns detected") 
else: 
    print("guns NOT detected") 
  
camera.release() 
cv2.destroyAllWindows() 

Ausgabe:

Python-Gun-Detection-OpenCV

OpenCV wird mit einem Trainer sowie einem Detektor geliefert. Wenn Sie Ihren eigenen Klassifikator für ein Objekt wie ein Auto, ein Flugzeug usw. trainieren möchten, können Sie mit OpenCV einen erstellen.

Hier beschäftigen wir uns mit der Entdeckung von Gun. Zuerst müssen wir die erforderlichen XML-Klassifizierer laden. Laden Sie dann unser Eingabebild (oder Video) im Graustufenmodus. Jetzt finden wir die Waffen im Bild. Wenn Waffen gefunden werden, werden die Positionen der erkannten Waffen als zurückgegeben Rect(x, y, w, h). Sobald wir diese Standorte erhalten haben, können wir einen ROI (Region of Interest) für die Waffe erstellen.