度目视频分析盒子-解决方案-配合门禁使用介绍

度目视频分析盒子-案例第一篇

百度的出品的度目视频分析盒子优点:

  • 价格绝对便宜,3559AV100(4T算力)的价格从500涨到3000多,度目视频分析盒子没有涨价这个要送一波广告:度目视频分析盒子购买链接
  • 检测人脸和抓拍效果很好,抓拍10ms,误抓拍率低
  • 识别效果很好,速度也非常快,应该还有待提升(我还没遇见过)
  • 视频盒子外壳工艺很不错,有点Mac意思
  • 6路基本满帧、8路15帧的样子(性能不错呦)

百度视频分析盒子的不足:主要是易用性问题

  • 没有支持web的配置,连接显示虽然展示效果很Nice,但是实际部署就有点鸡肋了
  • 只有鼠标的配置,不支持键盘,这个添加URL是真的有点恐怖(心惊胆战)

完整的视频分析盒子连接继电器控制闸机操作指南

  • 物料准备
物料名称价格购买链接功能备注
视频分析会3999视频分析盒子人脸识别和抓拍核心物料
交换机700华三poe供电和网络传输华三路由器作为华为当年的子公司质量有保障
继电器20fu植本段内容 z 7 R t c b P G l j x z7RtcbPGljx z7RtcbPGljx打楷τao寶【时间继电器模块延时启动闭合断开倒计时通电开关3.3V5V12V24V】用于接收IO输出控制开门淘宝一大堆这里推荐一个合理的,这里注意要买3.3V或者5V的,因为视频盒子的IO输出是3.3v
摄像头--传输视频流市面上普通摄像头就有可以,这里不做推荐
网线-连接桥梁
  • 整体思路

1.人脸识别通过http接口上报给server(视频盒子主动上报)
2.之后server接受到人脸识别结果控制http发送一个IO请求
3.IO输出的是3.3V的电压数字信号(带不了负载,所以需要继电器)
4.通过继电器接受到3.3V电压,控制继电器闭合
完事
友情提示:测试阶段发送http的IO请求,用万用表测试一下是否3.3v电压
视频分析盒子继电器度目视频分析盒子,里面可以直接配置识别即GPIO输出的信号位和时长、蜂鸣器的控制(视频分析盒子内置蜂鸣器)

这个完全解决,不用server接收到识别的人脸再去控制io造成的网络延迟(极大方便用户作为解决方案)

人脸识别即通过
轮巡,当人脸识别时候,所选择的通道会直接扩展为全屏,突出抓拍人脸的所在位置。
轮巡

http的上传心跳、注册、人脸图及原图、IO控制代码示例

需要安装
1.pydantic
2.fastapi

  • 人脸上报代码块(仅供参考)
# -*- coding: utf-8 -*-
# @time    : 2020/06/03

 
from pydantic import BaseModel
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
import time
 
app = FastAPI()

class SubDeviceInfo_Capture(BaseModel):
    SubDeviceIP: str = None
    SubDeviceUUID: str = None


class DeviceInfo_Capture(BaseModel):
    DeviceId: str 
    DeviceUUID: str 
    DeviceMac: str 
    DeviceIP: str 
    ChannelNo: int 
    SubDeviceInfo: SubDeviceInfo_Capture = None

class CaptureInfo_Capture(BaseModel):
    SendTime: str 
    CaptureTime: str 
    CaptureCount: int    
    FacePicture: str = None
    BodyPicture: str = None
    BackgroundPicture: str = None

class FaceInfo_Capture(BaseModel):
    FaceId: int = None
    FaceQuality: int = None
    FacePosition: str = None

class Attribute_Capture(BaseModel):
    Age: int = None
    Gender: int = None
    Glasses: int = None
    Mask: int = None
    Beard: int = None
    Race: int = None

class PersonExtension_Capture(BaseModel):
    PersonCode1: str = None
    PersonCode2: str = None
    PersonCode3: str = None
    PersonReserveName: str = None
    PersonParam1: int = None
    PersonParam2: int = None
    PersonParam3: int = None
    PersonParam4: int = None
    PersonParam5: int = None
    PersonData1: str = None
    PersonData2: str = None
    PersonData3: str = None
    PersonData4: str = None
    PersonData5: str = None


class PersonInfo_Capture(BaseModel):
    PersonId: str = None
    PersonName: str = None
    Sex: int = None
    IDCard: str = None
    Nation: str = None
    Birthday: str = None
    Phone: str = None
    Address: str = None
    SaveTime: str = None
    LimitTime: int = None
    StartTime: str = None
    EndTime: str = None
    Label: str = None
    PersonExtension: PersonExtension_Capture
    PersonPhoto: str = None


class CompareInfo_Capture(BaseModel):
    AlarmEvent: int = None
    Liveness: int = None
    Attribute: Attribute_Capture = None
    CompareTime: str = None
    PersonType: int = None
    VisitsCount: int = None
    Similarity: str = None
    PersonInfo: PersonInfo_Capture = None


class Data_Capture(BaseModel):
    DeviceInfo: DeviceInfo_Capture
    CaptureInfo: CaptureInfo_Capture
    FaceInfo: FaceInfo_Capture = None
    CompareInfo: CompareInfo_Capture = None

class CaptureCBItem(BaseModel):
    Name: str 
    TimeStamp: int 
    Session: str 
    Data: Data_Capture



class DeviceInfo_HeartBeat(BaseModel):
    DeviceId: str 
    DeviceUUID: str 
    DeviceMac: str 
    ChannelNo: int 
    WebVersion: str 
    CoreVersion: str 
    VersionDate: str 

class Data_HeartBeat(BaseModel):
    DeviceInfo: DeviceInfo_HeartBeat
    HTTPVersion: str 
    HTTPDate: str 
    HeartbeatCount: int 
    CaptureCount: int 


class HeartBeatCBItem(BaseModel):
    Name: str 
    TimeStamp: str 
    Session: str
    Data: Data_HeartBeat


class DeviceInfo_Register(BaseModel):
    DeviceId: str  = None
    DeviceUUID: str  = None
    DeviceMac: str  = None
    DeviceIP: str  = None
    DeviceType: int  = None
    ChannelNum: int  = None
    WebVersion: str  = None
    CoreVersion: str  = None
    VersionDate: str  = None


class Data_Register(BaseModel):
    DeviceInfo: DeviceInfo_Register = None
    HTTPVersion: str = None
    HTTPDate: str = None


class RegisterItem(BaseModel):
    Name: str  = None
    TimeStamp: str  = None
    Data: Data_Register    = None

# @app.post('/test')
# def calculate(request_data: Item):
#     a = request_data.a
#     b = request_data.b
#     c = a + b
#     # with open('./11.txt', 'w') as f_res:
#     #     f_res.write(str(c))
#     res = {"res":c}
#     return res




# def get_value_for_key(raw_value):
#     """
#     """
#     request_info = {}
#     part_str_array = raw_value.split(' ')
    



#     print(part_str_array)
#     for part_str in part_str_array:

#         idx_key = part_str.find('=')
#         key_value = part_str[0: idx_key]

#         if part_str[-1] == ')':

#             idx = part_str.find('(')
#             new_raw_value = part_str[idx + 1 : -1]
#             print('11111', new_raw_value)
#             request_info[key_value] = get_value_for_key(new_raw_value)
#         else:         
#             print('yyy', part_str)  
#             if part_str[-1] != '"' and part_str[-1] != "'" :
#                 print('jjj', part_str[idx_key + 1 : ])
#                 request_info[key_value] = part_str[idx_key + 1 : ]
#             else:
#                 print('fff', part_str[idx_key + 2 : -1])
#                 request_info[key_value] = part_str[idx_key + 2 : -1]        
    
#     return request_info


@app.post('/CaptureCB')
def strore_Capturemessage(request_data: CaptureCBItem):
    # print(str(request_data.Name), str(request_data.Session), flush=True)
    with open('./CaptureCB.txt', 'a+') as f_res:
        request_info = jsonable_encoder(request_data)
        f_res.write(str(request_info) + "\n")
    current_ts = round(time.time())
    res = \
        {
            "Name": "captureInfoResponse",
            "TimeStamp": current_ts,
            "Session": request_data.Session,
            "Code": 1,
            "Message": ""
        }
    return res


@app.post('/HeartBeatCB')
def strore_HeartBeatmessage(request_data: HeartBeatCBItem):
    """
    """
    print(jsonable_encoder(request_data))
    with open('./HeartBeatCB.txt', 'a+') as f_res:
        request_info = jsonable_encoder(request_data)
        f_res.write(str(request_info) + "\n")
    current_ts = round(time.time())
    res = \
        {
            "Name": "heartbeatResponse",
            "TimeStamp": current_ts,
            "Session": request_data.Session,
            "Code": 1,
            "Message": ""
        }
    return res


@app.post('/Register')
def strore_Resgistermessage(request_data: RegisterItem):
    """
    """
    print(jsonable_encoder(request_data))
    with open('./Register.txt', 'a+') as f_res:
        request_info = jsonable_encoder(request_data)
        f_res.write(str(request_info) + "\n")
    current_ts = round(time.time())
    Session_name = request_info['Data']['DeviceInfo']['DeviceUUID'] + '_' + str(current_ts)
    res = \
        {
            "Name": "registerResponse",
            "TimeStamp": current_ts,
            "Data":
            {
                "Session": Session_name,
                "ServerVersion": "1.1.0"
            },
            "Code": 1,
            "Message": ""
        }
    return res


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app=app,
                host="0.0.0.0",
                port=8080,
                workers=1)

  • http请求IO控制代码块(仅供参数)
#!/usr/bin/python
import requests as req
import base64
import json

post_url = "http://192.168.1.9:595"

data = {
'Name':'IOControlRequest',
'Data':
{
	'ContinueSeconds':10
}
}

json_data = json.dumps(data)

r = req.post(url = post_url, data = json_data)

print(r.text)

具体逻辑靠大家的异想天开了哈

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值