基于 YOLO11 的宠物猫日常行为识别系统 | 用于行为健康预警、猫舍远程管理、活动量量化分析 | 附完整源码与效果演示
基于 YOLO11 的宠物猫日常行为识别系统一套面向宠物家庭、猫舍寄养与宠物医院观察场景的视觉行为识别方案使用 YOLO11n Streamlit 构建可实时识别趴卧 / 坐姿 / 睡眠 / 站立四类猫咪日常行为辅助饮食、活动量与健康洞察。一、背景1.1 行业痛点养猫家庭和猫舍寄养机构普遍面临三个问题白天看不到猫——上班期间想知道主子在干嘛只能事后回看监控录像健康预警靠经验——猫的厌食、活动量骤降往往晚发现两三天错过最佳干预窗口远程关怀缺手段——传统宠物相机只能看见画面无法对行为做结构化分析。本项目把看视频升级为读行为摄像头采集 → YOLO11 检测 → 行为分类汇总给铲屎官、猫舍管理员和宠物医生一个可量化、可告警的猫咪行为台账。数据集来自真实室内场景约 2000 张高质量标注图覆盖不同光照、不同背景按 YOLO 格式组织train / valid / test四个类别nc4趴卧 / 坐姿 / 睡眠 / 站立。视频演示与源码下载https://www.bilibili.com/video/BV1rS7R6uEfp包含完整项目源码预训练模型权重️数据集1.2 项目运行效果Web 界面总览紫橙撞色的宠物科技风侧栏聚合品类、场景、部署信息单张图片识别效果左原图右标注图下方为类别统计与置信度分布批量图片行为分析1.3 项目介绍创新点 / 亮点维度说明行为粒度细四类静态行为趴/坐/睡/站可作为长期活动量统计的基础原子配置即业务project.yaml描述行业、场景、部署、行为亮点前端 0 代码定制品牌中文类名训练就用中文标签前端无需翻译对非技术用户更友好多源接入同一 UI 支持单图、批量、视频、摄像头四种模式零部署门槛系统功能概览单张图片识别上传图片即得标注图 行为分布 类别置信度批量图片识别多图或 ZIP 上传自动汇总猫咪当天主要行为占比视频行为分析逐帧识别 时间线分布导出标注视频与行为明细 CSV摄像头实时检测浏览器拉本机摄像头单帧推理输出实时行为技术栈层级技术选型检测模型YOLO11nUltralyticsWeb 框架Streamlit图像处理OpenCV、Pillow数据 / 图表Pandas、Streamlit 内置图表视频编解码imageio-ffmpeg部署Python 3.9本地 / 容器 / 边缘盒子 均可类别定义nc4names[趴卧,坐姿,睡眠,站立]。二、设计框架系统架构┌────────────────────────────────────────────────────────────┐ │ 用户浏览器铲屎官 / 猫舍管理员 │ │ 单张图片 │ 批量图片 │ 视频 │ 摄像头 │ └──────────────────────┬─────────────────────────────────────┘ │ HTTP / WebSocket ┌──────────────────────▼─────────────────────────────────────┐ │ Streamlit App (app/streamlit_app.py) │ │ · 模式路由st.radio │ │ · 上传 / 预览 / 行为分布图 │ │ · 行业品牌渲染project.yaml 驱动 │ └──────────────────────┬─────────────────────────────────────┘ │ model.predict(conf0.25, iou0.7) ┌──────────────────────▼─────────────────────────────────────┐ │ YOLO11n 推理引擎 │ │ Backbone (C2f SPPF) → Neck (FPN PAN) → Decoupled Head │ │ DFL分布式回归 → NMS │ └──────────────────────┬─────────────────────────────────────┘ │ result.boxes (cls, conf, xyxy) ┌──────────────────────▼─────────────────────────────────────┐ │ 后处理类别映射 → DataFrame 明细 → 行为占比 / 置信度 │ └────────────────────────────────────────────────────────────┘YOLO11 网络结构沿用 v8 主干更轻更深BackboneConv C2f堆叠下采样 5 次末端SPPF融合多尺度特征NeckFPN自顶向下语义PAN自底向上定位双向特征金字塔Head解耦头 DFL分布回归小目标 / 模糊轮廓定位更稳损失BCE分类 CIoU DFL回归检测流程图像/帧 → letterbox 至 imgsz640 → 推理 → 置信度过滤conf0.25 → NMSiou0.7 → 类别映射 → 前端图表渲染。三、代码结构核心 50 行 解析项目结构宠物猫行为识别/ ├── app/streamlit_app.py # Streamlit Web 入口 ├── configs/project.yaml # 业务配置行业、场景、部署、UI 主题 ├── model/best.pt # YOLO11n 训练权重 ├── scripts/ # 训练 / 评测 / 导出脚本 ├── data/dataset/ # train / valid / test └── 猫的四种行为检测train_CH_yolo11n/train/ # 训练产物核心 50 行精简版frompathlibimportPathimportpandasaspdimportstreamlitasstimportyamlfromultralyticsimportYOLO PROJECT_ROOTPath(__file__).resolve().parent.parent CONFIG_PATHPROJECT_ROOT/configs/project.yamlMODEL_PATHPROJECT_ROOT/model/best.ptAPP_CONFIGyaml.safe_load(open(CONFIG_PATH,r,encodingutf-8))APP_METAAPP_CONFIG.get(app,{})INFERAPP_CONFIG.get(inference,{})DEFAULT_CONFfloat(INFER.get(conf,0.25))# project.yaml 驱动DEFAULT_IOUfloat(INFER.get(iou,0.7))st.cache_resource(show_spinnerFalse)defload_model(model_path:str)-YOLO:returnYOLO(model_path)# 全局缓存避免反复加载definfer_image(model:YOLO,image_path:Path,conf:float):resultmodel.predict(str(image_path),confconf,iouDEFAULT_IOU,verboseFalse)[0]annotatedresult.plot()# 直接拿到带框图rows[]ifresult.boxesisnotNone:forboxinresult.boxes:cls_idint(box.cls.item())rows.append({class_id:cls_id,class_name:result.names[cls_id],# 趴卧 / 坐姿 / 睡眠 / 站立confidence:round(float(box.conf.item()),4),x1:float(box.xyxy[0][0]),y1:float(box.xyxy[0][1]),x2:float(box.xyxy[0][2]),y2:float(box.xyxy[0][3]),})returnannotated[:,:,::-1],pd.DataFrame(rows)# BGR - RGB# ---------------- Streamlit 主流程 ----------------st.set_page_config(page_titleAPP_META.get(title),layoutwide)modelload_model(str(MODEL_PATH))confst.sidebar.slider(置信度阈值,0.05,0.95,DEFAULT_CONF,0.05)modest.radio(输入类型,[单张图片,批量图片,视频,摄像头],horizontalTrue)ifmode单张图片:uploadedst.file_uploader(上传待检测图片,type[jpg,png,jpeg])ifuploadedisnotNone:# 写到临时文件再走 infer_image省去手动 numpy decodetmpPath(/tmp)/uploaded.name tmp.write_bytes(uploaded.getvalue())annotated,dfinfer_image(model,tmp,conf)col1,col2st.columns(2)col1.image(uploaded.getvalue(),caption原图,widthstretch)col2.image(annotated,caption检测结果,widthstretch)st.bar_chart(df[class_name].value_counts())st.dataframe(df,widthstretch)逐段解析yaml.safe_load(project.yaml)INFER.get(...)所有推理参数conf、iou、批量上限都从配置读取调超参不用改代码对运营友好。st.cache_resource缓存YOLO(model_path)避免 Streamlit 每次交互重建模型首屏后单图响应稳定在 100ms 内。model.predict一行完成预处理 推理 NMS返回Results.plot()直接生成带标签框的 ndarray配合[:, :, ::-1]转回 RGB 喂给 Streamlit。result.boxes迭代得到cls / conf / xyxy组成 DataFrame既可前端展示也可一键导出 CSV 入库做长期行为趋势分析。st.radioif/elif路由四种输入模式模型一次加载、四个入口共享新增摄像头流等模式只需复用infer_image。四、训练效果训练采用 YOLO11n 预训练权重微调epochs200, imgsz640, batch16, patience50。best.pt对应的最佳指标指标数值Precision (B)0.885Recall (B)0.819mAP0.50.879mAP0.5:0.950.680PR 曲线mAP0.5 0.8794 类整体表现均衡归一化混淆矩阵对角线主导睡眠 / 趴卧之间有轻度混淆——两类静态姿态在某些视角下确实视觉接近符合预期类别分布从分布图看四类样本基本均衡目标尺寸集中在画面中等区域模型不会因尺度极端而退化。五、项目总结做对了什么业务话术、行业、部署形态全在project.yaml前端render_industry_panel自动渲染品牌区同一套代码可换皮卖到不同宠物 SaaS。中文类别 紫橙撞色 UI对非技术用户猫舍管理员、铲屎官友好不需要任何前置培训。推理函数返回(annotated, DataFrame)单图 / 批量 / 视频 / 摄像头复用同一份逻辑扩展新模式成本极低。还能怎么做引入时序模型LSTM / TimesNet做行为序列分类把单帧坐姿汇聚成持续端坐 30 分钟等可告警事件。加入个体重识别Re-ID多猫家庭可分别为每只猫建立行为画像。结合营养数据 体重秤把行为占比与健康指标联动做饮食 / 活动 / 体重三联监测。边缘部署YOLO11n 单帧 5msCPU、 1msGPU再做 INT8 量化后可塞进宠物摄像头本地芯片。一句话总结YOLO11n Streamlit 把看监控升级为读行为给宠物科技产品一个可立即落地、可配置化复用的视觉底座从家庭萌宠到连锁猫舍都能一键铺开。