From ff6f40c972842dd92d53359edf52e802120e722e Mon Sep 17 00:00:00 2001
From: panda_home <1415243231@qq.com>
Date: Tue, 23 Dec 2025 09:15:28 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A7=82=E8=B5=8F=E9=B1=BC=E5=81=A5=E5=BA=B7?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9Fv1.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 10 ++++++++
.idea/misc.xml | 9 ++++++++
.idea/modules.xml | 8 +++++++
.idea/vcs.xml | 7 ++++++
app.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++
fish_fish_.iml | 9 ++++++++
6 files changed, 101 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 app.py
create mode 100644 fish_fish_.iml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b6b1ecf
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 已忽略包含查询文件的默认文件夹
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..fd0d6c6
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..6aa992b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..8306744
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..56a17d5
--- /dev/null
+++ b/app.py
@@ -0,0 +1,58 @@
+# app.py
+import streamlit as st
+import cv2
+from fish_tracker import FishTracker
+
+
+def main():
+ st.set_page_config(layout="wide")
+ st.title("🐟 观赏鱼健康监控系统(笔记本版)")
+
+ # 初始化模型(只加载一次)
+ if 'tracker' not in st.session_state:
+ st.session_state.tracker = FishTracker()
+
+ tracker = st.session_state.tracker
+
+ # 视频显示区域
+ frame_placeholder = st.empty()
+ alert_placeholder = st.empty()
+
+ # 打开摄像头
+ cap = cv2.VideoCapture(0)
+ if not cap.isOpened():
+ st.error("❌ 无法打开摄像头,请检查设备权限。")
+ return
+
+ cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
+ cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
+
+ try:
+ while True:
+ ret, frame = cap.read()
+ if not ret:
+ st.warning("摄像头读取失败")
+ break
+
+ # 处理帧
+ output_frame, alerts = tracker.process_frame(frame)
+
+ # 转为 RGB 显示(Streamlit 要求)
+ rgb_frame = cv2.cvtColor(output_frame, cv2.COLOR_BGR2RGB)
+ frame_placeholder.image(rgb_frame, channels="RGB", width="stretch")
+
+ # 显示告警
+ if alerts:
+ alert_text = "\n\n".join(alerts)
+ alert_placeholder.warning(alert_text)
+ else:
+ alert_placeholder.empty()
+
+ except KeyboardInterrupt:
+ pass
+ finally:
+ cap.release()
+
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/fish_fish_.iml b/fish_fish_.iml
new file mode 100644
index 0000000..89dc99e
--- /dev/null
+++ b/fish_fish_.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file