赞
踩
随着人工智能技术的快速发展,端到端AI解决方案在各个领域的应用越来越广泛。这些解决方案能够实现从数据采集到结果输出的完整流程,将人工智能算法与物理设备、网络通信和云服务等技术有机结合,为用户提供全面、高效的智能化体验。
使用边缘计算的好处在于它能够将数据处理和分析推近到数据源头附近,减少了数据传输和延迟,提高了响应速度和实时性。尤其在视频监控等实时应用场景中,边缘计算能够有效减轻云端的负载,提供更快速的数据处理和响应能力。此外,边缘计算还具备离线运行的能力,即使在网络不稳定或无网络连接的情况下,仍然能够进行本地的数据处理和分析,确保系统的稳定性和可靠性。
大致的解决方案流程图如下:
A[视频源头采集] --> B[选择合适的摄像机设备] B --> C[配置摄像机参数(分辨率、帧率等)] C --> D[视频数据采集] D --> E[视频编码(H.264、H.265等)] E --> F[视频传输] F --> G[选择合适的传输协议] G --> H[网络带宽评估和调整] H --> I[选择合适的存储介质] I --> J[存储容量规划] J --> K[边缘计算和盒子设备] K --> L[选择合适的边缘盒子设备] L --> M[盒子硬件要求和选择] M --> N[盒子操作系统选择] N --> O[配置盒子依赖项和运行环境] O --> P[安装和配置SDK] P --> Q[SDK初始化] Q --> R[设置SDK参数] R --> S[调用SDK接口]
设备除了我们已知的盒子以外NVR(网络视频录像机)、DVR(数字视频录像机,还需要知道在视频摄像监控上面有哪些类型的设备:
在端到端AI解决方案中,视频源头采集是实现智能视频分析的关键一步。在进行视频源头采集时,需要考虑以下两个方面:摄像机类型和配置参数,以及视频编码标准和参数选择。
摄像机类型和配置参数
选择合适的摄像机设备对于视频源头采集至关重要。根据具体应用需求,可以选择不同类型的摄像机,例如网络摄像机(IP摄像机)、模拟摄像机或者高清摄像机。每种摄像机类型都有其特定的特点和适用场景。
配置参数包括但不限于分辨率、帧率、曝光度、对比度等。这些参数需要根据具体场景和需求进行设置。例如,在需要捕捉细节的情况下,可以选择更高的分辨率和帧率,而在低光环境下,可能需要调整曝光度和增加对比度来获得更清晰的图像。
视频编码标准和参数选择
视频编码标准决定了视频数据的压缩和传输方式。常用的视频编码标准包括H.264、H.265等。选择适当的视频编码标准可以在保证视频质量的同时减小数据量,提高传输效率。
除了编码标准,还需要选择合适的编码参数。编码参数包括比特率、GOP大小、编码质量等。这些参数的选择需要平衡视频质量和传输效率。例如,较高的比特率和编码质量可以获得更好的视频质量,但会增加数据量,对带宽和存储需求提出更高要求。
通过合理选择摄像机类型和配置参数,以及视频编码标准和参数,可以实现高质量、高效率的视频源头采集,为后续的视频分析和处理提供优质的数据基础。
在端到端AI解决方案中,视频传输和存储是关键的环节,它涉及到选择合适的网络传输协议和存储介质,以及进行容量规划。
网络传输协议
选择合适的网络传输协议对于视频传输的稳定性和效率至关重要。下面是一些常用的网络传输协议:
其中使用国标协议的步骤:
带宽需求
在选择网络传输协议时,还需要考虑到所需的带宽。带宽需求取决于视频的分辨率、帧率和编码参数等。较高的分辨率和帧率以及更高的编码质量可能需要更大的带宽来确保视频传输的顺畅性和稳定性。因此,在进行网络传输时,需要对带宽进行评估和规划,以满足视频传输的需求。
存储介质和容量规划
视频存储是将采集的视频数据保存在合适的存储介质中,以备后续的分析和回放。在选择存储介质时,需要考虑容量、稳定性和可扩展性等因素。
常见的存储介质包括硬盘、固态硬盘(SSD)和云存储等。硬盘具有大容量和相对低成本的优势,适合存储大量的视频数据。SSD则具有更高的读写速度和更好的抗震性能,适合对实时性要求较高的应用场景。云存储可以提供高度可扩展的存储解决方案,同时提供备份和灾备功能。
在进行存储容量规划时,需要考虑到视频数据的持续产生和存储周期。具体的容量规划取决于视频的采集频率、分辨率、帧率以及存储周期的要求。以下是进行存储容量规划的一般步骤:
通过合适的网络传输和存储策略,可以确保视频数据的稳定传输和可靠存储,为后续的数据分析和处理提供高质量的数据基础。
在实现端到端AI解决方案时,边缘计算是一个重要的环节。边缘计算利用靠近数据源的边缘设备(例如盒子)来进行数据处理和分析,以减少数据传输和响应时间。
盒子硬件要求和选择
选择适合的盒子硬件对于实现高效的边缘计算至关重要。以下是一些关键的盒子硬件要求和选择要点:
在选择盒子硬件时,需要综合考虑计算能力、存储需求、网络连接和环境要求等因素,以满足实际的边缘计算需求。
盒子操作系统和依赖项
选择合适的操作系统和安装必要的依赖项对于盒子的正常运行和应用程序的部署至关重要。
确保盒子操作系统的稳定性和安全性,并根据应用程序的需求安装所需的依赖项和库,以确保边缘计算的顺利进行。
其实设备的数据采集信息到盒子的流程,可以简化成下图所示,区别就在于是否有存储介质,和存储介质是什么,在哪里的。
可能在视频采集设备到存储设备连接上,有些复杂的设备组合,比如加一个在NVR上交换机,目的就是用交换机连上一个存储设备。
如果没有存储设备,那就是采集视频设备与边缘盒子直接的通信
如果有存储设备,就是存储设备和盒子通信(这个流程就更简单)
有存储介质的方式:在这种方式下,视频摄像头设备将采集到的视频数据存储到介质(如硬盘、SSD等),然后盒子通过某种方式访问存储介质,获取视频数据进行后续处理。常见的有存储介质的方式包括:
无存储介质的方式:在这种方式下,视频摄像头设备将采集到的视频数据直接传输给盒子,不经过存储介质的中间步骤。常见的无存储介质的方式包括:
在无存储介质下,设备与边缘盒子之间的通信可以通过不同的方式实现,具体取决于设备的类型、协议和通信接口。以下是一般情况下设备与盒子通信的一些常见方式:
设备网络SDK 是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、视频服务器、网络摄像机、网络球机、解码器、报警主机等网络产品服务的配套模块,用于远程访问和控制设备软件的二次开发。
使用设备网络SDK,您可以利用提供的功能和接口来实现与设备的通信、数据传输和控制。
确定设备和相应的网络SDK:首先,您需要确定您使用的设备以及相关的网络SDK。根据设备的类型和厂商,您可以查找相应的SDK和文档。
一般来说设备的SDK接口函数都是C或者C++写的,为数不多的树莓派倒是提供从采集设备到存储设备到算力设备的都用python语言的。
因为性能和效率:C和C++是编译型语言,直接编译为机器码,因此在性能和效率方面具有优势。对于一些对计算性能和资源利用效率要求较高的应用场景,使用C或C++可以更好地满足需求。相比之下,Python是解释型语言,需要在运行时逐行解释执行,因此相对而言较慢。
SDK开发通常分为C/S架构(Client/Server)和B/S架构(Browser/Server)
除了C/S架构和B/S架构,还有其他架构模式可以使用SDK进行开发,如分布式架构、微服务架构等。这些架构模式根据具体需求和应用场景的不同,将系统划分为多个组件或服务,SDK可以用于开发这些组件或服务的接口和功能,以实现各个组件或服务之间的通信和协作。
服务器可以是指设备的服务器端,用于提供数据、功能或处理请求。例如,对于视频监控系统,服务器可以是NVR(网络视频录像机)或视频流媒体服务器,SDK用于开发与这些服务器进行通信的客户端应用程序
下图为海康的sdk基本调用流程
虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。
海康NVR基本调用流程主要包含以下模块:
下面是使用海康NVR SDK的部署流程,包括下载SDK、导入、IP通道资源配置和回放和下载模块的调用示例代码。请注意,由于篇幅限制,以下示例仅展示了部分流程和代码片段,并假设你已经有了CentOS系统和C/C++开发环境的基础。
mkdir my_nvr_project
cd my_nvr_project
cmake path_to_sdk_directory
make
vi main.cpp
#include <iostream> #include "HCNetSDK.h" int main() { // 初始化SDK NET_DVR_Init(); // 设置连接超时时间 NET_DVR_SetConnectTime(2000, 1); // 用户登录设备 NET_DVR_USER_LOGIN_INFO loginInfo = {0}; NET_DVR_DEVICEINFO_V40 deviceInfo = {0}; loginInfo.bUseAsynLogin = 0; strncpy(loginInfo.sDeviceAddress, "192.168.1.100", NET_DVR_DEV_ADDRESS_MAX_LEN); strncpy(loginInfo.sUserName, "admin", NAME_LEN); strncpy(loginInfo.sPassword, "password", NAME_LEN); LONG userID = NET_DVR_Login_V40(&loginInfo, &deviceInfo); if (userID < 0) { std::cout << "Failed to login. Error code: " << NET_DVR_GetLastError() << std::endl; NET_DVR_Cleanup(); return -1; } // 登录成功,可以进行其他操作 // IP通道资源配置 NET_DVR_IPPARACFG_V40 ipParaCfg = {0}; DWORD dwReturned = 0; if (!NET_DVR_GetDVRConfig(userID, NET_DVR_GET_IPPARACFG_V40, 0, &ipParaCfg, sizeof(ipParaCfg), &dwReturned)) { std::cout << "Failed to get IP channel configuration. Error code: " << NET_DVR_GetLastError() << std::endl; NET_DVR_Logout(userID); NET_DVR_Cleanup(); return -1; } // 在这里对IP通道配置进行修改 if (!NET_DVR_SetDVRConfig(userID, NET_DVR_SET_IPPARACFG_V40, 0, &ipParaCfg, sizeof(ipParaCfg))) { std::cout << "Failed to set IP channel configuration. Error code: " << NET_DVR_GetLastError() << std::endl; NET_DVR_Logout(userID); NET_DVR_Cleanup(); return -1; } // 回放和下载模块调用 NET_DVR_FIND_DATA_V30 findData = {0}; LONG findHandle = NET_DVR_FindFile_V30(userID, &findData); if (findHandle < 0) { std::cout << "Failed to find file for playback. Error code: " << NET_DVR_GetLastError() << std::endl; NET_DVR_Logout(userID); NET_DVR_Cleanup(); return -1; } // 在这里对回放和下载进行操作 if (!NET_DVR_StopFindFile(findHandle)) { std::cout << "Failed to stop file finding. Error code: " << NET_DVR_GetLastError() << std::endl; } // 注销设备 NET_DVR_Logout(userID); // 释放SDK资源 NET_DVR_Cleanup(); return 0; }
make
./my_nvr_project
上述代码示例演示了使用海康NVR SDK进行初始化SDK、设置连接超时时间、登录设备、进行IP通道资源配置、回放和下载模块的调用以及注销设备和释放SDK资源的流程。
请注意,实际项目的代码和功能将根据需求而有所不同。你可以根据SDK提供的文档和功能进行相应的函数调用和实现,以满足你的具体需求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。