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: 
    print("guns detected") 
else: 
    print("guns NOT detected") 
  
camera.release() 
cv2.destroyAllWindows() 

Resultado:

python-gun-detecção-opencv

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.