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