智能安防系统搭建

硬件:

安卓手机,windows电脑

功能:

*实时监控及预览

*实时实时录像

*实时移动物体监测及预警(支持调整移动物体大小)

*实时移动物体监测拍照(支持调整移动物体大小)

系统结构图

技术拆解图

1 图像采集及推流

Android + yasea app推流

https://github.com/begeekmyfriend/yasea

2 视频流转发服务搭建

nginx服务+RTMP转发插件

http://nginx-win.ecsds.eu/download/

nginx 1.7.11.3 Gryphon.zip       

https://github.com/arut/nginx-rtmp-module

3拉流预览

VLC客户端直接拉流

电脑端直接输入rtmp://127.0.0.1:1935/live/stream

手机端输入时换成同局域网的电脑ip地址: rtmp://192.168.0.4:1935/live/stream

4 视频拉流及移动监控拍照,

python IDE PyCharm+Python 3.8.5+ opencv

下载社区版本PyCharm

https://www.jetbrains.com/pycharm/download/?section=windows

Pycharm社区版导入OpenCV(超详细)

https://blog.csdn.net/qq_41998917/article/details/134124685

拉流监控及监控实现:python

Jiankong.py

import os

import cv2

import time

# # 初始化摄像头

# cap = cv2.VideoCapture(0)

# 读取视频

cap = cv2.VideoCapture('rtmp://192.168.30.211:1935/live/stream')

# 读取第一帧

ret, frame1 = cap.read()

gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

# 定义矩形结构元素

rectangle_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

while True:

    # 读取下一帧

    ret, frame2 = cap.read()

    if not ret:

        break  # 如果视频结束,跳出循环

    gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

    # 计算两帧的差异

    diff = cv2.absdiff(gray1, gray2)

    # 二值化以突出差异

    _, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)

    thresh = cv2.dilate(thresh, rectangle_kernel, iterations=2)  # 膨胀操作,使轮廓更清晰

    # 找出轮廓

    contours,hie= cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 识别面积最大的轮廓

    for c in contours:

        if cv2.contourArea(c) < 1000: # 移动区域侦测,可以调节识别灵敏度

            print("移动区域大小1 : " + str(cv2.contourArea(c)))

            continue

        else:

            if contours:

                largest_contour = max(contours, key=cv2.contourArea)

                x, y, w, h = cv2.boundingRect(largest_contour)

                cv2.rectangle(frame2, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 用绿色矩形框出

                print("发现移动物体" + str(cv2.contourArea(c)))

                #保存照片

                # 画出矩形框架,返回值x,y是矩阵左上点的坐标,w,h是矩阵的宽和高

                (x, y, w, h) = cv2.boundingRect(c)

                # rectangle(原图,(x,y)是矩阵的左上点坐标,(x+w,y+h)是矩阵的右下点坐标,(0,255,0)是画线对应的rgb颜色,2是所画的线的宽度)

                cv2.rectangle(frame2, (x, y), (x + w, y + h), (0, 255, 0), 2)

                # putText 图片中加入文字

                cv2.putText(frame2, "now time: {}".format(str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) ), (10, 20),

                            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

                print("出现目标物,请求核实")

                # 保存图像

                save_path = 'd:/photos'

                if not os.path.exists(save_path):

                    os.makedirs(save_path)

                timeArray = time.localtime()

                timeStr = time.strftime("%Y-%m-%d-%H-%M-%S", timeArray)

                print("time stamp : "+timeStr)

                filename = "d:/photos/" +str(timeStr) + ".jpg"

                cv2.imwrite(filename, frame2)

                print("saved : "+filename)

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

                    break

                # 显示结果

                thresh_img = cv2.merge([thresh, thresh, thresh])

                cv2.imshow('Difference', cv2.hconcat([frame2, thresh_img]))

                # 准备下一次迭代

                gray1 = gray2

                # 按'q'退出

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

                    break

# 释放资源

cap.release()

cv2.destroyAllWindows()

5 视频实时录像

Ffmpeg拉流,定时10秒录像一个

ffmpeg -i rtmp://127.0.0.1:1935/live/stream -c:v copy -f segment -segment_time 10 -reset_timestamps 1 -strftime 1 output_%%Y-%%m-%%d_%%H-%%M-%%S.mp4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值