Detecção de armas usando Python-OpenCV
Pré-requisitos: Python OpenCV
A detecção de armas usando a detecção de objetos é uma ferramenta útil para ter em seu repositório. Ele forma a espinha dorsal de muitas aplicações industriais fantásticas. OpenCV (Open Source Computer Vision Library) é uma biblioteca altamente otimizada com foco em aplicativos em tempo real.
Abordagem:
1) Criação do arquivo Haarcascade de armas: Consulte Criação do próprio haarcascade
A partir daqui, você aprenderá como criar seu próprio arquivo Haarcascade. Com sua única imagem positiva, você pode usar o comando opencv_createsamples para realmente criar um monte de exemplos positivos, usando suas imagens negativas. Sua imagem positiva será sobreposta a esses negativos e será inclinada e todo tipo de coisa. Na verdade, pode funcionar muito bem, especialmente se você estiver apenas procurando por um objeto específico. Se você está procurando identificar todas as armas, entretanto, você desejará ter milhares de imagens exclusivas de armas, em vez de usar opencv_createsamples para gerar amostras para você. Vamos manter as coisas simples e usar apenas uma imagem positiva e, em seguida, criar um monte de amostras com nossos negativos.
Nota: Para a cascata The Gun haar criada - clique aqui.
2) Detecção de armas usando 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()
Resultado:
O OpenCV vem com um treinador e também um detector. Se você deseja treinar seu próprio classificador para qualquer objeto, como carro, avião, etc., você pode usar o OpenCV para criar um.
Aqui lidamos com a detecção de arma. Primeiro, precisamos carregar os classificadores XML necessários. Em seguida, carregue nossa imagem de entrada (ou vídeo) em modo de escala de cinza. Agora encontramos as armas na imagem. Se armas forem encontradas, ele retorna as posições das armas detectadas como Rect(x, y, w, h)
. Assim que conseguirmos esses locais, podemos criar um ROI (Região de interesse) para a arma.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva