一、武器刀具識別數據集介紹

【數據集】yolov8武器刀具檢測數據集 4098 張,目標檢測,包含YOLO/VOC格式標註,訓練、驗證、測試集已劃分

數據集中標籤包含2種分類names: ['guns', 'knife'],代表槍械、刀具

檢測場景為道路、商場、辦公大樓、公園、槍械軍工廠等場景,可用於交通樞紐與重點場所安檢、公共場所實時安全防控、校園與社區安全保障、案件偵查與溯源輔助等。

文章底部名片或主頁私信獲取數據集和系統~

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_深度學習

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_02

1、數據概述

武器刀具識別的重要性

武器刀具的非法攜帶與使用,是威脅公共安全的重要隱患,可能引發暴力傷害、惡性案件等嚴重後果,直接影響社會秩序與民眾安全感。傳統武器刀具檢測模式存在顯著短板:人工安檢依賴安檢人員肉眼排查,易受疲勞、經驗等因素影響,對隱蔽攜帶的刀具(如藏於包裹夾層、偽裝成日常用品的刀具)易出現漏檢;公共場所監控需人工實時盯守或事後回溯,難以在危險發生前及時識別武器刀具,響應滯後,往往錯失干預時機;在人員密集場景中,人工排查效率低下,易造成擁堵且難以實現全面覆蓋。

YOLO算法憑藉“實時目標檢測+高場景適應性”的核心優勢,為武器刀具檢測提供了技術突破:其一,可實現高幀率實時識別,無需人工干預就能快速捕捉畫面中的武器刀具,即使在人流密集的動態場景中也能穩定檢測;其二,對不同類型、形態的武器刀具(如匕首、砍刀、仿真槍等)識別精準,能有效區分武器刀具與日常用品(如指甲刀、鋼筆),避免誤判;其三,可適配安檢設備、公共場所監控、無人機巡檢等多類終端,實現全場景、無死角覆蓋,推動安全防控從“被動處置”向“主動預警”轉型,是強化公共安全保障的關鍵技術支撐。

基於YOLO的武器刀具檢測系統

  1. 交通樞紐與重點場所安檢升級:在機場、車站、地鐵等人員密集的交通樞紐,YOLO可與安檢設備聯動,自動識別行李、包裹中的武器刀具,發現異常立即觸發預警並標註位置,輔助安檢人員精準核查,減少人工排查的漏檢風險,同時提升安檢效率,縮短旅客等待時間。在演唱會、展會等大型活動現場,通過入口安檢與場內監控的雙重部署,形成全流程檢測防線,提前攔截危險物品。
  2. 公共場所實時安全防控:在商場、學校、醫院等公共場所,YOLO通過監控設備24小時不間斷檢測,一旦識別到人員攜帶武器刀具,立即將預警信息(含位置、畫面)推送至安保人員終端,助力安保團隊快速響應、精準處置,在危險行為發生前介入干預,降低傷害事件發生概率。對於突發的暴力持械行為,系統可同步鎖定持械人員位置,為警方出警提供精準指引。
  3. 校園與社區安全保障:校園與社區是民眾生活、學習的核心場景,安全需求尤為迫切。YOLO可部署於校園門口、教學樓走廊、社區出入口等關鍵位置,實時監測是否有人員攜帶武器刀具進入,形成安全屏障。針對未成年人可能接觸的仿真武器、管制刀具,系統能精準識別並預警,輔助學校與社區強化安全管理,為青少年營造安全的成長環境。
  4. 案件偵查與溯源輔助:在涉械案件偵查中,YOLO可快速檢索案發現場及周邊監控錄像,自動定位出現武器刀具的畫面片段,提取持械人員特徵與行動軌跡,減少警方人工回看海量視頻的工作量,縮短案件偵查週期,為案件破獲提供關鍵線索與證據支持。

該數據集含有 4098 張圖片,包含Pascal VOC XML格式和YOLO TXT格式,用於訓練和測試道路、商場、辦公大樓、公園、槍械軍工廠等場景進行武器刀具識別

圖片格式為jpg格式,標註格式分別為:

YOLO:txt

VOC:xml

數據集均為手工標註,保證標註精確度。

2、數據集文件結構

guns-knife/

——test/

————Annotations/

————images/

————labels/

——train/

————Annotations/

————images/

————labels/

——valid/

————Annotations/

————images/

————labels/

——classes.txt

——data.yaml

  • 該數據集已劃分訓練集樣本,分別是:test目錄(測試集)、train目錄(訓練集)、valid目錄(驗證集);
  • Annotations文件夾為Pascal VOC格式的XML文件 ;
  • images文件夾為jpg格式的數據樣本;
  • labels文件夾是YOLO格式的TXT文件;
  • classes.txt是yolo格式的標籤名稱
  • data.yaml是數據集配置文件,包含武器刀具檢測的目標分類和加載路徑。

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_03

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_xml_04


【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_xml_05

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_06

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_07

Annotations目錄下的xml文件內容如下:

driving_annotation_datasetarmas-23-_jpg.rf.6e8b0bb60cbdf978a59abb82118c52ba.jpg6406403
			gunsUnspecified0014941537332

labels目錄下的txt文件內容如下:

0 0.50703125 0.21875 0.09375 0.06953125

3、數據集適用範圍 

  • 目標檢測場景,監控識別
  • yolo訓練模型或其他模型
  • 道路、商場、辦公大樓、公園、槍械軍工廠
  • 可用於交通樞紐與重點場所安檢、公共場所實時安全防控、校園與社區安全保障、案件偵查與溯源輔助等。

4、數據集標註結果 

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_08

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_深度學習_09

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_深度學習_10

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_11

4.1、數據集內容 

  1. 場景視角:監控視角數據樣本,人員視角數據樣本
  2. 標註內容:names: ['guns', 'knife'],總計2個分類;
  3. 圖片總量:4098 張圖片數據;
  4. 標註類型:含有Pascal VOC XML格式和yolo TXT格式;

5、訓練過程

5.1、導入訓練數據

下載YOLOv8項目壓縮包,解壓在任意本地workspace文件夾中。

下載YOLOv8預訓練模型,導入到ultralytics-main項目根目錄下。

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_xml_12


ultralytics-main項目根目錄下,創建data文件夾,並在data文件夾下創建子文件夾:Annotations、images、imageSets、labels,其中,將pascal VOC格式的XML文件手動導入到Annotations文件夾中,將JPG格式的圖像數據導入到images文件夾中,imageSets和labels兩個文件夾不導入數據。

data目錄結構如下:

data/

——Annotations/   //存放xml文件

——images/          //存放jpg圖像

——imageSets/

——labels/

整體項目結構如下所示:

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_13


5.2、數據分割

首先在ultralytics-main目錄下創建一個split_train_val.py文件,運行文件之後會在imageSets文件夾下將數據集劃分為訓練集train.txt、驗證集val.txt、測試集test.txt,裏面存放的就是用於訓練、驗證、測試的圖片名稱。

import os
import random
trainval_percent = 0.9
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w')
ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')
for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

5.3、數據集格式化處理

在ultralytics-main目錄下創建一個voc_label.py文件,用於處理圖像標註數據,將其從XML格式(通常用於Pascal VOC數據集)轉換為YOLO格式。

convert_annotation函數

  • 這個函數讀取一個圖像的XML標註文件,將其轉換為YOLO格式的文本文件。
  • 它打開XML文件,解析樹結構,提取圖像的寬度和高度。
  • 然後,它遍歷每個目標對象(object),檢查其類別是否在classes列表中,並忽略標註為困難(difficult)的對象。
  • 對於每個有效的對象,它提取邊界框座標,進行必要的越界修正,然後調用convert函數將座標轉換為YOLO格式。
  • 最後,它將類別ID和歸一化後的邊界框座標寫入一個新的文本文件
import xml.etree.ElementTree as ET
import os
from os import getcwd
sets = ['train', 'val', 'test']
classes = ['guns', 'knife'] # 根據標籤名稱填寫類別
abs_path = os.getcwd()
print(abs_path)
def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return x, y, w, h
def convert_annotation(image_id):
    in_file = open('data/Annotations/%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('data/labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text),
             float(xmlbox.find('xmax').text),
             float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        b1, b2, b3, b4 = b
        # 標註越界修正
        if b2 > w:
            b2 = w
        if b4 > h:
            b4 = h
        b = (b1, b2, b3, b4)
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
for image_set in sets:
    if not os.path.exists('data/labels/'):
        os.makedirs('data/labels/')
    image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()
    list_file = open('data/%s.txt' % (image_set), 'w')
    for image_id in image_ids:
        list_file.write(abs_path + '/data/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

 5.4、修改數據集配置文件

在ultralytics-main目錄下創建一個data.yaml文件

train: data/train.txt
val: data/val.txt
test: data/test.txt
nc: 2
names: ['guns', 'knife']

5.5、執行命令

執行train.py

model = YOLO('yolov8s.pt')
results = model.train(data='data.yaml', epochs=200, imgsz=640, batch=16, workers=0)

也可以在終端執行下述命令:

yolo train data=data.yaml model=yolov8s.pt epochs=200 imgsz=640 batch=16 workers=0 device=0

5.6、模型預測 

你可以選擇新建predict.py預測腳本文件,輸入視頻流或者圖像進行預測。

代碼如下:

import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO("./best.pt") # 自定義預測模型加載路徑
# Open the video file
video_path = "./demo.mp4" # 自定義預測視頻路徑
cap = cv2.VideoCapture(video_path)
# Get the video properties
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # Be sure to use lower case
out = cv2.VideoWriter('./outputs.mp4', fourcc, fps, (frame_width, frame_height)) # 自定義輸出視頻路徑
# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()
    if success:
        # Run YOLOv8 inference on the frame
        # results = model(frame)
        results = model.predict(source=frame, save=True, imgsz=640, conf=0.5)
        results[0].names[0] = "道路積水"
        # Visualize the results on the frame
        annotated_frame = results[0].plot()
        # Write the annotated frame to the output file
        out.write(annotated_frame)
        # Display the annotated frame (optional)
        cv2.imshow("YOLOv8 Inference", annotated_frame)
        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break
# Release the video capture and writer objects
cap.release()
out.release()
cv2.destroyAllWindows()

圖片推理,代碼如下:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO('models/best.pt')
    model.predict(source='test_pic',
                  imgsz=640,
                  save=True,
                  conf=0.25
                  )

也可以直接在命令行窗口或者Annoconda終端輸入以下命令進行模型預測:

yolo predict model="best.pt" source='demo.jpg'

6、獲取數據集 

文章底部名片或主頁私信獲取數據集或檢測系統~

二、YOLO武器刀具檢測系統

1、功能介紹

1. 模型管理

支持自定義上傳模型文件,一鍵加載所選模型,基於 YOLO 框架進行推理。

2. 圖片檢測

    - 支持上傳本地圖片文件,自動完成格式校驗。

    - 對上傳圖片進行目標檢測,檢測結果以帶有邊框和標籤的圖片形式返回並展示。

    - 檢測結果可下載保存。

3. 視頻檢測與實時流

    - 支持上傳本地視頻文件,自動完成格式校驗。

    - 對視頻逐幀檢測,檢測結果通過 MJPEG 流實時推送到前端頁面,用户可邊看邊等。

    - 支持攝像頭實時檢測(如有接入攝像頭)。

4. 置信度閾值調節

    - 前端可實時調整檢測置信度閾值,動態影響檢測結果。

    - 閾值調整後,後端推理自動應用新閾值,無需重啓。

5. 日誌與狀態反饋

    - 前端集成日誌區,實時顯示模型加載、推理、文件上傳等操作的進度與結果。

    - 檢測異常、錯誤信息及時反饋,便於排查。

    - 一鍵清空日誌,筆面長期佔用內存。

  

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_xml_14

2、創建環境並安裝依賴:

conda create -n ultralytics-env python=3.10
conda activate ultralytics-env
pip install -r requirements.txt

3、啓動項目

python app.py

打開瀏覽器訪問:http://localhost:5000

4、效果展示

4.1、推理效果

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_深度學習_15

      

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_數據集_16

4.2、日誌文本框

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_xml_17

4.3、攝像頭檢測

以紅綠燈檢測為例:

【完整源碼+數據集】武器刀具數據集,yolov8武器刀具檢測數據集 4098 張,武器刀具識別數據集,安防監控武器刀具識別系統實戰教程 - 教程_深度學習_18

5、前端核心頁面代碼

視覺檢測系統 - Web UI

        
        
            
YOLO武器刀具檢測系統
                當前模型:未上傳模型
            
                    
                        原圖 / 視頻
                        預覽區
                    
                    
                        檢測結果
                        檢測結果
                    
                
                
                        日誌
                    
                    
                        
                    
                

        
        上傳模型
                    
                加載模型
            請選擇檢測方式
                
                     圖片/視頻
                     攝像頭
                
                
                    
                        未選擇文件
                    
                    
                    上傳文件
                        
                
                
                    開啓攝像頭
                    
                        
                            關閉攝像頭
                        
                    
                
                
                    置信度
                        
                
            開始檢測
                停止
                清空日誌
            

    <script src="/static/app.js"></script>