貓咪如廁檢測與分類識別系統系列【九】視頻檢測區域在線繪制+支持攝像頭+網絡攝像頭+整體構建【上】

前情提要


家里養了三只貓咪,其中一只布偶貓經常出入廁所。但因為平時忙于學業,沒法時刻關注牠的行為。我知道貓咪的如廁頻率和時長與健康狀況密切相關,頻繁如廁可能是泌尿問題,停留過久也可能是便秘或不適。為了更科學地了解牠的如廁習慣,我計劃搭建一個基于視頻監控和AI識別的系統,自動識別貓咪進出廁所的行為,記錄如廁時間和停留時長,并區分不同貓咪。這樣即使我不在家,也能掌握貓咪的健康狀態,更安心地照顧它們。
🎓 各位的關注與點贊是我持續分享的最大動力,衷心感謝大家的支持!
📢 歡迎正在攻讀碩博學位的同學,或是對人工智能充滿熱情的朋友們,關注我的個人公眾號。在這里,我將持續更新博士期間閱讀的前沿論文解讀、項目實戰經驗分享,以及我對AI技術趨勢的思考與探討。
? 無論你是科研工作者、工程開發者,還是AI初學者,都能在這里找到干貨與靈感。讓我們一起交流、成長、探索人工智能的無限可能!
在這里插入圖片描述

已完成工作:

?貓咪如廁檢測與分類識別系統系列【一】 功能需求分析及貓咪分類特征提取
?貓咪如廁檢測與分類識別系統系列【二】多圖上傳及貓咪分類特征提取更新
?貓咪如廁檢測與分類識別系統系列【三】 融合yolov11目標檢測
?貓咪如廁檢測與分類識別系統系列【四】融合檢測日志輸出及前端展示界面制作
?貓咪如廁檢測與分類識別系統系列【五】信息存儲數據庫改進+添加貓咪頁面制作+貓咪軀體匹配算法架構更新
?貓咪如廁檢測與分類識別系統系列【六】分類模型訓練+混合檢測分類+未知目標自動更新

?貓咪如廁檢測與分類識別系統系列【七】 當前階段總結報告

?貓咪如廁檢測與分類識別系統系列【八】 檢測推理事件整合+視頻推流架構分析

計劃工作:

? 貓咪管理功能:已完成貓咪照片上傳與名稱登記模塊。
? 多圖上傳與分類特征提取:已支持批量上傳貓咪圖像并自動更新個體特征庫。
? 目標檢測與事件識別集成(YOLOv11): 基本實現
🔄 檢測區域繪制功能:進行中,計劃支持用戶自定義如廁檢測區域。
🔄 事件行為記錄模塊:進行中,將實現如廁進出時間、停留時長等事件記錄功能。
? 檢測結果推流展示:進行中,計劃支持算法結果實時推流。本章將實現頁面MJPEG推理
? 整體運行結果推流整合:待更新,計劃集成檢測圖像與系統狀態為統一視頻流輸出。


本小節將添加一個交互式區域標注功能 ,讓你在前端網頁上手動框選如廁區域,然后保存坐標用于檢測。


在這里插入圖片描述

? 實現方案

🔧 前端功能(HTML + JS)

  • 展示當前攝像頭幀(或靜態圖)

  • 鼠標拖動繪制矩形框

  • 顯示框的坐標 (x1, y1, x2, y2)

  • 提交后將坐標發送給 Flask 后端

🔧 后端 Flask

  • 接收坐標并保存為配置文件(如 region.json

  • inference.py 在啟動時讀取區域配置用于判斷


🎯 示例頁面流程

GET /set-region     → 展示攝像頭圖并支持標框
POST /set-region    → 提交區域坐標保存

  • /set-region 頁面:可交互設置區域

  • 保存為 config/region.json

  • CatDetector 自動加載該區域

? 第一步:自動截圖一幀用于標注

添加一個 Flask 路由 /snapshot,它會:

  • 從當前攝像頭或 RTSP 獲取一幀

  • 保存為 static/snapshot.jpg

  • 用作標注背景圖


? 第二步:創建 /set-region 前端頁面

  • 顯示 snapshot.jpg

  • 鼠標框選區域

  • 顯示坐標

  • 點擊保存后寫入 config/region.json


? 已完成后端部分:


? 說明

路由功能
/snapshot從攝像頭讀取一幀并保存為 static/snapshot.jpg
/set-region打開前端頁面進行手動框選區域
/save-region接收 POST 坐標并保存為 config/region.json

🔜 下一步

添加對應的前端頁面 templates/set_region.html,包含:

  • 顯示圖像

  • 鼠標框選

  • 提交保存區域坐標

? 前端標注頁面 set_region.html 功能包括:

  1. 打開瀏覽器訪問:http://localhost:5000/snapshot
  • 自動截取一幀作為標注背景
  1. 然后訪問:http://localhost:5000/set-region
  • 鼠標拖動標記區域

  • 點擊 “保存區域” 將坐標保存到 config/region.json

  1. 后續在 CatDetector 中讀取并使用區域:
with open("config/region.json") as f:self.toilet_region = tuple(json.load(f).values())

然后在 CatDetector 中加上自動讀取 region.json 的功能?這樣可以完全替代硬編碼區域 (100, 100, 400, 400)inference.py 自動加載區域配置的集成


📌 區域設置邏輯更新如下:

  • 啟動時嘗試讀取 config/region.json

  • 如果存在 → 使用手動標注區域

  • 如果不存在 → 使用默認區域 (100, 100, 400, 400) 并打印警告


🚀 現在完整使用流程:

  1. 打開攝像頭截圖:http://localhost:5000/snapshot

  2. 打開手動標注:http://localhost:5000/set-region

  3. 框選區域并保存

  4. 系統將自動加載你框出的區域用于如廁判斷


<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>設置如廁區域</title><style>canvas { border: 2px solid #333; cursor: crosshair; }#coords { margin-top: 10px; font-weight: bold; }</style>
</head>
<body>
<h2>🐱 設置如廁區域</h2>
<canvas id="canvas"></canvas>
<div id="coords">區域: (x1, y1) → (x2, y2)</div>
<button onclick="saveRegion()">保存區域</button><script>
const img = new Image();
img.src = "/static/snapshot.jpg";
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');let startX, startY, endX, endY, isDrawing = false;img.onload = () => {canvas.width = img.width;canvas.height = img.height;ctx.drawImage(img, 0, 0);
};canvas.onmousedown = (e) => {isDrawing = true;startX = e.offsetX;startY = e.offsetY;
};canvas.onmousemove = (e) => {if (!isDrawing) return;endX = e.offsetX;endY = e.offsetY;ctx.drawImage(img, 0, 0);ctx.strokeStyle = 'red';ctx.lineWidth = 2;ctx.strokeRect(startX, startY, endX - startX, endY - startY);document.getElementById('coords').innerText = `區域: (${startX}, ${startY}) → (${endX}, ${endY})`;
};canvas.onmouseup = () => isDrawing = false;function saveRegion() {const region = {x1: Math.min(startX, endX),y1: Math.min(startY, endY),x2: Math.max(startX, endX),y2: Math.max(startY, endY)};fetch('/save-region', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(region)}).then(res => res.json()).then(data => {alert('? 區域保存成功!');});
}
</script>
</body>
</html>

可以將該文件保存為 templates/set_region.html。訪問 /snapshot 截圖后,再訪問 /set-region 進行區域標注。
接下來實現在一個頁面上 輸入地址,然后截圖,然后選擇坐標,流程如下

? 輸入 RTSP 地址

? 點擊「截圖」抓取攝像頭畫面

? 鼠標框選如廁區域

? 保存區域坐標
全部集成到 一個前端頁面 中,交互非常清晰!


? 頁面結構設計

功能區域描述
📥 輸入框手動填寫 RTSP 地址
🎬 截圖按鈕請求后端從該地址截圖
🖼? 圖像顯示區顯示截圖并支持框選區域
💾 保存按鈕提交所框選的坐標(保存為 region.json)

🧪 使用方式:

  1. 訪問 /set-region

  2. 輸入 RTSP 地址(或攝像頭路徑)

  3. 點擊【📸 截圖】,自動生成并顯示圖片

  4. 用鼠標框選區域,點擊【保存區域】

  5. 坐標將保存在 config/region.json


🧠 inference.py 會自動加載 region.json 并使用你選定的區域進行判斷。
你現在已經擁有前端交互設置 + 實時應用識別 的完整閉環了!剛剛已經實現了手動標注如廁區域并保存為 config/region.json,現在你只需要確保 CatDetector 自動讀取這個配置。


之前的 inference.py 中已經包含了這個邏輯 ?:

def _load_region(self):try:with open("config/region.json") as f:data = json.load(f)return (data['x1'], data['y1'], data['x2'], data['y2'])except Exception as e:print("?? 無法加載區域配置,使用默認區域 (100, 100, 400, 400)")return (100, 100, 400, 400)

只需要在 __init__ 中有這行就可以:

self.toilet_region = self._load_region()

最后,只要保證:

self.toilet_region = self._load_region()

就能讓系統自動加載你剛剛前端標注并保存的區域了。


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

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

相關文章

【AI插件開發】Notepad++ AI插件開發實踐:支持多平臺多模型

引言 上篇文章我們的Notepad插件介紹到Dock窗口集成&#xff0c;本篇將繼續完善插件功能&#xff0c;主要包括兩個部分&#xff1a; 支持多平臺、多模型支持多種授權驗證、接口類型 一、多平臺 原先的配置項很簡單&#xff1a; // PluginConf.h class PlatformConf { publ…

【C#】Socket通信的使用

在C#中&#xff0c;Socket通信是一種用于實現網絡通信的底層技術。通過Socket&#xff0c;程序可以在網絡上與其他設備進行數據交換。以下是如何使用C#中的System.Net.Sockets命名空間來實現Socket通信的詳細步驟。 1. Socket通信的基本概念 Socket: 一個Socket是網絡通信的端…

2024年第九屆團隊程序設計天梯賽c++題解L1-L3-1(附PTA網址)

L1-1 編程解決一切 5分 L1-097 編程解決一切 - 團體程序設計天梯賽-練習集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId1781658570803388416 #include<bits/stdc.h> #define int long long using namesp…

ICMAN防水觸摸芯片 - 復雜環境下精準交互,提升觸控體驗

▍核心優勢 ◆ 超強抗干擾能力 ◆ 工業級設計&#xff0c;一致性和穩定性好 ▍提供場景化解決方案 【智能廚電矩陣】抽油煙機檔位調節 | 電磁爐火力觸控 | 洗碗機模式切換 【衛浴設備方案】淋浴房霧化玻璃控制 | 智能馬桶觸控面板 | 浴缸水位感應 【工業控制應用】儀器儀…

Golang|抽獎相關

文章目錄 抽獎核心算法生成抽獎大轉盤抽獎接口實現 抽獎核心算法 我們可以根據 單商品庫存量/總商品庫存量 得到每個商品被抽中的概率&#xff0c;可以想象這樣一條 0-1 的數軸&#xff0c;數軸上的每一段相當于一種商品&#xff0c;概率之和為1。 抽獎時&#xff0c;我們會生…

OpenCV 圖形API(43)顏色空間轉換-----將 BGR 圖像轉換為 LUV 色彩空間函數BGR2LUV()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將圖像從BGR色彩空間轉換為LUV色彩空間。 該函數將輸入圖像從BGR色彩空間轉換為LUV。B、G和R通道值的傳統范圍是0到255。 輸出圖像必須是8位無符…

【Python】用Python寫一個俄羅斯方塊玩玩

【Python】用Python寫一個俄羅斯方塊玩玩 一、引言1.成品效果展示 二、思考準備1.思考設計2.代碼設計2.1 游戲頁面2.2 控件設計2.2.1 方塊生成2.2.2 方塊碰撞2.2.3 方塊消融2.2.4 游戲主循環2.2.5 游戲窗口 三、游戲完整版 一、引言 今日看到侄子在玩游戲&#xff0c;湊近一看…

維港首秀!沃飛長空AE200亮相香港特別行政區

4月13日-16日&#xff0c;第三屆香港國際創科展在香港會議展覽中心盛大舉辦。 作為國內領先、國際一流的eVTOL主機廠&#xff0c;沃飛長空攜旗下AE200批產構型登陸國際舞臺&#xff0c;以前瞻性的創新技術與商業化應用潛力&#xff0c;吸引了來自全球17個國家及地區的行業領袖…

Openfein實現遠程調用的方法(實操)

文章目錄 環境準備一、URL中接收參數二、接收一個參數三、接收多個參數四、傳遞對象五、傳遞JSON格式數據 環境準備 下面的配置&#xff0c;服務調用方加入即可。 依賴導入&#xff1a; <!-- openfeign依賴--><dependency><groupId>org.springframe…

Bright+Data網頁解鎖器:旅游行業數據革命的“隱形引擎”

在數字經濟浪潮中&#xff0c;旅游行業正經歷前所未有的變革。當消費者指尖滑動間完成跨國酒店預訂&#xff0c;當航空公司每秒調整萬次艙位價格&#xff0c;背后是一場無聲的數據戰爭。而在這場戰爭中&#xff0c;BrightData網頁解鎖器正成為旅游企業破局的關鍵武器——它像一…

OpenCV 圖形API(38)圖像濾波-----Sobel 算子操作函數Sobel()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::gapi::Sobel 函數是 OpenCV 的 G-API 模塊中用于執行 Sobel 算子操作的一個函數&#xff0c;主要用于圖像的邊緣檢測。Sobel 算子通過計算圖…

CS5346 - Interactivity in Visualization 可視化中的交互

文章目錄 Visualization representation interactionInteraction &#xff08;交互&#xff09;Benefits (好處)Typical Interaction Techniques&#xff08;交互技術&#xff09;SelectFilteringAbstract / Elaborate幾何放縮&#xff08;Geometric zoom)語義放縮&#xff0…

第十六屆藍橋杯大賽軟件賽省賽 C++ 大學 B 組 部分題解

賽時參加的是Python組&#xff0c;這是賽后寫的題解&#xff0c;還有兩題暫時還不會&#xff0c;待更新 題目鏈接題目列表 - 洛谷 | 計算機科學教育新生態 A 移動距離 答案&#xff1a;1576 C 可分解的正整數 Python3 import itertools from functools import cmp_to_ke…

Vue 解決 Error: please transfer a valid prop path to form item!

在 Vue.js 中使用表單驗證庫&#xff08;如 VeeValidate 或 Element UI 的表單組件時&#xff09;&#xff0c;遇到錯誤信息 "please transfer a valid prop path to form item!" 通常指的是在表單項的屬性綁定中&#xff0c;路徑&#xff08;prop path&#xff09;不…

在 Visual Studio Code 中安裝通義靈碼 - 智能編碼助手

高效的編碼工具對于提升開發效率和代碼質量至關重要。 通義靈碼作為一款智能編碼助手&#xff0c;為開發者提供了全方位的支持。 本文將詳細介紹如何在 Visual Studio Code&#xff08;簡稱 VSCode&#xff09;中安裝通義靈碼&#xff0c;以及如何進行相關配置以開啟智能編碼…

SQL 解析 with as dual sysdate level

目錄 sql的運行順序 with as EXTRACT ?編輯 dual sysdate level ?編輯 ?編輯 Oracle中的日期存儲 核心部分 拆解字符串并計算最小值 關聯子查詢 NVL 函數 REGEXP_SUBSTR() sql的運行順序 <select id="getTrendList" parameterType="java.uti…

快手OneRec 重構推薦系統:從檢索排序到生成統一的躍遷

文章目錄 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成會話列表2.4 利用獎勵模型進行迭代偏好對齊2.4.1 訓練獎勵模型2.4.2 迭代偏好對齊 3. 總結 昨天面試的時候聊到了OneRec&#xff0c;但是由于上次看這篇文章已經是一個月之前&#xff0c;忘得差不多了&#xff0c…

軟考高級系統架構設計師-第11章 系統架構設計

【本章學習建議】 根據考試大綱&#xff0c;本章不僅考查系統架構設計師單選題&#xff0c;預計考12分左右&#xff0c;而且案例分析和論文寫作也是必考&#xff0c;對應第二版教材第7章&#xff0c;屬于重點學習的章節。 軟考高級系統架構設計師VIP課程https://edu.csdn.net/…

selenium之文件下載

Selenium 自動化測試&#xff1a;輕松搞定文件下載 在 Web 自動化測試中&#xff0c;經常會遇到需要驗證文件下載功能的場景。例如&#xff0c;測試報告的導出、用戶上傳文件的下載、PDF 文檔的生成與下載等等。Selenium 本身并沒有直接處理文件下載的內置方法&#xff0c;但我…

基于遷移學習實現肺炎X光片診斷分類

大家好&#xff0c;我是帶我去滑雪&#xff01; 肺炎是全球范圍內致死率較高的疾病之一&#xff0c;尤其是在老年人、免疫系統較弱的患者群體中&#xff0c;更容易引發嚴重并發癥。傳統上&#xff0c;肺炎的診斷依賴于醫生的臨床經驗以及影像學檢查&#xff0c;尤其是X光片&…