📜  使用 Python-OpenCV 进行枪支检测

📅  最后修改于: 2022-05-13 01:54:29.178000             🧑  作者: Mango

使用 Python-OpenCV 进行枪支检测

先决条件: Python OpenCV

使用对象检测的枪支检测是您存储库中的一个有用工具。它构成了许多奇妙的工业应用的支柱。 OpenCV(开源计算机视觉库)是一个高度优化的库,专注于实时应用程序。

方法: 1) Guns的Haarcascade文件的创建:参考创建自己的haarcascade

从这里,您将了解如何创建自己的 Haarcascade 文件。使用您的单个正面图像,您可以使用 opencv_createsamples 命令使用您的负面图像实际创建一堆正面示例。您的正面形象将叠加在这些底片上,并且会倾斜和各种各样的东西。它实际上可以很好地工作,特别是如果你真的只是在寻找一个特定的对象。但是,如果您要识别所有枪支,您将希望拥有数千张独特的枪支图像,而不是使用 opencv_createsamples 为您生成样本。我们将保持简单,只使用一个正面图像,然后用我们的底片创建一堆样本。

注意:对于创建的 The Gun haar 级联 - 单击此处。

2) 使用 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()

输出:

python-枪检测-opencv

OpenCV 带有一个训练器和一个检测器。如果您想为任何对象(如汽车、飞机等)训练自己的分类器,您可以使用 OpenCV 创建一个。

这里我们处理Gun的检测。首先,我们需要加载所需的 XML 分类器。然后以灰度模式加载我们的输入图像(或视频)。现在我们在图像中找到了枪。如果找到枪,它会将检测到的枪的位置返回为Rect(x, y, w, h) 。一旦我们得到这些位置,我们就可以为枪创建一个 ROI(感兴趣区域)。