怎样用监控摄像头通过交换机接入云平台
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用监控摄像头通过交换机接入云平台相关的知识,希望对你有一定的参考价值。
监控摄像头通过交换机直接汇聚后接入外网,自己有一个云平台,怎样设置将数据传到云平台,用电脑或者手机上网查看云平台的视频信息,不使用硬盘录像机!
目前各家都在推出云视频摄像机,EasyDarwin开源社区也推出了EasyCamera云摄像机,大概的工作原理就是摄像机始终会与公网的云监控平台建立连接,将摄像机时时刻刻的音视频数据、报警数据、抓拍数据等都上送到云端,进行存储、录像、分析、与回放,这样很大程度上突破了网络的局限性,不论是摄像机在内网,还是暴露在公网,只要摄像机能够跟平台建立连接,用户就可以通过平台对摄像机进行实时音视频查看、状态查询、录像检索与回放等功能,平台既可以部署在公网,又可以部署在内网作为私有云平台,都可以很好地完成所需的功能;目前各家都在推出云视频摄像机,EasyDarwin开源社区也推出了EasyCamera云摄像机,大概的工作原理就是摄像机始终会与公网的云监控平台建立连接,将摄像机时时刻刻的音视频数据、报警数据、抓拍数据等都上送到云端,进行存储、录像、分析、与回放,这样很大程度上突破了网络的局限性,不论是摄像机在内网,还是暴露在公网,只要摄像机能够跟平台建立连接,用户就可以通过平台对摄像机进行实时音视频查看、状态查询、录像检索与回放等功能,平台既可以部署在公网,又可以部署在内网作为私有云平台,都可以很好地完成所需的功能; 参考技术A 不知道,你可以到电脑维修店肯定知道 参考技术B 这个必须走RTMP或RTSP协议。RTSP是拉流协议,也就是你必须给每台摄像机一个固定的地址,让平台向这台摄像机拉流,这显然不现实,所以还是走RTMP协议,那么监控摄像头和你的云平台都支持RTMP协议才行,叁陆伍视讯公司的监控摄像头支持RTMP协议,你的云平台如果支持RTMP协议,那么就可以生成一些RTMP推流地址给到支持RTMP协议的摄像机,把这个推流地址填写到摄像机系统并且保存,然后连接到路由器即可向你的云平台推送音视频流。至于手机或者电脑查看这个云平台的视频流,那就需要你开发一个播放器去取你云平台的视频流了。 参考技术C 传统监控行业里面,监控客户端、服务器端,设备端都在一个内网里面,搞个电脑开个监控终端,顶多再配一个NVR做一做摄像机的录像存储、上个电视墙(个人感觉这功能除了面子工程,没啥实用的,还特费电!),而且现在的大部分监控现场还保留着目前的格局,小到一个公司范围内的监控,再到一个园区、一个仓库监控、一个农业园林监控、一个养殖场监控、一个小区的监控,大到电力、交通行业的大局域网监控,这种监控场景下,客户终端出不了监控的内网,无法做到公网监控与录像回放,虽然现在也有一些个别大的监控项目,会搞一个网关机器,将视频服务映射到公网,但始终都是小规模使用,上不了量,成不了监控云平台;
解决思路
目前各家都在推出云视频摄像机,EasyDarwin开源社区也推出了EasyCamera云摄像机,大概的工作原理就是摄像机始终会与公网的云监控平台建立连接,将摄像机时时刻刻的音视频数据、报警数据、抓拍数据等都上送到云端,进行存储、录像、分析、与回放,这样很大程度上突破了网络的局限性,不论是摄像机在内网,还是暴露在公网,只要摄像机能够跟平台建立连接,用户就可以通过平台对摄像机进行实时音视频查看、状态查询、录像检索与回放等功能,平台既可以部署在公网,又可以部署在内网作为私有云平台,都可以很好地完成所需的功能;
类似于EasyCamera这种云摄像机,我们开发一种云NVR,云NVR一方面可以跟内网摄像机通过Onvif、RTSP、SDK等形式多通道对接各家各种类型的摄像机型号,另一方面云NVR以设备的形式连接到公网云平台:上报各个通道摄像机的信息、快照、报警,接收云端云视频平台对通道摄像机进行PTZ、对讲、复位等控制,同时根据云端请求实时推送通道摄像机的直播流到云端进行云监控和云存储;
EasyNVR 云NVR
EasyNVR
EasyNVR设备就是上面描述的这种云NVR设备,他可以运行在Windows、Linux、ARM等各种平台上,对接公网的EasyDarwin开源流媒体云平台,这样就能够在不变动已经稳定运行的老监控现场,实现云监控的需求了; 参考技术D
用网线连接即可直通线。如果有多台网络摄像机,就需要加一个交换机了。先要保证有无线路由器,将无线摄像机无线路由器连接。
海康威视硬盘录像机远程监控设置:
1、首先打开远程控制软件,显示分辨率是可以调节的。
2、初始密码均是1234567,可以自己更改密码,其他参数如无意外尽量不要改动,点击下一步。
3、一般来讲,第一次使用要对你的硬盘进行初始化即格式化。
基于阿里云物联网平台实现的简易出入监控
本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景
场景
在公司大门入口处布点树莓派和红外感应,实现出入口人员出入时,自动拍照并上送钉钉群机器人
准备
物料准备
树莓派
HC-SR501 人体红外感应器
树莓派摄像头
母对母杜邦线三根
阿里云环境准备
物联网平台
对象存储OSS
函数计算
日志服务(可选)
操作步骤
1 云端开发
1.1 物联网平台
登录阿里云控制台,进入物联网平台控制面板
1.1.1 新建产品
进入设备管理,创建产品,选择基础版或高级版都可以,本实例使用基础版就可以满足基本要求。
系统会自动创建3个Topic,我们需要使用 /ProductName/${deviceName}/update,作为设备告警消息的上送的Topic。
1.1.2 设备管理
在产品中新增设备,并获得设备的3元组,在2.3节的设备代码的编写时需要使用此3元组。设备三元组是设备的唯一标示
1.1.3 新建规则引擎
设置规则引擎的意义在于,可以将设备上送的消息数据,通过配置转发规则将处理后的数据转发到阿里云其他服务,例如RDS、TBS和函数计算等等。我们需要注意的是从设备端到规则引擎处理后的JSON数据格式的变化,下图中是基础版的演变过程:
我们在设备端消息上送定义的JSON的格式是:
{
‘photo‘: ‘xxxxxxx.jpg‘
}
新创建一个规则,数据格式选择JSON。编写处理数据的SQL
SELECT deviceName() deviceName, photo FROM "/a1O4b4XcICc/+/update"
配置完成后,我们可以模拟调试一下,检查规则是否正确:
接着,配置数据转发,把数据转发到FC函数计算中。分别选择在1.3步骤中创建好的服务和函数。
1.2 对象存储
由于设备端拍摄的照片需要在钉钉中展示,因此把照片存储在OSS上是一个解决方案。
1.2.1 新建bucket
新建一个bucket用于存储设备上送的照片。读写权限选择公共读
然后在bucket中创建photo目录。
1.3 函数计算
经过物联网平台规则引擎转发过来的JSON数据,我们通过建立函数,把它转发到钉钉机器人接口上,实现钉钉群中的消息通知
1.3.1 新建服务
新创建服务,如果需要记录和回溯函数执行的日志,则需要开通日志服务,配置日志仓库。
1.3.2 新建函数
使用空白模版新建函数,不需要触发器,运行环境选择python2.7
1.3.3 函数代码
-- coding: utf-8 --
import logging
import json
import requests
钉钉消息发送实现
def post(data):
webhook_url=‘https://oapi.dingtalk.com/robot/send?access_token=${Token}‘ #钉钉群机器人的webhook的URL
headers = {‘Content-Type‘: ‘application/json; charset=utf-8‘}
post_data = json.dumps(data)
try:
response = requests.post(webhook_url, headers=headers, data=post_data)
logging.info(‘Send success‘)
except requests.exceptions.HTTPError as exc:
logging.error("Send Error,HTTP error: %d, reason: %s" % (exc.response.status_code, exc.response.reason))
raise
except requests.exceptions.ConnectionError:
logging.error("Send Error,HTTP connection error!")
raise
else:
result = response.json()
logging.info(‘Send Error:%s‘ % result)
if result[‘errcode‘]:
error_data = {"msgtype": "text", "text": {"content": "Send Error, reason:%s" % result[‘errmsg‘]}, "at": {"isAtAll": True}}
logging.error("Send Error:%s" % error_data)
requests.post(webhook_url, headers=headers, data=json.dumps(error_data))
return result
发送钉钉markdown消息
def post_markdown(title,text):
data = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": text
},
"at": {
"atMobiles": [],
"isAtAll": False
}
}
post(data)
函数计算入口
def handler(event, context):
logger = logging.getLogger()
evt = json.loads(event)
#OSS endpoint url
post_markdown(‘告警‘,‘‘ % evt.get(‘photo‘,‘‘))
logger.info(‘photo name is %s‘, evt.get(‘photo‘,‘‘))
return ‘OK‘
2 设备端开发
HC-SR501模块感应到有人移动时,会输出高电平,则触发摄像头拍照,并将照片文件存储到OSS,同时发送消息到IOT平台的/ProductName/${deviceName}/update消息队列中
2.1 硬件安装
连接好摄像头
将HC-SR501 人体红外感应器的vcc引脚接5v,也就是pin4,I/O引脚接pin18,GND引脚接地pin6
2.2 环境准备
我们在树莓派上使用python2.7作为开发语言。
- pip install aliyun-python-sdk-iot-client
- pip install oss2
- mkdir py-demo (项目程序文件夹)
- cd py-demo
- mkdir photo (本地照片临时目录)
- vim monitor.py
2.3 代码开发
monitor.py 内容如下:
-- coding: utf-8 --
import json
import uuid
import logging
from time import sleep
from picamera import PiCamera
import RPi.GPIO as GPIO
import oss2
import aliyunsdkiotclient.AliyunIotMqttClient as iot
参数定义
options = {
‘productKey‘: ‘${productKey}‘, # 设备标识三元组
‘deviceName‘: ‘${deviceName}‘, # 设备标识三元组
‘deviceSecret‘: ‘${deviceSecret}‘, # 设备标识三元组
‘port‘: 1883, # iot mqtt port
‘host‘: ‘iot-as-mqtt.cn-shanghai.aliyuncs.com‘, # iot mqtt endpoint
‘endpoint‘: ‘http://oss-cn-hangzhou.aliyuncs.com‘, # oss endpoint
‘ak‘: ‘${ak}‘,
‘sk‘: ‘${sk}‘,
‘bucket‘: ‘${bucket}‘, # oss bucket
‘ir_pin‘: 24 # 人体红外感应器设置读取针脚标号
}
topic = ‘/‘ + options[‘productKey‘] + ‘/‘ + options[‘deviceName‘] + ‘/user/test‘
拍照存oss,并发送通知
def takephoto2oss(client):
#拍照
photo_filename = str(uuid.uuid1()) + ".jpg"
print(‘take photo :‘ + photo_filename)
camera.capture(‘photo/‘ + photo_filename)
#存OSS
print(‘save photo to oss :‘ + photo_filename)
bucket.put_object_from_file(
‘photo/‘ + photo_filename, ‘photo/‘ + photo_filename)
#消息上送
payload_json = {
‘photo‘: photo_filename
}
print(‘send data to iot server: ‘ + str(payload_json))
client.publish(topic, payload = str(payload_json))
def on_connect(client, userdata, flags_dict, rc):
print("Connected with result code " + str(rc))
def on_disconnect(client, userdata, flags_dict, rc):
print("Disconnected.")
if name == ‘main‘:
GPIO 初始化
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(options[‘ir_pin‘], GPIO.IN)
# 摄像头 初始化
camera = PiCamera()
camera.resolution = (640, 480)
camera.vflip = True
camera.hflip = True
# OSS 初始化
auth = oss2.Auth(options[‘ak‘], options[‘sk‘])
bucket = oss2.Bucket(auth, options[‘endpoint‘], options[‘bucket‘])
# IOT Mqtt 初始化
client = iot.getAliyunIotMqttClient(options[‘productKey‘], options[‘deviceName‘], options[‘deviceSecret‘], secure_mode = 3)
client.on_connect = on_connect
client.connect(host=options[‘productKey‘] + ‘.‘ + options[‘host‘], port=options[‘port‘], keepalive = 60)
while True:
# 当高电平信号输入时报警
if GPIO.input(options[‘ir_pin‘]) == True:
print " Someone is coming!"
takephoto2oss(client)
else:
continue
sleep(3)
3 测试运行
3.1 设备端运行
在py-demo文件夹下运行
python monitor.py
3.2 云端查看上送消息
进入设备界面,观察设备状态
在设备的Topic列表中,也可以看到发布的消息个数
高级版的产品,还提供了消息日志,而本例中的产品是基础版,并无此功能。
3.3 钉钉群机器人结果
当有人出入门口的时候,钉钉群就可以收到机器人的消息推送
3.4 后续完善
如果大家有兴趣,还可以进一步结合阿里云的人脸识别服务,再配合继电器,实现人员考勤和出入门禁的功能
总结
通过阿里云物联网平台,结合阿里云提供的其他产品和服务,使用者可以快速地构建一套基于云边端一体的IOT产品,开发者只需关注业务层面的开发,而不用再花太多的精力在底层和通讯上,大大减少了开发周期,实现了产品的快速研发和迭代,节约了开发成本。
以上是关于怎样用监控摄像头通过交换机接入云平台的主要内容,如果未能解决你的问题,请参考以下文章