commit ff6f40c972842dd92d53359edf52e802120e722e Author: panda_home <1415243231@qq.com> Date: Tue Dec 23 09:15:28 2025 +0800 观赏鱼健康系统v1.0 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