使用Python实现深度学习模型:智能安防监控与异常检测

简介: 【7月更文挑战第26天】使用Python实现深度学习模型:智能安防监控与异常检测

介绍

在这篇教程中,我们将构建一个深度学习模型,用于智能安防监控和异常检测。我们将使用TensorFlow和Keras库来实现这一目标。通过这个教程,你将学会如何处理视频数据、构建和训练模型,并将模型应用于实际的异常检测任务。

项目结构

首先,让我们定义项目的文件结构:

security_monitoring/
│
├── data/
│   ├── train/
│   │   ├── normal/
│   │   └── abnormal/
│   └── test/
│       ├── normal/
│       └── abnormal/
│
├── model/
│   ├── __init__.py
│   ├── data_preprocessing.py
│   ├── model.py
│   └── train.py
│
├── app/
│   ├── __init__.py
│   ├── predictor.py
│   └── routes.py
│
├── templates/
│   └── index.html
│
├── app.py
└── requirements.txt

数据准备

我们需要准备训练和测试数据集,数据集应包含正常和异常的视频片段。这里我们假设数据集已经按照类别进行分类存放。

安装依赖

在开始之前,我们需要安装TensorFlow和其他依赖库。你可以使用以下命令安装:

pip install tensorflow opencv-python flask

数据加载与预处理

我们将编写一个脚本来加载和预处理视频数据。

model/data_preprocessing.py


import os
import cv2
import numpy as np
from tensorflow.keras.preprocessing.image import img_to_array

def load_data(data_dir, img_size=(64, 64)):
    data = []
    labels = []
    for category in ["normal", "abnormal"]:
        path = os.path.join(data_dir, category)
        class_num = 0 if category == "normal" else 1
        for video in os.listdir(path):
            video_path = os.path.join(path, video)
            cap = cv2.VideoCapture(video_path)
            while cap.isOpened():
                ret, frame = cap.read()
                if not ret:
                    break
                frame = cv2.resize(frame, img_size)
                frame = img_to_array(frame)
                data.append(frame)
                labels.append(class_num)
            cap.release()
    data = np.array(data, dtype="float") / 255.0
    labels = np.array(labels)
    return data, labels

构建深度学习模型

我们将使用TensorFlow和Keras库来构建一个卷积神经网络(CNN)模型。这个模型将用于视频帧的分类。

model/model.py

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

def create_model(input_shape):
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
        MaxPooling2D((2, 2)),
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(512, activation='relu'),
        Dropout(0.5),
        Dense(1, activation='sigmoid')
    ])

    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

    return model

训练模型

我们将使用训练数据来训练模型,并评估其性能。

model/train.py

from model.data_preprocessing import load_data
from model.model import create_model
from sklearn.model_selection import train_test_split

# 加载和预处理数据
data_dir = 'data/train'
data, labels = load_data(data_dir)
X_train, X_val, y_train, y_val = train_test_split(data, labels, test_size=0.2, random_state=42)

# 创建模型
input_shape = X_train.shape[1:]
model = create_model(input_shape)

# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

# 保存模型
model.save('model/security_model.h5')

构建Web应用

我们将使用Flask来构建一个简单的Web应用,展示异常检测结果。

app/init.py

from flask import Flask

app = Flask(__name__)

from app import routes

app/predictor.py

import tensorflow as tf
import cv2
import numpy as np
from tensorflow.keras.preprocessing.image import img_to_array

def load_model():
    model = tf.keras.models.load_model('model/security_model.h5')
    return model

def predict_anomaly(video_path, model, img_size=(64, 64)):
    cap = cv2.VideoCapture(video_path)
    predictions = []
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        frame = cv2.resize(frame, img_size)
        frame = img_to_array(frame) / 255.0
        frame = np.expand_dims(frame, axis=0)
        prediction = model.predict(frame)
        predictions.append(prediction[0][0])
    cap.release()
    return np.mean(predictions)

app/routes.py

from flask import render_template, request
from app import app
from app.predictor import load_model, predict_anomaly

model = load_model()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/predict', methods=['POST'])
def predict():
    if 'file' not in request.files:
        return 'No file part'
    file = request.files['file']
    if file.filename == '':
        return 'No selected file'
    if file:
        file_path = 'uploads/' + file.filename
        file.save(file_path)
        anomaly_score = predict_anomaly(file_path, model)
        return render_template('index.html', anomaly_score=anomaly_score)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>智能安防监控系统</title>
</head>
<body>
    <h1>智能安防监控系统</h1>
    <form action="/predict" method="post" enctype="multipart/form-data">
        <label for="file">上传视频:</label>
        <input type="file" id="file" name="file">
        <button type="submit">检测异常</button>
    </form>
    {% if anomaly_score is not none %}
        <h2>异常评分: {
  { anomaly_score }}</h2>
    {% endif %}
</body>
</html>

运行应用

最后,我们需要创建一个app.py文件来运行Flask应用。

from app import app

if __name__ == '__main__':
    app.run(debug=True)

总结

在这篇教程中,我们使用Python构建了一个深度学习模型,用于智能安防监控和异常检测。我们使用TensorFlow和Keras进行模型的构建和训练,并使用Flask构建了一个Web应用来展示异常检测结果。希望这个教程对你有所帮助!

目录
相关文章
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1500 27
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
774 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
机器学习/深度学习 传感器 人工智能
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在人工智能和计算机视觉的快速发展中,火灾检测与火焰识别逐渐成为智慧城市、公共安全和智能监控的重要研究方向。一个高质量的数据集往往是推动相关研究的核心基础。本文将详细介绍一个火灾火焰识别数据集,该数据集共包含 2200 张图片,并已按照 训练集(train)、验证集(val)、测试集(test) 划分,同时配有对应的标注文件,方便研究者快速上手模型训练与评估。
5037 10
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
机器学习/深度学习 人工智能 监控
河道塑料瓶识别标准数据集 | 科研与项目必备(图片已划分、已标注)| 适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化进程加快和塑料制品使用量增加,河道中的塑料垃圾问题日益严重。塑料瓶作为河道漂浮垃圾的主要类型,不仅破坏水体景观,还威胁水生生态系统的健康。传统的人工巡查方式效率低、成本高,难以满足实时监控与治理的需求。
|
机器学习/深度学习 人工智能 监控
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
坐姿标准好坏姿态数据集的发布,填补了计算机视觉领域在“细分健康行为识别”上的空白。它不仅具有研究价值,更在实际应用层面具备广阔前景。从青少年的健康教育,到办公室的智能提醒,再到驾驶员的安全监控和康复训练,本数据集都能发挥巨大的作用。
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
机器学习/深度学习 数据采集 算法
PCB电路板缺陷检测数据集(近千张图片已划分、已标注)| 适用于YOLO系列深度学习检测任务【数据集分享】
在现代电子制造中,印刷电路板(PCB)是几乎所有电子设备的核心组成部分。随着PCB设计复杂度不断增加,人工检测PCB缺陷不仅效率低,而且容易漏检或误判。因此,利用计算机视觉和深度学习技术对PCB缺陷进行自动检测成为行业发展的必然趋势。
PCB电路板缺陷检测数据集(近千张图片已划分、已标注)| 适用于YOLO系列深度学习检测任务【数据集分享】
|
机器学习/深度学习 自动驾驶 算法
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化与交通运输业的快速发展,道路基础设施的健康状况直接关系到出行安全与城市运行效率。长期高强度的使用、气候变化以及施工质量差异,都会导致道路表面出现裂缝、坑洼、井盖下沉及修补不良等缺陷。这些问题不仅影响驾驶舒适度,还可能引发交通事故,增加道路养护成本。
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
机器学习/深度学习 人工智能 监控
单车、共享单车已标注数据集(图片已划分、已标注)|适用于深度学习检测任务【数据集分享】
数据是人工智能的“燃料”。一个高质量、标注精准的单车与共享单车数据集,不仅能够推动学术研究的进步,还能为智慧交通、智慧城市的建设提供有力支撑。 在计算机视觉领域,研究者们常常会遇到“数据鸿沟”问题:公开数据集与真实业务需求之间存在不匹配。本次分享的数据集正是为了弥补这一不足,使得研究人员与工程师能够快速切入单车检测领域,加速模型从实验室走向真实应用场景。
|
机器学习/深度学习 存储 监控
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
本项目基于深度学习的YOLO框架,成功实现了城市道路损伤的自动检测与评估。通过YOLOv8模型,我们能够高效地识别和分类路面裂缝、井盖移位、坑洼路面等常见的道路损伤类型。系统的核心优势在于其高效性和实时性,能够实时监控城市道路,自动标注损伤类型,并生成损伤评估报告。
750 0
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】

推荐镜像

更多