一、武器刀具識別數據集介紹
【數據集】yolov8武器刀具檢測數據集 4098 張,目標檢測,包含YOLO/VOC格式標註,訓練、驗證、測試集已劃分。
數據集中標籤包含2種分類:names: ['guns', 'knife'],代表槍械、刀具。
檢測場景為道路、商場、辦公大樓、公園、槍械軍工廠等場景,可用於交通樞紐與重點場所安檢、公共場所實時安全防控、校園與社區安全保障、案件偵查與溯源輔助等。
文章底部名片或主頁私信獲取數據集和系統~
1、數據概述
武器刀具識別的重要性
武器刀具的非法攜帶與使用,是威脅公共安全的重要隱患,可能引發暴力傷害、惡性案件等嚴重後果,直接影響社會秩序與民眾安全感。傳統武器刀具檢測模式存在顯著短板:人工安檢依賴安檢人員肉眼排查,易受疲勞、經驗等因素影響,對隱蔽攜帶的刀具(如藏於包裹夾層、偽裝成日常用品的刀具)易出現漏檢;公共場所監控需人工實時盯守或事後回溯,難以在危險發生前及時識別武器刀具,響應滯後,往往錯失干預時機;在人員密集場景中,人工排查效率低下,易造成擁堵且難以實現全面覆蓋。
YOLO算法憑藉“實時目標檢測+高場景適應性”的核心優勢,為武器刀具檢測提供了技術突破:其一,可實現高幀率實時識別,無需人工干預就能快速捕捉畫面中的武器刀具,即使在人流密集的動態場景中也能穩定檢測;其二,對不同類型、形態的武器刀具(如匕首、砍刀、仿真槍等)識別精準,能有效區分武器刀具與日常用品(如指甲刀、鋼筆),避免誤判;其三,可適配安檢設備、公共場所監控、無人機巡檢等多類終端,實現全場景、無死角覆蓋,推動安全防控從“被動處置”向“主動預警”轉型,是強化公共安全保障的關鍵技術支撐。
基於YOLO的武器刀具檢測系統
- 交通樞紐與重點場所安檢升級:在機場、車站、地鐵等人員密集的交通樞紐,YOLO可與安檢設備聯動,自動識別行李、包裹中的武器刀具,發現異常立即觸發預警並標註位置,輔助安檢人員精準核查,減少人工排查的漏檢風險,同時提升安檢效率,縮短旅客等待時間。在演唱會、展會等大型活動現場,通過入口安檢與場內監控的雙重部署,形成全流程檢測防線,提前攔截危險物品。
- 公共場所實時安全防控:在商場、學校、醫院等公共場所,YOLO通過監控設備24小時不間斷檢測,一旦識別到人員攜帶武器刀具,立即將預警信息(含位置、畫面)推送至安保人員終端,助力安保團隊快速響應、精準處置,在危險行為發生前介入干預,降低傷害事件發生概率。對於突發的暴力持械行為,系統可同步鎖定持械人員位置,為警方出警提供精準指引。
- 校園與社區安全保障:校園與社區是民眾生活、學習的核心場景,安全需求尤為迫切。YOLO可部署於校園門口、教學樓走廊、社區出入口等關鍵位置,實時監測是否有人員攜帶武器刀具進入,形成安全屏障。針對未成年人可能接觸的仿真武器、管制刀具,系統能精準識別並預警,輔助學校與社區強化安全管理,為青少年營造安全的成長環境。
- 案件偵查與溯源輔助:在涉械案件偵查中,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是數據集配置文件,包含武器刀具檢測的目標分類和加載路徑。
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、數據集標註結果
4.1、數據集內容
- 場景視角:監控視角數據樣本,人員視角數據樣本;
- 標註內容:names: ['guns', 'knife'],總計2個分類;
- 圖片總量:4098 張圖片數據;
- 標註類型:含有Pascal VOC XML格式和yolo TXT格式;
5、訓練過程
5.1、導入訓練數據
下載YOLOv8項目壓縮包,解壓在任意本地workspace文件夾中。
下載YOLOv8預訓練模型,導入到ultralytics-main項目根目錄下。
在ultralytics-main項目根目錄下,創建data文件夾,並在data文件夾下創建子文件夾:Annotations、images、imageSets、labels,其中,將pascal VOC格式的XML文件手動導入到Annotations文件夾中,將JPG格式的圖像數據導入到images文件夾中,imageSets和labels兩個文件夾不導入數據。
data目錄結構如下:
data/
——Annotations/ //存放xml文件
——images/ //存放jpg圖像
——imageSets/
——labels/
整體項目結構如下所示:
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. 日誌與狀態反饋
- 前端集成日誌區,實時顯示模型加載、推理、文件上傳等操作的進度與結果。
- 檢測異常、錯誤信息及時反饋,便於排查。
- 一鍵清空日誌,筆面長期佔用內存。
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、推理效果
4.2、日誌文本框
4.3、攝像頭檢測
以紅綠燈檢測為例:
5、前端核心頁面代碼
視覺檢測系統 - Web UI
YOLO武器刀具檢測系統
當前模型:未上傳模型
原圖 / 視頻
預覽區
檢測結果
檢測結果
日誌
上傳模型
加載模型
請選擇檢測方式
圖片/視頻
攝像頭
未選擇文件
上傳文件
開啓攝像頭
關閉攝像頭
置信度
開始檢測
停止
清空日誌
<script src="/static/app.js"></script>