Requisitos previos: Python OpenCV
La detección de armas mediante la detección de objetos es una herramienta útil para tener en su repositorio. Forma la columna vertebral de muchas fantásticas aplicaciones industriales. OpenCV (Biblioteca de visión por computadora de código abierto) es una biblioteca altamente optimizada que se enfoca en aplicaciones en tiempo real.
Enfoque:
1) Creación de un archivo Haarcascade de Armas: Consulte Creación de su propio Haarcascade
A partir de aquí, aprenderá cómo crear su propio archivo Haarcascade. Con su única imagen positiva, puede usar el comando opencv_createsamples para crear un montón de ejemplos positivos, usando sus imágenes negativas. Su imagen positiva se superpondrá a estos negativos, y estará en ángulo y todo tipo de cosas. En realidad, puede funcionar bastante bien, especialmente si solo está buscando un objeto específico. Sin embargo, si busca identificar todas las armas, querrá tener miles de imágenes únicas de armas, en lugar de usar opencv_createsamples para generar muestras para usted. Lo mantendremos simple y solo usaremos una imagen positiva, y luego crearemos un montón de muestras con nuestros negativos.
Nota: Para la cascada The Gun haar creada, haga clic aquí.
2) Detección 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 # print(datetime.date(2019)) # draw the text and timestamp on the frame 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()
Producción:
OpenCV viene con un entrenador y un detector. Si desea entrenar su propio clasificador para cualquier objeto como automóvil, aviones, etc., puede usar OpenCV para crear uno.
Aquí nos ocupamos de la detección de Gun. Primero necesitamos cargar los clasificadores XML requeridos. Luego cargue nuestra imagen de entrada (o video) en modo de escala de grises. Ahora encontramos las armas en la imagen. Si se encuentran armas, devuelve las posiciones de las armas detectadas como Rect(x, y, w, h)
. Una vez que obtengamos estas ubicaciones, podemos crear un ROI (Región de interés) para el arma.