字体大小: &加; -

Userful如何帮助组织集成热像仪| 第2部分

在此博客的第1部分中,我们描述了热像仪和其他新技术将如何成为后COVID世界中的第二自然。 对于这一部分,我们将展示一个示例设置。

我们将视频管理服务器(VMS)与软件平台集成在一起,该软件平台与来自数百个不同供应商的相机集成在一起,其中包括支持相机内分析和/或热成像的相机。 用户可以在VMS平台内或智能相机的规则引擎内配置事件。 这些事件可以是物体距离触发器(即,检测到它们之间的距离小于1.5米的物体),物体计数触发器(即,检测到某个位置内一定数量的访客)或温度触发器(即,检测到温度的物体)高于38摄氏度)。

这些事件中的任何一个都可以触发对Userful API的HTTP调用,从而允许Userful Server自动更改视频墙,单个显示器或一组显示器上的内容。 部署有多简单? 仅需三个步骤:

  1. 在摄像机内置的分析引擎或基于软件的VMS平台上配置事件。
  2. 配置一个HTTP侦听器; 监视来自外部传感器的传入HTTP调用。
  3. 配置源切换器; 一组针对Userful API的软件说明,说明了基于外部触发器在不同屏幕上显示哪些内容。 这可以是文本警告,说明视频,实时摄像机供稿,PowerPoint幻灯片或客户决定显示的任何其他类型的内容。

最终结果(使用Python)在主应用程序中包含26行代码:

如果__name__ =='__main__':#将套接字绑定到端口sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_address =('192.168.1.100',8081)print('在%s端口%上启动s'%server_address)sock.bind(server_address)#监听传入的连接sock.listen(1)而为True:#等待来自外部传感器打印的连接(“等待连接”),client_address = sock.accept ()尝试:print('connection from',client_address)#接收少量数据并在True时读取数据:data = connection.recv(512),如果data:#提取来自Camera HTTP调用的数据。 camera = extract(data)#登录到Userful Server以检索身份验证cookie session_header = login()#确定显示器上当前正在播放的内容current_source = is_playing(session_header,'Shop-Floor')#将显示器上的内容切换到预配置来源(在此示例中为HTML警告消息switch_source(session_header,'shop-Floor','HTML Warning')#等待5秒钟时间。sleep(5)#切换回原来播放的内容switch_source(session_header, 'Shop-Floor',current_source)#delete_source(session_header,'PIP_Dynamic')time.sleep(5)中断其他:print(sys.stderr,'no more data from',client_address)最终中断:#清理连接。关()
 

因此,让我们逐步完成此项目步骤。

步骤1:在凸轮上配置事件时代或VMS

在此示例中,我们使用了第三方VMS平台的集成分析引擎,该引擎可以接收并记录来自多个摄像机的摄像机供稿。 管理员可以在摄像机规则引擎内配置不同的事件……这可以是移动触发器或分析触发器,通过这些触发器,VMS软件可以分析传入的视频供稿并检测每个摄像机的事件,例如:

  1. 进入录制窗口的特定区域的人。
  2. 从A-> B(访客柜台)越过虚拟线的人
  3. 从B-> A(访客柜台)越过虚拟线的人
  4. 体温升高(> 38度)的人

每个事件都有一个号召性用语。 例如,向我们的网络侦听器发出的HTTP REQUEST,地址为192.168.1.100:8081,其中包含诸如摄像机名称和事件限定之类的消息内容。 事件规则示例如下图所示。

步骤2:HTTP侦听器

HTTP Web服务器是在您的计算机上运行的一个简单过程,它可以完成两件事:

  1. 在特定的TCP套接字地址(IP地址和端口号)上侦听传入的http请求
  2. 处理此请求,并在套接字地址上收到消息时执行操作。

在这个例子中; 我们的侦听器正在侦听IP地址8081的外部以太网接口上的端口192.168.1.100。 如果检测到传入连接,则在<call to action>例程下收集并处理HTTP消息中接收的数据。 这是指示Userful服务器做什么的例程。在此处输入您的文字...


#将套接字绑定到端口导入套接字sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_address =('192.168.1.100',8081)print('在%s port%s上启动'%server_address)sock .bind(server_address)#侦听传入的连接sock.listen(1)而为True:#等待来自外部传感器打印的连接(“等待连接”)连接,client_address = sock.accept()尝试:打印('connection from',client_address)#以小块形式接收数据,并在True时读取:data = connection.recv(512),如果data:<CALL TO ACTION> else:print(sys.stderr,'no more data from ',client_address)最终中断:#清理连接connection.close()
 

在屏幕上切换信号源之前,我们先检查区域(即屏幕组)中当前正在播放的信号源。 这样,一旦事件过去,我们就可以返回原始内容。 下面的代码将检测当前播放源的名称(即标牌播放器名称或其他名称)。 调用此函数时,我们会传递身份验证Cookie和区域名称。

def is_playing(session_header,zone):get_url = api_url_base +'/ api / zones / byname /'+区域response = requests.get(url = get_url,headers = session_header)if response.status_code == 200:数据= response.content dict = json.loads(data)sourceID = dict ['playingSourceId'] sourceName = get_source_info(session_header,sourceID)print(sourceName,'正在播放))else:print(response.status_code)返回sourceName def get_source_info(session_header,sourceID) :get_url = api_url_base +'/ api / sources /'+ sourceID响应= request.get(URL = get_url,headers = session_header)if response.status_code == 200:data = response.content dict = json.loads(data)else :打印(response.status_code)返回字典['sourceName'] 

现在我们已经确定了当前播放的源的名称,我们可以更改该区域的源:

def switch_source(session_header,zone_name,source_name):post_url = api_url_base +'/ api / zones / byname /'+ zone_name +'/ switch?destinationSourceName ='+ source_name响应= request.put(url = post_url,headers = session_header)值=如果response.status_code == 200,则为False:数据= response.content值= json.loads(data)[“ isPlaying”] print('Source Switched')否则:print(response.status_code)返回值 

就这样...。 HTTP侦听器中的<CALL TO ACTION>变为:(1)检索Userful Server的AUTH cookie,(2)检测当前在特定区域中播放的源,(3)将显示内容切换为“ HTML警告”消息存储在本地服务器上(4)暂停了一段时间,(5)切换回原始源。

#登录到Userful Server以检索身份验证cookie session_header = login()#确定当前在显示器上播放的源= is_playing(session_header,'Zone-3')#将显示器上的内容切换到预配置源(在本示例中为HTML警告消息switch_source(session_header,'Zone-3','HTML Warning')#等待5秒钟时间.sleep(5)#切换回原来播放的内容switch_source(session_header,'Zone-3',source )#delete_source(session_header,'PIP_Dynamic')time.sleep(5)休息 

我们可以通过实际查看来自摄像机或VMS平台的HTTP调用中接收到的数据来扩展此脚本。 该数据可以包含有关摄像机和/或触发源的信息,并且该信息可以用于显示不同类型的内容。 想一想实时的摄像头馈送,或者-如果摄像头正在统计人数-显示商店中有多少顾客,以及有多少其他顾客可以进入商店。

通过REST-API的简单性,客户和系统集成商可以将简单的解决方案部署到某些技术上令人赞叹的功能。 无需其他供应商的解决方案。 仅仅一点点的想象力和有限的编码技巧就可以带您走远。 我希望我们引起了您的兴趣,并期待着进一步交流思想和例子。


罗伯特·休伊斯曼斯

解决方案工程副总裁

Userful Corporation,INC。


观看点播网络研讨会,以了解有关使用Userful API的更多信息

COVID-19对业务运营的影响
Userful如何帮助组织整合热力技术...
此帖子的评论已被管理员锁定。

留言

通过接受,您将访问https://userful.com/外部的第三方提供的服务