基YOLOV5實現的AI智能盒子

基于yolov5實現的AI智能盒子框架

  • 開發背景
  • 技術實現
  • 產品效果
  • 源碼預覽
  • 功能介紹

2021-2023是沉淀的幾年,經濟不景氣,各行各業都不太好混,所以這幾年也沒有太多心思花在csdn上為各大網友寫一些技術文章,2024年初,也算是給自己留下一點歲月的足跡吧,所以把這段時間精心研究的東西寫出來供大家交流,順帶也看看是否有機會遇到能幫助到其他技術公司或朋友,在交流中實現雙贏,有需要的朋友可以威信(幺捌零叁捌捌伍陸柒零貳,威信與電畫同號),具體合作方式具體交流。

開發背景

從事安防多年,但基本都是從事音視頻的編解碼工作,很少處理圖形圖像相關算法,原因如下:
(1)圖形圖像相關算法如車牌識別識別、人臉識別等如果是自己研發,涉及到高等數學等及圖形圖像處理等高深的支持,開發難度較大;
(2)前n年基本沒有開源的、簡易的不需要熟悉底層算法的AI識別框架,很難將生活中涉及的AI識別或機器學習的相關算法變成現實;
主要基于以上兩點,導致AI相關的算法落地很難、實現很難、應用更難!

然后,基于百度paddle和yolo的開源框架出現了,這使得AI識別難度大大下降,應用門檻大大降低,然而paddle則是面向服務器,對硬件要求較高,部署也相對復雜,很難將普遍應用到生活中,所以經過多番調研yolo則是我們最好的選擇。
選擇yolo有如下優勢
(1)開源且識別效率非常高,僅需一次識別即可完成所有對象的分類識別。
(2)可以應用到服務器中,也可以應用到小型硬件中,本文部署的硬件就支持windows/ubun,支持jetson nano、jetson orin nano等3款中高低檔硬件(約5000元、3000元、1000元)
(3)開源技術論壇和資料較多
(4)支持使用python,支持跨平臺部署(一套代碼,多套環境部署)

在安防領域,基于音視頻的基礎操作已經基本上沒有任何難度(看視頻、直播、錄像等),但基于音視頻的AI應用卻很難,但隨著技術的成熟,這些應用也變得越來越多,結合生活實際需求的場景就有很多,例如
(1)非法闖入:夜間無人值守或重要地點進出監控
(2)摔倒檢測:關愛老人,老人摔倒檢測或打架斗毆跌倒檢測,可用于社區、監獄、廣場、學校等場所。
(3)明火識別:嚴禁煙火的第三方識別火焰,防止火宅,可用于森林、車間、化工產等場所。
(4)煙霧排放:同明火場景。
(5)越界檢測:越過指定邊界,產生報警,一般用于行人識別與闖入檢測,結合視頻區域檢測。可用于無人值守場景。
(6)睡崗檢測:工作期間睡覺檢測,避免安全事故發生。
(7)離崗檢測:工作期間離開崗位檢測,避免安全事故發生。
(8)人群聚眾:檢測人員聚集,避免打群架、避免踩踏事件發生。
(9)攀高檢測:檢測人員是否進行攀爬,避免安全事故發生。
(10)打架斗毆:檢測人員是否打架,可用于學校、公共場所。
(11)人臉抓拍:人臉數據抓拍,可推送給人臉識別服務進行1&1識別及陌生人識別。
(12)遮擋檢測:檢測攝像機是否被人為遮擋或被損壞。協調運維人員進行維護。
(13)垃圾滿溢:檢測垃圾桶垃圾是否滿溢,協助環衛人員智能調度環衛車輛,節省人力和物力。
(14)占道經營:檢測是否有占用道路非法經營,協助城管管理,減輕工作量。
(15)安全帽識別:工地安全帽識別,提高工地安全。
(16)反光衣識別:工地反光衣識別,防止非工作人員闖入工地區域。
(17)電動車進電梯:檢測電動車進出電梯,防止火災發生。
(18)口罩檢測:明廚亮灶,檢測食品從業人員是否佩戴口罩。
(19)蟲害識別:智慧農業,通過AI識別蟲害,智能指導農戶作業。
(20)動物識別:公共場所,不允許動物進出場所。
(21)電梯超員檢測:電梯人員是否超載工作。
(22)河邊垂釣檢測:嚴禁垂釣河邊檢測人員是否有釣魚或捕魚行為。
(23)河邊游泳檢測:嚴禁游泳河邊檢測人員是否有下水游泳行為。
(24)人數統計:人數統計或客流統計,通過AI方式統計繪制市場的客流熱力圖。
(25)抽煙檢測:明廚亮灶,檢測從業人員是否有吸煙行為。
(25)泥頭車識別:街道泥頭車隨意、掉土的事件。
(27)打電話識別:檢測開車是否有打電話行為。
(28)機動車/非機動車識別:機動車和非機動車識別。
(29)車流量統計:識別車輛及統計車流量
以上是我總結的貼近生活,很有可能在生活中非常實用的場景,這些算法都是可以通過數據采集進行一一訓練的。

技術實現

開發環境:pycharm
開發語言:python、vue2.0、pytorch、vision
部署環境:
(1)windows-conda、jetson-nano:conda(低配)、
(2)jetson orin nano:python、cuda、cudnn(sdk)(中高配)
(3)orange PI(正在適配中)
硬件選型:
(1)低配jetson naco(b01替換版本),ubuntu,價格1312元(含外殼),0.5tops,分析實時視頻約4路;一張圖約200ms~300ms耗時;
(2)中配jetson orin nano,ubuntu,價格3200元上下,20tops,分析實時視頻約8路;一張圖約100ms耗時;
(3)高配jetson orin nano,Ubuntu,價格在5200元上下,70-100tops,分析實時視頻約16路;一張圖約30ms耗時;
(4)國產華為芯片orange PI,4G,16核心,價格在1000元左右,分析視頻預估在16路;(正在適配中,硬件一片難求)
在這里插入圖片描述

產品效果

為此,我開發了一個AI盒子框架,這個框架可以動態添加訓練好的模型、動態添加需要分析的網絡攝像機、動態為每一路攝像機添加不同的分析場景(算法)、動態配置AI盒子參數、動態重啟AI盒子等功能;
AI盒子提供了

(1)登錄AI盒子
AI盒子登錄頁面提供用戶名和密碼模式登錄,登錄后可以修改初始密碼。
在這里插入圖片描述

為適配不同的地方需求,AI盒子最新版本,支持中文簡體版本、英文版本和中文繁體版本。
在這里插入圖片描述

(2)系統首頁
AI盒子主要提供設備管理、報警管理、錄像管理、模型配置以及系統設置功能。
在這里插入圖片描述

(3)設備管理
可以動態添加需要分析的設備,此處的設備為網絡設備,AI盒子通過設備的rtsp標準協議從攝像機獲取視頻流,然后進行抽幀分析,抽幀間隔可以動態進行配置。
在這里插入圖片描述
可以控制設備進行AI抽幀的分析時間段控制,如早上08:00開始分析,到晚上23:00截止。在這里插入圖片描述
可以配置設備分析的區域,區域支持多邊形繪制(區域入侵)、繪制邊界線段(周界檢測)在這里插入圖片描述

(4)場景管理
一個設備抽幀的圖片,可以做不同場景的算法分析,例如一個攝像機可以同時分析明火煙霧檢測、攀爬檢測,也可以分析更多的算法(當然,算法越多,耗時就增加,不過對于在1-3秒內能實時響應就已經是非常適用了,可以忽略)在這里插入圖片描述

(5)報警管理
當分析場景檢測到超過設定置信度的預警時,會存儲到AI盒子中,AI盒子會將報警異步推送到配置的第三方平臺中,可以在AI盒子中保存n天
在這里插入圖片描述
如果AI盒子打開報警錄像功能,AI盒子會自動錄取事件發生的前3秒以及后3秒,總共6秒錄像,這些錄像也會被推送給第三方平臺
在這里插入圖片描述

(6)錄像管理
此外AI盒子支持視頻轉發(rtmp)、手動抓拍、遠程錄像功能,錄像后可以存儲在AI盒子,當推送給第三方平臺后會自動從本地移除
在這里插入圖片描述

(7)模型管理
AI盒子提供模型載入、識別、上報等完整框架,并不固化整個流程,所以對AI盒子而已,算法、設備、場景都是靈活可以配置的,支持動態的模型添加功能,我們可以將訓練好的模型動態添加到AI盒子中
在這里插入圖片描述
模型可以包括所有分析,哪些是屬于正常的(不會報警的),哪些屬于異常的(顯示紅框,可能要報警的)
在這里插入圖片描述

(8)系統配置
AI盒子支持系統配置,配置項目包括AI盒子編碼(推送到第三方,區別多個盒子)、報警保存天數、并發分析數量控制、識別后是否顯示標簽、是否支持報警聯動錄像、是否凌晨自動重啟、報警第三方平臺介紹地址、長連接控制地址。
在這里插入圖片描述
(9)GPIO及modbus聯動
此外,AI盒子支持自身引腳聯動或t通過外接modbus協議進行對接,以下為AI盒子定制的一個倉庫物料領取場景:
A、人通過人臉機刷臉開門進入物料倉庫(人臉機器聯動門磁)
B、門禁從常開(1狀態)變為斷點開門狀態(0),AI盒子檢測到人員進入,開始聯動攝像機進行錄像;
C、人員進入倉庫后領取物料,拿去完成之后將物料放置到物料臺,然后按墻壁上的拍照IO開關;
D、AI盒子檢測到AI開關后,聯動攝像機視頻進行物料實物抓拍,可以抓圖多張;
E、人員拍照后拿取物料并離開物料倉庫,門磁從開門(0)狀態恢復為常閉狀態(0);
F、AI盒子檢測到關門信號,停止聯動錄像,并將從門禁到出門的錄像+物料拍照打包存儲并發送給第三方平臺;
這樣,一個人從進門領取物料開始錄像==>物料拍照==>停止錄像整個過程留影留像,保留了整個過程的證據。如果是非法闖入則自動通過AI預警進行報警錄像,產生非法闖入預警,如果正常人臉刷臉進入則不會產生非法報警。

源碼預覽

(1)服務啟動

"""===========導入安裝的python庫==========="""
import sys
from pathlib import Pathfrom box.box import Box
from utils.general import check_requirements# 獲取當前文件路徑
FILE = Path(__file__).resolve()
# 獲取當前文件父目錄-YOLOv5根目錄
ROOT = FILE.parents[0]
# 獲取絕對路徑
PARENT = ROOT
# 將根目錄添加到系統path中
if str(ROOT) not in sys.path:sys.path.append(str(ROOT))# 程序啟動入口
if __name__ == '__main__':# 檢查請求參數check_requirements(ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))# 創建AI盒子box = Box()# 初始化盒子box.init()# 啟動AI盒子box.start()# 等待盒子退出box.join()# 停止AI盒子box.stop()

(2)websocket協議


# 報警推送實現
class SocketService(threading.Thread):# 構造函數def __init__(self):# 重寫父類方法threading.Thread.__init__(self)# 套接口self.ws = Noneself.connected = Falseself.do_run = True# 數據接收self.msg_thread = None# 視頻數量self.count = 0# 視頻回調self.video_back = Nonepass# 停止服務def stop(self):self.do_run = False# 關閉套接口if self.ws is not None:self.ws.close()# 等待接收退出if self.msg_thread is not None:if self.msg_thread.is_alive():self.msg_thread.join()pass# 設置命令回調def set_video_back(self, call):self.video_back = call# 響應結果def send_result(self, url, cmdId, state, desc, data=None, file_path=None):try:if url is None or cmdId is None:return# 請求字典dict_info = {}# 追加文件if file_path is not None:# 讀取文件內容file = open(file_path, "rb")name = os.path.basename(file_path)dict_info['file'] = (name, file, 'application/octet-stream')# 追加數據if data is not None:dict_info['data'] = data# multipart編碼encoder = MultipartEncoder(fields=dict_info)# 請求頭部headers = {'Content-Type': encoder.content_type}# 發送到第三方result_url = (url + "?boxId=" + SystemConfig.ID + "&cmdId=" + cmdId +"&state=" + str(state) + "&desc=" + desc)response = requests.post(result_url, json=data, headers=headers)if response.status_code != 200:return False# 處理返回結果result = response.json()# 處理返回結果if result['error'] != 0:error = result['error']LOGGER.error(f'upload box {SystemConfig.ID} command result failed, reason: {error}')return False# 返回成功結果return Trueexcept Exception as e:LOGGER.error(f'upload alarm error {e}')pass# 報警推送def run(self) -> None:# 開始時間last_time = datetime.datetime.now()while not Global.restart and self.do_run:try:# 查詢通信地址result_url = SystemConfig.ALARM_URLif SystemConfig.ALARM_URL is not None:if not result_url.endswith("/"):result_url += "/"result_url += "result"# 系統重啟if Global.restart:break# 連接服務器if not self.connected:if SystemConfig.SOCKET_URL is None or SystemConfig.SOCKET_URL == '':time.sleep(1)continuetry:# 連接服務self.ws = create_connection(SystemConfig.SOCKET_URL)self.connected = self.ws.connected# 連接成功if self.ws.connected:LOGGER.info(f'@connect websocket success: {SystemConfig.SOCKET_URL}')# 連接信息box = {'id': SystemConfig.ID,'ip': Global.ip,'port': Global.port,'cmd': 'connect'}# 發送連接self.ws.send(json.dumps(box))# 更新心跳時間last_time = datetime.datetime.now()# 同步盒子數據self.sync_server_data()passexcept Exception as e2:LOGGER.error(f'websocket connect error:{e2}')self.connected = Falsepass# 鏈接失敗等待if not self.connected:time.sleep(3)continue

(3)系統配置

# 系統全局配置
import uuidfrom box.util import SystemUtil# 全局配置
class Global:# 數據庫配置dbIp = '127.0.0.1'dbPort = 3306dbUser = 'root'dbPwd = 'root'dbName = 'box3'# web配置ip = '127.0.0.1'port = 5700# 系統重啟標志restart = False# 啟用串口信號讀取enableIO = False# linux-設備名LUX_IO_NAME = '/dev/ttyCH341USB0'# win-設備名WIN_IO_NAME = 'COM13'# 初始化def __init__(self):pass# 獲取本機ip@staticmethoddef local_ip():try:if Global.ip == '127.0.0.1':Global.ip = SystemUtil.get_local_ip()except Exception as e:print(f'get local ip error {e}')# 系統配置
class SystemConfig:# 盒子當前編碼ID = str(uuid.uuid1()).replace("-", "")# 系統登錄賬號ADMIN = 'admin'# 系統賬號密碼PASSWORD = 'dd123456'# 系統并發分析數PATROL_NUM = 4# 報警保存天數SAVE_DAYS = 1# 是否顯示標簽SHOW_LABEL = 1# 是否報警錄像ALARM_RECORD = 1# 是否定時重啟AUTO_RESTART = 1# 報警推送地址ALARM_URL = ''# 長連接地址SOCKET_URL = ''

(4)文件清理

import threading
import os
import time
from threading import Lockfrom box.config import Global
from utils.general import LOGGER# 文件異步清理
class FileClear(threading.Thread):# 待清理文件列表files = []# 全局文件列表鎖lock = Lock()# 構造函數def __init__(self):# 重寫父類方法threading.Thread.__init__(self)pass# 添加清理文件@classmethoddef push(cls, file):if file is None:returncls.lock.acquire()try:cls.files.append(file)except Exception as e:LOGGER.warning(f'add clear file error {e}')finally:cls.lock.release()pass# 報警推送def run(self) -> None:# 系統未重啟while not Global.restart:try:# 系統重啟if Global.restart:break# 嘗試清理try:# 獲取文件大鎖self.lock.acquire()# 當前系統無任務if len(self.files) <= 0:# 釋放文件大鎖self.lock.release()# 睡眠等待1秒time.sleep(1)continue# 刪除所有文件-忽略異常for file in self.files:try:os.remove(file)except Exception as e1:LOGGER.warning(f'{e1}')passpass# 清空數據self.files.clear()# 釋放文件大鎖self.lock.release()time.sleep(0.1)except Exception as e:# 釋放文件大鎖self.lock.release()LOGGER.warning(f'clear file error {e}')passexcept Exception as e:LOGGER.warning(f'clear file error: {e}')

由于功能較多,此處不在一一贅述,有需要合作的請聯系我(威信:幺捌零叁捌捌伍陸柒零貳,威信與電畫同號),咱們在進一步溝通。

功能介紹

AI盒子是基于yolov5框架開發的一套AI識別框架,可以支持多模型、多設備、多場景(算法)識別,支持http協議(同一個局域網)通信、支持websocket協議(不同局域網)通信,支持視頻取流識別,支持接口圖片AI識別、支持媒體視頻轉發(視頻播放)等功能。
AI盒子是獨立的個體,可以單獨部署(外接顯示器,通過瀏覽器即可實時查看報警、實時播放報警),AI盒子也可以集成外部平臺,通過AI盒子對接接口(包括http協議、websocket協議),將報警及錄像等信息推送至第三方平臺。

具體功能介紹如下所示
(1)系統配置
可以配置AI盒子的基本配置,包括AI盒子的編碼(多個盒子時對接外部使用)、錄像及報警保存天數、并發AI分析設備路數、AI預警是否顯示預警標簽、是否12點自動重啟(用不上,異常情況下處理)、第三方報警推送地址、第三方平臺信令下發連接地址(服務端下發指令到AI盒子,如模型下發、設備下發、場景下發、設備重啟、系統配置等)。這些配置都可以實時配置實時生效,不需要重啟。
在這里插入圖片描述

(2)模型管理
可以通過AI盒子自帶的web端管理界面管理AI盒子中的模型,也可以通過AI盒子對接協議管理AI盒子模型,AI提供與模型無關的處理框架,訓練的模型分類根據實際填寫即可
在這里插入圖片描述

(3)設備管理
AI盒子主要通過rtsp協議(標準)分析設備視頻流(海康、大華等都可以),通過視頻流幀采樣的方式(采樣幀頻率可以動態配置)分析對應設備的圖片流,并且支持指定時間段內進行分析(如工作時間或下班時間進行AI分析),實現設備動態管理、動態配置,除支持分析視頻流之外,當然AI盒子也提供了圖片分析接口(可以第三方通過接口投遞圖片并進行分析)并返回結果
在這里插入圖片描述

(4)場景管理
AI分析的每一個設備(視頻流)都可以配置多個場景,如一個攝像機同時支持火焰識別、安全帽識別、摔倒檢測、打架斗毆等多個場景,由于AI盒子是框架,攝像機配置哪些場景都是可以動態靈活配置的。
在這里插入圖片描述

(5)錄像管理
AI具有設備遠程錄像動能,當AI盒子啟動視頻轉發之后,可以通過websocket接口控制AI盒子進行手動錄像,AI會臨時存儲錄像信息在本地,當服務器正常時會自動將錄像信息推送給第三方平臺,然后清理本地的臨時錄像。
AI盒子也提供了web管理頁面對這些錄像進行管理,包括查詢、錄像播放、錄像清理等功能
在這里插入圖片描述
在這里插入圖片描述

(6)協議支持
AI盒子支持通過Http協議管理AI盒子配置、模型、設備、場景等(如AI的WEB端),也可以通過websocket協議下發和操作AI盒子,實現與AI和的多協議交互。

Http協議代碼案例

# 登錄盒子
@app.route("/user/login", methods=["POST"])
def login():# 獲取用戶信息json對象user_data = request.json#  獲取post的form表單賬號密碼username = user_data['username']password = user_data['password']# 賬號密碼無效if username is None or password is None:return jsonify({"error": -1, "description": "賬號或密碼無效!"})# 賬號信息校驗if username != SystemConfig.ADMIN:return jsonify({"error": -1, "description": "用戶名或密碼錯誤!"})# 用戶密碼校驗if password != SystemConfig.PASSWORD:return jsonify({"error": -1, "description": "用戶或密碼不正確!"})# 用戶密碼正確md5 = get_md5(username + ":" + password)# map字典轉jsonreturn jsonify({"error": 0, "description": "success", "value": md5})# 更新密碼
@app.route("/user/setPwd", methods=["PUT"])
def set_pwd():# 校驗用戶令牌result = check_token()if result['error'] != 0:return jsonify({"error": result['error'], "description": result['description']})# 獲取用戶信息user_data = request.jsonif user_data['oldPassword'] is None:return jsonify({"error": -1, "description": "原密碼為空"})if user_data['newPassword'] is None:return jsonify({"error": -1, "description": "新密碼為空"})if SystemConfig.PASSWORD != user_data['oldPassword']:return jsonify({"error": -1, "description": "原密碼不正確"})# 更新密碼SystemConfig.PASSWORD = user_data['newPassword']# 更新系統用戶user_info = {"username": SystemConfig.ADMIN, "password": user_data['newPassword']}config_mapper.update('ADMIN', json.dumps(user_info), 1)# map字典轉jsonreturn jsonify({"error": 0, "description": "success"})# 重啟盒子
@app.route("/system/reboot", methods=["GET"])
def reboot():# 停止web應用服務print("reboot box...")try:# 獲取app停止函數func = request.environ.get('werkzeug.server.shutdown')if func is None:raise RuntimeError('Not running with the Werkzeug Server')# 停止app服務func()except Exception as e:print(e)# 設置為重啟標志Global.restart = True# 等待5秒主程退出time.sleep(5)# posix:linux nt:windowsSystemUtil.reboot()# 如果機器還未重啟先返回成功return jsonify({"error": 0, "description": "success"})

websocket協議代碼

# 報警推送實現
class SocketService(threading.Thread):# 構造函數def __init__(self):# 重寫父類方法threading.Thread.__init__(self)# 套接口self.ws = Noneself.connected = Falseself.do_run = True# 數據接收self.msg_thread = None# 視頻數量self.count = 0# 視頻回調self.video_back = Nonepass# 停止服務def stop(self):self.do_run = False# 關閉套接口if self.ws is not None:self.ws.close()# 等待接收退出if self.msg_thread is not None:if self.msg_thread.is_alive():self.msg_thread.join()pass# 設置命令回調def set_video_back(self, call):self.video_back = call# 響應結果def send_result(self, url, cmdId, state, desc, data=None, file_path=None):try:if url is None or cmdId is None:return# 請求字典dict_info = {}# 追加文件if file_path is not None:# 讀取文件內容file = open(file_path, "rb")name = os.path.basename(file_path)dict_info['file'] = (name, file, 'application/octet-stream')# 追加數據if data is not None:dict_info['data'] = data# multipart編碼encoder = MultipartEncoder(fields=dict_info)# 請求頭部headers = {'Content-Type': encoder.content_type}# 發送到第三方result_url = (url + "?boxId=" + SystemConfig.ID + "&cmdId=" + cmdId +"&state=" + str(state) + "&desc=" + desc)response = requests.post(result_url, json=data, headers=headers)if response.status_code != 200:return False# 處理返回結果result = response.json()# 處理返回結果if result['error'] != 0:error = result['error']LOGGER.error(f'upload box {SystemConfig.ID} command result failed, reason: {error}')return False# 返回成功結果return Trueexcept Exception as e:LOGGER.error(f'upload alarm error {e}')pass

(7)視頻轉發
AI盒子具有視頻轉發功能,如AI盒子一般是最靠近攝像機的硬件(從服務器資源、帶寬和延時、效率等多方面考慮),所以AI盒子是可以訪問攝像機的,如果平臺是云端的或者服務端與AI盒子或攝像機不在同一個局域網,那么這樣就很有可能平臺無法播放攝像機視頻(除非使用海康的平臺-ehome協議或螢石云協議播放,或大華的自動注冊協議播放),為了能通過AI盒子查看攝像機的視頻,AI盒子就集成了這個功能,通過AI盒子就可以將視頻轉發到rtmp服務器,可以使用srs進行部署,使得視頻播放支持rtmp、http-flv、webrtc、hls等協議。
在這里插入圖片描述

(8)報警預覽
AI盒子是獨立的個體,我們通過AI盒子的WEB端即可實時查看報警信息,當報警發生時候,AI盒子即可接收到報警信息,如下所示
在這里插入圖片描述

(9)語音播報
web端支持tts預警語音播報功能,當開啟報警預覽時,接收到報警后,瀏覽器端就會播放對應的報警語音,只需要查看一個小音箱即可實現安保語音通知功能。

(10)web管理
AI盒子提供以上所有功能的web端管理功能。

(11)GPIO聯動錄像
AI盒子可以通過硬件連接的釋放實現對AI盒子聯動接入的攝像機進行實時錄像,也可以進行抓拍,這個場景主要用于倉庫物料管理系統的解決方案:
當人員通過人臉機正常刷臉進入倉庫時,人臉機聯動門磁開門,AI盒子通過APIO信號監測門磁開啟聯動關聯攝像機開始錄像;當人員進入倉庫后,領取物料,將物料放置到物料臺,按IO開關進行實物拍照(可以按多次),AI盒子通過信號監測聯動關聯攝像機進行抓拍,人員攜帶物料走出倉庫,關閉門禁,AI盒子通過檢測停止關聯攝像機的聯動錄像;
當人員通過非人臉方式非法闖入倉庫時,AI盒子通過區域入侵、人形識別等算法進行抓拍、錄像,并將報警信息實時推送給后臺管理員(第三發平臺或web端),管理員安排安保人員介入預警事件,保證公司財產安全;

實現場景如下所示
在這里插入圖片描述
演示視頻如下所示

倉庫領料系統解決方案

第三方平臺進出倉庫記錄以及錄像信息
在這里插入圖片描述
在這里插入圖片描述

(12)遠程錄像
同GPIO聯動錄像之外,AI盒子 也支持手動遠程錄像和停止錄像功能,接口如下所示
在這里插入圖片描述
在這里插入圖片描述

(13)遠程抓拍
如圖上所示,AI盒子也支持播放視頻的同時進行實時抓拍。

(14)報警推送
AI可通過接口將報警推送到第三方平臺,如下所示
在這里插入圖片描述

(15)錄像推送
如上所示,推送的報警包含錄像信息
在這里插入圖片描述

(16)區域配置
AI盒子可以配置檢測視頻范圍的某一部分區域,可以配置區域內檢測,也可以配置邊界檢測,當檢測物體跨過邊界觸發報警
在這里插入圖片描述

(17)文件清理
AI盒子會定期清理報警信息、報警錄像信息、聯動錄像信息等;

(18)資源國際化(多語言支持)
支持簡體中文、繁體中文、英文3中語言
在這里插入圖片描述

(19)報警管理
AI盒子可以管理產生的報警信息、報警錄像等信息
在這里插入圖片描述
在這里插入圖片描述

以上是AI盒子具備的所有功能,由于盒子由python+vue框架開發,支持ubuntu、windows,支持CPU和 GPU,已經經過jetson nano、jetson orin nx高中低3種型號的適配,歡迎有需要的朋友請來電溝通交流(幺捌零叁捌捌伍陸柒零貳,威信與電畫同號),如果需要實物演示效果,可以提供遠程連接或實時視頻查看,目前產品已經經過3個版本(輪詢版本、實時版本、國際化版本),非常成熟,已經在項目中使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713904.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

光柵化算法

多數計算機圖形圖像&#xff0c;是通過光柵顯像顯示給用戶的&#xff0c;這種系統將圖像作為像素陣列進行顯示&#xff0c;像素&#xff08;pixel&#xff09;即圖像元素&#xff08;picture element&#xff09;的簡稱。這些像素采用RGB顏色空間。本文討論光柵顯像的基本原理&…

藍牙耳機哪個好用性價比高?2024熱銷藍牙耳機大測評!選購不焦慮

?近年來&#xff0c;藍牙耳機已經成為了一個非常熱門的選擇&#xff0c;不僅因為它們小巧便捷&#xff0c;還因為它們的防水性能、音質和佩戴體驗已經逐漸超越了有線耳機。隨著越來越多的品牌加入藍牙耳機的市場競爭&#xff0c;各種類型的藍牙耳機層出不窮。特別是對于運動愛…

2024年全國乙卷高考理科數學備考:十年選擇題真題和解析

今天距離2024年高考還有三個多月的時間&#xff0c;今天我們來看一下2014~2023年全國乙卷高考理科數學的選擇題&#xff0c;從過去十年的真題中隨機抽取5道題&#xff0c;并且提供解析。后附六分成長獨家制作的在線練習集&#xff0c;科學、高效地反復刷這些真題&#xff0c;吃…

GEE數據集——GLC_FCS30D - 全球 30 米土地覆被變化數據集(1985-2022 年)

GLC_FCS30D - 全球 30 米土地覆被變化數據集&#xff08;1985-2022 年&#xff09; 注 本數據集是正在提交的論文的一部分&#xff0c;因此沒有引用和 DOI 信息。請在使用本數據集時注意這一點。 GLC_FCS30D 數據集是全球土地覆被監測領域的一項開創性進展&#xff0c;它以 30…

SpringBoot 整合WebService

文章目錄 WebService1.簡單介紹WebService1.1. 類型1.2. 架構1.3. 主要特點1.4. 使用場景1.5. Web服務標準和技術 2.案例-WebServiceDemo2.1.引入配置文件2.2.創建接口2.3.創建接口實現類2.4.創建WebService配置類2.5.測試 WebService Web服務&#xff08;Web Services&#xf…

2024年騰訊云優惠券/代金券領取三個方法整理(收藏級)

騰訊云代金券領取渠道有哪些&#xff1f;騰訊云官網可以領取、官方媒體賬號可以領取代金券、完成任務可以領取代金券&#xff0c;大家也可以在騰訊云百科蹲守代金券&#xff0c;因為騰訊云代金券領取渠道比較分散&#xff0c;騰訊云百科txybk.com專注匯總優惠代金券領取頁面&am…

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么?

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么&#xff1f; 首先&#xff0c;需要確認Docker是否已經安裝。如果未安裝&#xff0c;則需要進行安裝。接下來&#xff0c;運行Docker容器。這一步是為了創建一個可以運行幻獸帕魯服務端的環境。然后&#xff0c;在容器…

民爆5G智能制造工廠數字孿生可視化平臺,推進民爆工業數字化轉型

民爆5G工廠智能制造數字孿生可視化平臺&#xff0c;推進行業數字化轉型。民爆行業作為國家經濟發展的重要支柱產業&#xff0c;其數字化轉型對于提高生產效率、降低成本、保障安全等方面具有重要意義。而民爆5G工廠智能制造數字孿生可視化平臺正是推進行業數字化轉型的關鍵技術…

Flutter中Future和Stream關系

Future和Stream類是Dart異步編程的核心。 Future 表示一個不會立即完成的計算過程。與普通函數直接返回結果不同的是異步函數返回一個將會包含結果的 Future。該 Future 會在結果準備好時通知調用者。 Stream 是一系列異步事件的序列。其類似于一個異步的 Iterable&#xff0c;…

AutoEncoder和 Denoising AutoEncoder學習筆記

參考&#xff1a; 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 寫在前面&#xff1a; 只是直覺上的認識&#xff0c;并沒有數學推導。后面會寫一篇&#xff08;抄&#xff09;大一統文章&#xff08;概率角度理解為什么AE要選擇MSE Loss&#xff09; TOC 1 Au…

1907_Arm Cortex-M3的基本了解

1907_Arm Cortex-M3的基本了解 全部學習匯總&#xff1a; g_arm_cores: ARM內核的學習筆記 (gitee.com) 我發現Arm Coretex-M3有一個專門的DataSheet&#xff0c;看起來這個的確是被當做了一個設計的產品來對待的。正好&#xff0c;基于這個文件來看看M3具備哪些基本的特性&…

GO—變量

Go語言是靜態類型語言&#xff0c;因此變量&#xff08;variable&#xff09;是有明確類型的&#xff0c;編譯器也會檢查變量類型的正確性。 我們從計算機系統的角度來講&#xff0c;變量就是一段或者多段內存&#xff0c;用于存儲數據 1.1 標準格式 var 變量名 變量類型 1 …

vue 使用vue-scroller 列表滑動到底部加載更多數據

安裝插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

多層控制上身姿態的方法

1選擇要施加的clip并調出層控制窗口 2點選motion層控制 3選擇并復制pose&#xff08;注意在哪個層中選中的情況下復制的是那個層中的pose&#xff09; 4在新建層中分別選擇頭幀粘貼pose和尾幀粘貼pose因是上半身&#xff0c;因此mask中把下半身去掉即變灰

提升工作能力的方法

1.接受工作&#xff0c;只問標準 2.請示工作&#xff0c;必帶方案&#xff1b; 3.匯報工作&#xff0c;突出成果&#xff1b; 4.分享工作&#xff0c;細說流程&#xff1b; 5.復盤工作&#xff0c;總結SOP 如果能這么做&#xff0c;那將是一個非常通透的高手&#xff0c;所以高…

如何使用 takeUntil RxJS 操作符來聲明性地管理訂閱

簡介 Angular 處理取消訂閱可觀察對象的操作&#xff0c;比如從 HTTP 服務返回的可觀察對象或者使用 async 管道時。然而&#xff0c;對于其他情況&#xff0c;管理所有訂閱并確保取消長期存在的訂閱可能會變得困難。而且&#xff0c;取消大部分訂閱的策略也會帶來自己的問題。…

2024年春招小紅書前端實習面試題分享

文章目錄 導文面試重點一、方便介紹一下&#xff0c;你之前實習都做了什么嘛&#xff1f;二、 可以講一下封裝組件相關邏輯嘛&#xff1f;1. 為什么要封裝組件&#xff1f;2. 封裝組件的步驟3. 封裝組件的原則4. 組件的復用和擴展5. 組件的維護和文檔 三、項目的性能優化你有什…

python數據結構學習系列

在Python編程中&#xff0c;數據結構是組織、管理和存儲數據的方式&#xff0c;以便能夠有效地執行特定的操作。數據結構的選擇對于算法的效率、代碼的清晰度和可維護性都至關重要。以下是對Python中常見數據結構的學習總結。 列表&#xff08;List&#xff09; 列表是Python中…

selenium測試工具用來模擬用戶瀏覽器的操作

執行JS的類庫&#xff1a;execjs&#xff0c;PyV8&#xff0c;selenium&#xff0c;node pip list pip install selenium pip install xlrd pip install xlwt pip install PyExecJS pip install xlutils selenium測試工具可以用來模擬用戶瀏覽器的操作&#xff0c;其支持的瀏覽…

能當老板的AI大模型多智體框架MetaGPT自動完成項目

能當老板的AI大模型多智體框架MetaGPT自動完成項目。 MetaGPT是一個創新的多智能體框架&#xff0c;它結合了大語言模型&#xff08;LLM&#xff09;和多智能體協作系統&#xff0c;旨在通過模擬人類工作流程來解決復雜問題。這個框架的核心在于將標準化操作程序&#xff08;SO…