Waffenerkennung mit Python-OpenCV
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:
(
"guns detected"
)
else
:
(
"guns NOT detected"
)
camera.release()
cv2.destroyAllWindows()
Ausgabe:
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.