基于AI的视频监控系统,开源!可以商业化

文摘   2024-10-15 11:24   北京  


视频监控系统,开源!完整本地 NVR,具有 AI 对象检测功能

根据开源协议  可以商业化

使用 OpenCV 和 Tensorflow 在本地为 IP 摄像机执行实时目标检测。

可以集成在很多to B项目中

源代码

http://www.gitpp.com/azimutt/frigate

demo

集成到家庭助理中

 

还带有内置 UI:

 


  • 通过自定义组件与 Home Assistant 紧密集成

  • 旨在通过仅在必要的时间和地点查找对象来最大限度地减少资源使用并最大限度地提高性能

  • 大量利用多重处理,强调实时性而不是处理每一帧

  • 使用非常低开销的运动检测来确定在何处运行对象检测

  • 使用 TensorFlow 进行对象检测在单独的进程中运行,以实现最大 FPS

  • 通过 MQTT 进行通信,以便轻松集成到其他系统中

  • 根据检测到的对象使用保留设置录制视频

  • 24/7 录制

  • 通过 RTSP 重新串流以减少与摄像机的连接数量

  • WebRTC 和 MSE 支持低延迟实时查看


要使用OpenCV和TensorFlow为本地摄像头提供实时目标检测能力,你需要遵循以下步骤:

  1. 安装必要的库
    确保你的环境中已经安装了OpenCV和TensorFlow。你可以使用pip来安装这些库:

    bash复制代码


    pip install opencv-python

    pip install tensorflow

    对于TensorFlow,你可能还想安装一个特定版本的模型库,比如tensorflow-hub,这取决于你打算使用的预训练模型。

  2. 选择并加载预训练的目标检测模型
    TensorFlow提供了多种预训练的目标检测模型,你可以从TensorFlow Hub或TensorFlow Model Zoo中选择一个。例如,你可以使用MobileNet SSD或Faster R-CNN等模型。

    python复制代码


    import tensorflow as tf

    import tensorflow_hub as hub



    # 加载预训练的模型

    model_url = 'https://tfhub.dev/tensorflow/ssd_mobilenet_v1_coco_2017_11_17/1'

    detector = hub.KerasLayer(model_url)
  3. 设置摄像头捕获
    使用OpenCV来访问你的本地摄像头,并捕获实时视频流。

    python复制代码


    import cv2



    # 打开摄像头

    cap = cv2.VideoCapture(0) # 0通常是内置摄像头的索引



    # 检查摄像头是否成功打开

    if not cap.isOpened():

    print("Error: Couldn't open the camera.")

    exit()
  4. 实时目标检测
    对于摄像头捕获的每一帧,使用加载的TensorFlow模型来检测目标。

    python复制代码


    import numpy as np



    while True:

    # 读取一帧

    ret, frame = cap.read()

    if not ret:

    break



    # 转换颜色空间(如果需要)

    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)



    # 运行目标检测

    input_tensor = tf.convert_to_tensor(np.expand_dims(frame_rgb, 0), dtype=tf.float32)

    detections = detector(input_tensor)



    # 解析检测结果

    num_detections = int(detections.shape[1])

    detections = detections[0].numpy()



    # 绘制检测框和类别标签

    for i in range(num_detections):

    score = detections[i][5:]

    if score >= 0.5: # 设置阈值

    class_id = int(detections[i][1])

    confidence = detections[i][2]

    bbox = detections[i][3:7]

    ymin, xmin, ymax, xmax = bbox

    cv2.rectangle(frame, (int(xmin * frame.shape[1]), int(ymin * frame.shape[0])),

    (int(xmax * frame.shape[1]), int(ymax * frame.shape[0])), (0, 255, 0), 2)



    # 显示结果

    cv2.imshow('Object Detection', frame)



    # 退出循环

    if cv2.waitKey(1) & 0xFF == ord('q'):

    break



    # 释放资源

    cap.release()

    cv2.destroyAllWindows()

请注意,上述代码示例是一个简化的实时目标检测框架。实际使用中,你可能需要根据你的具体需求进行调整,例如添加更多的类别标签、调整检测阈值、优化性能等。此外,请确保你的环境配置正确,并且你拥有访问摄像头的权限。

视频监控系统,开源!完整本地 NVR,具有 AI 对象检测功能



完整代码:


使用 OpenCV 和 Tensorflow 在本地为 IP 摄像机执行实时目标检测。

可以集成在很多to B项目中

源代码

http://www.gitpp.com/azimutt/frigate


剑桥评论
剑桥大学评论 全球高端视野
 最新文章