(1)摄像头/设备型号(2)是否有开放平台、是post or get连接(3)接口文档(4)headers、body/params参数和编码格式。
若有示例,参考示例编辑代码,由返回值结果确认连接成功与否
response = requests.post(url, data=json.dumps(body), headers=headers)
具体流程详细说明:
1、首先在专业平台申请账号 https://pro.andmu.cn/,因为本次开发需要专业版,普通版申请未通过;
2、在和目开放平台申请账号 https://open.andmu.cn/,其中专业版账号密码和region与第一步相同,见图1;
申请专业应用的结果和账号部分信息,见图2。获取平台开发的相关信息之后,即可以参考接口文档做二次开发了。
3、参照和目开放平台开发文档
依次获取token、设备列表、摄像机视频播放WebSDK链接等
附:
基于Token的身份验证的过程如下:
1.用户通过用户名和密码发送请求。
2.程序验证。
3.程序返回一个签名的token 给客户端。
4.客户端储存token,并且每次用于每次发送请求。
5.服务端验证token并返回数据。
问题及解决方式:
(1)直接拿网页上的参数调接口,网页可以调通,但本地出现{"resultCode":"000008","resultMsg":"数据校验失败"}
方法:打印日志对比如下。
正确:"request":"{"sig":"68a182330016b9d6957f09e8c8d07eec","operatorType":1}"}"
错误:"request":"sig=68a182330016b9d6957f09e8c8d07eec&operatorType=1"}"
更新:data=json.dumps(body).replace(" ", "")
(2)报错:{"resultCode":"000004","resultMsg":"签名验证失败“}
更新:在headers里添加token
headers = {
'content-type': 'application/json;utf-8',
"appid": appid,
"md5": md5,
"timestamp": "1569218400437",
"version": "1.0.0",
"token": token,
"signature": signature2
}
图1:图2:完成开发账号申请:
备注:研究rsa加密原理。
本次python实现rsa签名的示意代码如下:
# RSA密钥
rsakey = RSA.importKey(base64.b64decode(rsaSecret))
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(json.dumps(header).replace(" ", "").encode("utf-8"))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
示意代码:
# coding:utf-8
import requests, json
import hashlib
from Crypto.Hash import SHA
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
from Crypto.PublicKey import RSA
import base64
#(1)获取token
url1 = "https://open.andmu.cn/v3/open/api/token"
appid = '5ee2606645f345fc800ec'
secret = 'UWHAPpsG1e0'
rsaSecret = 'MIICdgIBADAN'
test = appid + secret
m = hashlib.md5()
m.update(test.encode(encoding='utf-8'))
sig = m.hexdigest()
body = {
"sig": sig,
"operatorType": 1,
}
m = hashlib.md5()
m.update(json.dumps(body).replace(" ", "").encode("utf-8"))
md5 = m.hexdigest()
header = {
"appid": appid,
"md5": md5,
"timestamp": "1569218400437",
"version": "1.0.0"
}
# RSA密钥
rsakey = RSA.importKey(base64.b64decode(rsaSecret))
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(json.dumps(header).replace(" ", "").encode("utf-8"))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
headers = {
'content-type': 'application/json;utf-8',
"appid": appid,
"md5": md5,
"timestamp": "1569218400437",
"version": "1.0.0",
"signature": signature
}
response = requests.post(url1, data=json.dumps(body).replace(" ", ""), headers=headers)
print(response)
print(response.text)
HTTP服务器 - python中http.server
参考文档:http.server
HTTPServer,是socketserver.TCPServer的子类,利用此python工具包监听相机端投递的人脸图、客流数据以及设备状态信息。
相机投递数据官方文档
官方文档:接口和数据文档
关键点包括:与相机单机连接方式为POST方式,投递数据内容为json格式。
其他介绍
AI摄像机的开发包括单机模式和平台模式,需要获取摄像机的信息包括人脸抓拍图和视频流,目前物联网公司给出的AI摄像头仅支持从平台模式拉取视频流,且需通过rtmp服务器接收。
动产质押demo时间有限,没有rtmp服务器,所以暂定使用单机模式获取抓拍人脸图。
具体流程
(1)摄像机联网配置单机模式 - 参照说明书中指导手册 or 官方网页文档
(2)获取两个工具:AI搜索工具(验证摄像机联网成功)、第三方传图demo工具(验证摄像机传图功能)
(3)利用python的HTTPServer工具包,建立服务器端口并抓取相机数据(与相机单机连接方式为POST方式,投递数据内容为json格式。
)
示例:
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
class Resquest(BaseHTTPRequestHandler):
def handler(self):
print("data:", self.rfile.readline().decode())
self.wfile.write(self.rfile.readline())
def do_POST(self):
print(self.headers)
print(self.command)
req_datas = self.rfile.read(int(self.headers['content-length'])) # 重点在此步!
print(req_datas.decode())
data = {
}
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(data).encode('utf-8'))
if __name__ == '__main__':
host = ('', 9002)
server = HTTPServer(host, Resquest)
print("Starting server, listen at: %s:%s" % host)
server.serve_forever()
设备连接onenet平台
(1)申请onenet开放平台账号(2)进入平台开发者中心,添加产品和设备(此处在NB-IoT物联网套件下添加)(3)添加设备,并验证设备连接成功
平台接口api调用
总接口文档:https://open.iot.10086.cn/doc/book/application-develop/api/api-usage.html
调用批量查询接口(抓取信息):https://open.iot.10086.cn/doc/book/application-develop/api/LwM2M/20批量查询设备最新数据.html
更新设备灵敏度接口文档:https://open.iot.10086.cn/doc/book/application-develop/api/LwM2M/10缓存命令-写设备资源.html
依照协议确定设备更新参数之后,调用onenet平台接口更新设备灵敏度。更新之后,摇动唤醒设备接收信号。