猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
前情提要
家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如厕习惯,我计划搭建一个基于视频监控和AI识别的系统,自动识别猫咪进出厕所的行为,记录如厕时间和停留时长,并区分不同猫咪。这样即使我不在家,也能掌握猫咪的健康状态,更安心地照顾它们。
🎓 各位的关注与点赞是我持续分享的最大动力,衷心感谢大家的支持!
📢 欢迎正在攻读硕博学位的同学,或是对人工智能充满热情的朋友们,关注我的个人公众号。在这里,我将持续更新博士期间阅读的前沿论文解读、项目实战经验分享,以及我对AI技术趋势的思考与探讨。
✨ 无论你是科研工作者、工程开发者,还是AI初学者,都能在这里找到干货与灵感。让我们一起交流、成长、探索人工智能的无限可能!
已完成工作:
✅猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取
✅猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
✅猫咪如厕检测与分类识别系统系列【三】 融合yolov11目标检测
✅猫咪如厕检测与分类识别系统系列【四】融合检测日志输出及前端展示界面制作
✅猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新
✅猫咪如厕检测与分类识别系统系列【六】分类模型训练+混合检测分类+未知目标自动更新
✅猫咪如厕检测与分类识别系统系列【七】 当前阶段总结报告
✅猫咪如厕检测与分类识别系统系列【八】 检测推理事件整合+视频推流架构分析
✅猫咪如厕检测与分类识别系统系列【九】 视频检测区域在线绘制+支持摄像头+网络摄像头+整体构建【上】
✅猫咪如厕检测与分类识别系统系列【九】 视频检测区域在线绘制+支持摄像头+网络摄像头+整体构建【下】
✅猫咪如厕检测与分类识别系统系列【十】 视频检测区域动态监测及实时更新
✅猫咪如厕检测与分类识别系统系列【十一】区域进入事件相应逻辑鲁棒性更新
本小节继续更新猫咪进出事件逻辑及日志优化
def log_enter(self, name, enter_time, enter_img, method="classifier", score=0.0):time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")with open("enter_log.txt", "a", encoding="utf-8") as f:f.write(f"[{time_str}] 🟢 {name} 进入区域(方法:{method},评分:{score:.2f}) 图像:{enter_img}\\n")
⚠️ 确保此方法放在类 ToiletLogger
里。
✅ 2. 确认导入的是 更新后的 toilet_logger.py
在 main.py
或 session_tracker.py
中导入时:
from toilet_logger import ToiletLogger
确保这个模块是刚刚更新的那一个路径下的( cat_monitor/toilet_logger.py
)
✅ 3. 重启环境
如果已经改了文件但还在报错,有可能是旧模块缓存没有刷新(特别是在 notebook / 热加载情况下):
# 重启 Python 解释器,确保 log_enter 方法生效
✅ 快速验证(临时测试)
在项目根目录开一个 Python 控制台测试是否含有该方法:
from toilet_logger import ToiletLogger
logger = ToiletLogger()
print(hasattr(logger, "log_enter")) # 应输出 True
如厕记录没有被写入数据库或日志 ,很可能是以下某一部分逻辑出了问题,我们逐一定位:
✅ 一步步排查方向:
✅ 1. 是否进入了 update()
中 in_region 的判断逻辑?
print(f"[DEBUG] 猫进入区域: {cat_name}, 状态: {session['status']}")
确认是不是根本没触发记录逻辑。
✅ 2. 是否正确调用了 log()
或 log_enter()
可以在 CatSessionTracker
中加一行:
print(f"[记录中] 调用 logger.log_enter for {cat_name}")
print(f"[记录中] 调用 logger.log for {cat_name}")
✅ 3. logger.log()
中是否有异常但被静默?
临时加上异常捕获打印看看:
try:self.logger.log(...)
except Exception as e:print(f"[错误] 写入日志失败:{e}")
✅ 4. 检查数据库是否真的写入失败
打开 records/toilet_log.db
,手动查询是否有数据:
sqlite3 records/toilet_log.db
sqlite> SELECT * FROM toilet_logs ORDER BY rowid DESC LIMIT 5;
✅ 最快的恢复方案:
-
输出当前应使用的
CatSessionTracker
+toilet_logger.py
-
包含打印和异常捕获
-
确保进入一次就有图有日志
-
包括一次完整的检测流程样例
经过全量排查并还原一个稳定可运行的检测 + 记录系统核心逻辑 ✅
🎯 目标
阶段 | 行为 | 是否记录 | 截图 | 保存到 |
---|---|---|---|---|
猫进入区域 | ✅ 立即记录 | ✅ | enter_log.txt | |
猫离开区域 | ✅ 如厕结束 | ✅ | toilet_log.db |
✅ 步骤
输出两段最关键的更新版代码,确保能运行:
✅ 1. CatSessionTracker
(完整 + 带 debug 打印)
import time
import cv2
import os
from config.paths import RECORDS_DIR
from collections import defaultdictclass CatSessionTracker:def __init__(self, logger, min_interval=10, min_duration=10):self.logger = loggerself.min_interval = min_intervalself.min_duration = min_durationself.sessions = defaultdict(lambda: {"status": "IDLE","entry_time": None,"last_exit_time": 0,"method": "classifier","score": 0.0})def update(self, frame, result):annotated, cat_name, in_region, method, score = resultif cat_name == "Unknown":print("[跳过] 未识别猫")return annotatedsession = self.sessions[cat_name]now = time.time()# 🟢 猫进入if in_region:if session["status"] == "IDLE" and (now - session["last_exit_time"]) > self.min_interval:print(f"🟢 猫进入:{cat_name}")session["status"] = "ENTERED"session["entry_time"] = nowsession["method"] = methodsession["score"] = scoreenter_img = f"{cat_name}_enter_{int(now)}.jpg"enter_path = os.path.join("static/records", enter_img)cv2.imwrite(os.path.join(RECORDS_DIR, enter_img), frame)session["enter_img"] = enter_pathself.logger.log_enter(cat_name, now, enter_path, method, score)# 🔴 猫离开elif session["status"] == "ENTERED":session["status"] = "IDLE"exit_time = nowsession["last_exit_time"] = exit_timeduration = exit_time - session["entry_time"]if duration >= self.min_duration:print(f"🔴 猫离开:{cat_name},如厕 {int(duration)} 秒")exit_img = f"{cat_name}_exit_{int(now)}.jpg"exit_path = os.path.join("static/records", exit_img)cv2.imwrite(os.path.join(RECORDS_DIR, exit_img), frame)try:self.logger.log(cat_name,session["entry_time"],exit_time,session["enter_img"],exit_path,session["method"],session["score"])except Exception as e:print(f"❌ 写入数据库失败: {e}")else:print(f"⚠️ 猫 {cat_name} 如厕时间太短({int(duration)} 秒),未记录")return annotated
✅ 2. result
的生成方式(在 detector
或 main.py
中应输出的是):
result = (annotated_frame, cat_name, in_region, method, score)
tracker.update(frame, result)
🧠 然而以上代码仍然“没反应”,提供摄像头流和区域判断部分的代码(process_frame
)
没检测到猫咪的时候一直返回的 if cat_name == “Unknown”:
return annotated 根本没有执行到出去
问题的根源是:
当 没有检测到猫咪 或识别失败为
"Unknown"
时,CatSessionTracker.update()
直接return annotated
,完全跳过了“猫是否离开”的判断逻辑 。
❗这会导致的问题
-
猫已经离开了,但因为没有检测出猫,所以逻辑无法触发“离开”状态转移
-
session["status"]
一直卡在ENTERED
,无法恢复为IDLE
-
所有如厕流程卡死在中途
✅ 正确的修复方案:即使识别失败也要判断是否离开区域
我们只需小改这个判断逻辑:
✅ 原错误代码:
if cat_name == "Unknown":return annotated
✅ 修复代码:
if cat_name == "Unknown":# 即使识别失败,也可能是上一只猫已经离开for name, session in self.sessions.items():if session["status"] == "ENTERED":now = time.time()duration = now - session["entry_time"]if duration > self.min_duration:print(f"🔴 {name} 猫可能已离开(当前检测不到),如厕 {int(duration)} 秒")session["status"] = "IDLE"session["last_exit_time"] = now# 可选择:记录“模糊离开”日志或跳过写入return annotated
✅ 或者简洁一点:
if cat_name == "Unknown":# 只有状态为 ENTERED 的猫,且当前帧没有识别出它 → 视为离开for name, session in self.sessions.items():if session["status"] == "ENTERED":print(f"🔴 猫 {name} 可能离开,但当前未识别出任何猫,自动重置状态")session["status"] = "IDLE"session["last_exit_time"] = time.time()return annotated
🎯 只需要:
在 CatSessionTracker.update()
中找到:
if cat_name == "Unknown":return annotated
并改为上述“兜底处理所有 session”的逻辑即可 ✅
但是这样后面的记录如厕 根本执行不到,
所以我们不能一刀切地在 "Unknown"
时直接 return
,否则就永远不会触发:
-
离开区域的判断
-
记录如厕行为的逻辑
✅ 正确的处理方式是:
始终保留上一个已知猫的状态 ,即使当前帧无法识别出猫,也要根据“区域是否空了”来判断猫是否已经离开!
🎯完美兼容“断识别”的情况:
✅ 修改逻辑:
# 猫识别失败时,不直接 return,而是判断之前是否有猫在区域中
if cat_name == "Unknown":for name, session in self.sessions.items():if session["status"] == "ENTERED":# 当前区域为空,说明猫可能已经离开if not in_region:now = time.time()duration = now - session["entry_time"]if duration >= self.min_duration:print(f"🔴 猫 {name} 离开(未被识别),记录如厕 {int(duration)} 秒")session["status"] = "IDLE"session["last_exit_time"] = now# 截图保存exit_img = f"{name}_exit_{int(now)}.jpg"exit_path = os.path.join("static/records", exit_img)cv2.imwrite(os.path.join(RECORDS_DIR, exit_img), frame)self.logger.log(name,session["entry_time"],now,session.get("enter_img", ""),exit_path,session.get("method", "unknown"),session.get("score", 0.0))else:print(f"⚠️ 猫 {name} 离开(未被识别),但如厕时间太短")session["status"] = "IDLE"session["last_exit_time"] = nowreturn annotated
✅ 整体思路简述
-
如果识别不出猫(unknown)
-
就回头看看之前哪只猫状态是
"ENTERED"
-
如果区域现在是空的 → 猫离开 → 自动记录 ✅
以下是 修复后的完整版本 CatSessionTracker.py
,支持:
-
进入时记录 enter 图 & 写日志
-
离开时记录 exit 图 & 写数据库
-
即使识别失败,只要区域空了也能记录“猫已离开”
✅ CatSessionTracker.py
import time
import cv2
import os
from config.paths import RECORDS_DIR
from collections import defaultdictclass CatSessionTracker:def __init__(self, logger, min_interval=10, min_duration=10):self.logger = loggerself.min_interval = min_interval # 两次如厕最短间隔self.min_duration = min_duration # 最短如厕时间self.sessions = defaultdict(lambda: {"status": "IDLE","entry_time": None,"last_exit_time": 0,"method": "classifier","score": 0.0})def update(self, frame, result):annotated, cat_name, in_region, method, score = resultnow = time.time()# 🟡 猫识别失败时,也检查是否有猫要离开if cat_name == "Unknown":for name, session in self.sessions.items():if session["status"] == "ENTERED" and not in_region:duration = now - session["entry_time"]if duration >= self.min_duration:print(f"🔴 猫 {name} 离开(未被识别),记录如厕 {int(duration)} 秒")session["status"] = "IDLE"session["last_exit_time"] = nowexit_img = f"{name}_exit_{int(now)}.jpg"exit_path = os.path.join("static/records", exit_img)cv2.imwrite(os.path.join(RECORDS_DIR, exit_img), frame)self.logger.log(name,session["entry_time"],now,session.get("enter_img", ""),exit_path,session.get("method", "unknown"),session.get("score", 0.0))else:print(f"⚠️ 猫 {name} 离开时间过短,未记录")session["status"] = "IDLE"session["last_exit_time"] = nowreturn annotated# 🟢 猫进入区域session = self.sessions[cat_name]if in_region:if session["status"] == "IDLE" and (now - session["last_exit_time"]) > self.min_interval:print(f"🟢 猫进入:{cat_name}")session["status"] = "ENTERED"session["entry_time"] = nowsession["method"] = methodsession["score"] = scoreenter_img = f"{cat_name}_enter_{int(now)}.jpg"enter_path = os.path.join("static/records", enter_img)cv2.imwrite(os.path.join(RECORDS_DIR, enter_img), frame)session["enter_img"] = enter_pathself.logger.log_enter(cat_name, now, enter_path, method, score)# 🔴 猫识别正常,但已经不在区域 → 离开elif session["status"] == "ENTERED":exit_time = nowduration = exit_time - session["entry_time"]if duration >= self.min_duration:print(f"🔴 猫离开:{cat_name},如厕 {int(duration)} 秒")session["status"] = "IDLE"session["last_exit_time"] = exit_timeexit_img = f"{cat_name}_exit_{int(now)}.jpg"exit_path = os.path.join("static/records", exit_img)cv2.imwrite(os.path.join(RECORDS_DIR, exit_img), frame)self.logger.log(cat_name,session["entry_time"],exit_time,session.get("enter_img", ""),exit_path,method,score)else:print(f"⚠️ 猫 {cat_name} 离开时间太短,未记录")session["status"] = "IDLE"session["last_exit_time"] = exit_timereturn annotated
相关文章:
猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如…...
stm32| 中断标志位和中断挂起位 | TIM_ClearFlag 函数和TIM_ClearITPendingBit 函数
1. 中断标志位(Interrupt Flag) 作用: 中断标志位位于外设寄存器中(如定时器的TIMx_SR、GPIO的EXTI_PR等),用于指示某个特定事件是否发生(例如定时器溢出、GPIO引脚电平变化)。该标志…...
QML Rectangle 组件
基本属性 属性类型默认值描述colorcolor"white"矩形填充颜色border.colorcolor"transparent"边框颜色border.widthint0边框宽度radiusreal0圆角半径gradientGradientnull渐变填充antialiasingbooltrue是否抗锯齿 几何属性 (继承自Item) 属性类型默认值描…...
Spring 学习笔记之 @Transactional详解
一、数据库事务基础 数据库事务(Transaction)是数据库管理系统中用于确保数据一致性和完整性的一种机制。它是一组操作的集合,这些操作要么全部成功,要么全部失败,从而保证数据库状态的正确性。 1.1 事务的基本概念 定…...
绕过UI的cooke和token的验证
很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的验证码方式来防止爬虫、恶意注册等,如果是做自动化,需要绕过 验证码才能进入下一步操作。 方案一、测试环境去除验证码 :最轻松的方法,找开发帮忙…...
2024-04-19| Java: Documented注解学习 JavaDoc
在 Java 中,Documented 是一个元注解(meta-annotation),用于标记其他注解,表明这些注解应该被包含在 JavaDoc 文档中。以下是关于 Documented 注解的作用的简要说明: 作用 记录注解信息到 JavaDoc&#x…...
09-DevOps-Jenkins实现CI持续集成
前面已经把harbor搭建好了,也可以向harbor中推送自定义镜像。 原计划是在Jenkins这台服务器上,完成镜像构建,然后把镜像推送的harbor仓库中。现在改变计划了,Jenkins所在的服务器(192.168.1.10)不负责镜像…...
Java中包装类和泛型
包装类和泛型 包装类装箱和拆箱 泛型泛型的概念泛型的使用泛型的上界 通配符通配符概念通配符上界通配符下界 前言 在Java中,由于基本类型不是继承⾃Object,为了在泛型中可以⽀持基本类型,Java给每个基本类型都对应了⼀个包装类型,…...
小程序 GET 接口两种传值方式
前言 一般 GET 接口只有两种URL 参数和路径参数 一:URL 参数(推荐方式) 你希望请求: https://serve.zimeinew.com/wx/products/info?id5124接口应该写成这样,用 req.query.id 取 ?id5124: app.get(&…...
8、表单控制:预言水晶球——React 19 复杂表单处理
一、水晶球的预言本质 "每个表单都是时空裂缝中的预言容器,"占卜课教授特里劳妮凝视着水晶球,"React-Hook-Form与Formik的融合,让数据捕获如同捕捉未来碎片!" ——以魔法部神秘事务司的预言厅为隐喻…...
Android studio开发——room功能实现用户之间消息的发送
文章目录 1. Flask-SocketIO 后端代码后端代码 2. Android Studio Java 客户端代码客户端代码 3. 代码说明 SocketIO基础 1. Flask-SocketIO 后端代码 后端代码 from flask import Flask, request from flask_socketio import SocketIO, emit import uuidapp Flask(__name_…...
【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)
原件获取列表: 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…...
将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据
文章目录 项目简介GiteeMCP 简介环境要求项目代码核心实现代码MCP 服务端(批量注册 Tool)MCP 客户端(调用 DeepSeek) DeepSeek APIDockersse 连接http 连接 Cherry Studio配置模型配置 MCP调用 MCP 项目简介 在本项目中ÿ…...
接口自动化 ——fixture allure
一.参数化实现数据驱动 上一篇介绍了参数化,这篇 说说用参数化实现数据驱动。在有很多测试用例的时候,可以将测试用例都存储在文件里,进行读写调用。本篇主要介绍 csv 文件和 json 文件。 1.读取 csv 文件数据 首先创建 csv 文件ÿ…...
Datawhale AI春训营学习笔记
数据竞赛Baseline代码全解析:从数据加载到结果输出 一、环境配置与数据加载 1.1 依赖库导入 from netCDF4 import Dataset # 处理气象.nc格式数据 import numpy as np import pandas as pd from sklearn.model_selection import KFold from sklearn.metrics imp…...
关于学习STM32的C语言的知识
数据类型 关键字位数表示范围stdint关键字char8 -128 ~ 127 int8_tunsigned char8 0 ~ 255 uint8_tshort16 -32768 ~ 32767 int16_tunsigned short16 0 ~ 65535 uint16_tint32 -2147483648 ~ 2147483647 int32_t unsigned int32 0 ~ 429496729 uint32_t long32 -2147483648 ~…...
day28 学习笔记
文章目录 前言一、图像添加水印1.ROI操作2.添加水印 二、图像去除噪声1.均值滤波2.方框滤波3.高斯滤波4.中值滤波5.双边滤波6.总结 前言 通过今天的学习,我掌握了OpenCV中有关图像水印以及图像去除噪声的原理以及相关操作 一、图像添加水印 1.ROI操作 ROI操作即之…...
第34讲|遥感大模型对比实战:SAM vs. CLIP vs. iSAM
目录 🔍 一、遥感大模型简要介绍 1️⃣ SAM(Segment Anything Model) 2️⃣ CLIP(Contrastive Language–Image Pretraining) 3️⃣ iSAM(Improved SAM for Remote Sensing) 🧪 二、实战数据集与任务设计 🌟 任务设置: 🧠 三、代码实现片段(以 Python 为…...
EAGLE代码研读+模型复现
要对代码下手了,加油(ง •_•)ง 作者在他们自己的设备上展现了推理的评估结果,受第三方评估认证,EAGLE为目前最快的投机方法(虽然加速度是评估投机解码方法的主要指标,但其他点也值得关注。比如PLD和Lookahead无需额…...
多线程使用——线程安全、线程同步
一、线程安全 (一)什么是线程安全问题 多个线程,同时操作同一个共享资源的时候,可能会出现业务安全的问题。 (二)用程序摹拟线程安全问题 二、线程同步 (一)同步思想概述 解决线…...
基于 Linux 环境的办公系统开发方案
基于 Linux 环境的办公系统开发方案 一、项目概述 1.1 项目背景 在当今数字化办公的时代,高效、稳定且功能丰富的办公系统对于企业和组织的日常运营至关重要。Linux 作为一种开源、稳定且高度可定制的操作系统,拥有庞大的开发者社区和丰富的软件资源&…...
mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
mysql8.0.17以下驱动导致blob映射String乱码问题分析与解决 一、问题复现二、问题深究三、解决方法方法1方法2 一、问题复现 1、docker安装mysql8.0,并创建测试数据库及测试数据表 CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4; use test; CREATE TABLE t…...
Unity Nav Mesh导航系统的简单使用
标题 1.下载。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent组件8.Nav Mesh Obstacle组件9.简单使用 1.下载。 unity2022以上版本要去packageManager中下载。 2.面板位置 3.object面板 Navigation Static:设置该物体是否被列入静态寻路…...
从零开始学A2A五:A2A 协议的安全性与多模态支持
A2A 协议的安全性与多模态支持 一、A2A 协议安全机制 1. 认证机制 A2A 协议采用多层次认证机制,确保智能体身份的真实性和通信的安全性。 基于 Agent Card 的身份认证: {"agent_id": "secure_agent_001","authentication&…...
PyTorch源码编译报错“fatal error: numpy/arrayobject.h: No such file or directory”
记录一下这个bug的fix过程 一开始以为是版本问题,尝试了几个不同版本都不可以,遂排除版本问题的可能 定位 首先 pip list 看到确实安装了这个库 接着 pip show 查看 numpy 库的安装路径 numpy/arrayobject.h 是 NumPy 的 C-API 头文件,其…...
[Java EE] Spring AOP 和 事务
目录 1. AOP 1.1 AOP 概念 1.2 AOP 核心概念 1.3 AOP 作用 2. AOP 详解 2.1 切点(Pointcut) 2.2 连接点(Join Point) 2.3 通知(Advice) 2.4 切面(Aspect) 2.5 通知类型 2.5.1 Around 环绕通知 2.5.2 Before 前置通知 2.5.3 After 后置通知 2.5.4 AfterReturning …...
2025年KBS SCI1区TOP:增强天鹰算法EBAO,深度解析+性能实测
目录 1.摘要2.天鹰算法AO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了增强二进制天鹰算法(EBAO),针对无线传感器网络(WSNs)中的入侵检测系统(IDSs)。由于WSNs的特点是规模…...
适合IIS部署网页应用的编程语言
直接部署在 IIS 上的语言/技术 PHP 使用 FastCGI 模块直接集成安装 PHP Manager for IIS 可简化配置示例配置:在 web.config 中添加处理程序映射指向 php-cgi.exe Node.js 使用 iisnode 模块实现直接集成允许 Node.js 应用在 IIS 进程中运行支持进程管理、负载均衡…...
43.[前端开发-JavaScript高级]Day08-ES6-模板字符串-展开运算符-ES7~ES11
ES6~ES13新特性(二) 1 模板字符串的详解 字符串模板基本使用 标签模板字符串使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content…...
边生成边训练:构建合成数据驱动的在线训练系统设计实战
目录 边生成边训练:构建合成数据驱动的在线训练系统设计实战 一、系统目标与能力总览 ✅ 核心目标: 二、系统架构图(推荐用于PPT展示) 三、关键模块设计解析 ✅ 1. 合成数据生成器模块 ✅ 2. 质量评分器模块 ✅ 3. 在线训…...
AF3 create_alignment_db_sharded脚本main函数解读
AlphaFold3 create_alignment_db_sharded 脚本在源代码的scripts/alignment_db_scripts文件夹下。 该脚本中的 main 函数是整个对齐数据库生成脚本的核心入口,它 orchestrates(编排)了所有流程,从读取链目录到生成 .db 文件、构建索引、处理重复链、写入最终索引文件。 ma…...
52. Java 类和对象 - 什么是隐藏字段?
文章目录 52. Java 类和对象 - 什么是隐藏字段?🎯 参数名称的作用与规则✅ 参数名称的命名规则 🎯 什么是隐藏字段?🚨 问题定义✅ 解决办法:使用 this 关键字 🎯 如何避免隐藏字段带来的困扰&am…...
IntelliJ IDEA右键快捷方式设置方法
IntelliJ IDEA右键快捷方式设置方法 在 IntelliJ IDEA 中设置右键快捷方式快速打开项目或文件(Windows 系统),可以通过以下方法实现: 方法 1:通过注册表添加右键菜单(推荐) 打开注册表编辑器 按…...
深入剖析JavaScript内存泄漏:识别、定位与实战解决
在JavaScript的世界里,开发者通常不必像使用C那样手动管理内存的分配和释放,这得益于JavaScript引擎内置的垃圾回收(Garbage Collection, GC)机制。然而,这并不意味着我们可以完全忽视内存管理。“自动"不等于&qu…...
JVM原理与实战
一、Java虚拟机概述 java程序通过虚拟机实现了java代码的跨平台。 二、java虚拟机运行过程: 类编译器编译java代码为class文件, 类加载器将class文件加载到jvm, 程序计数器控制程序的执行, 虚拟机栈存放局部变量,方法名…...
MCP协议用到的Node.js 和 npm npx
一、Node.js 与 npm、npx 的介绍 Node.js:是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,使您能够在服务器端运行 JavaScript 代码。它广泛用于构建服务器端应用程序和工具。 npm(Node Package Manager):是 Nod…...
如何写 commit message?
前言 每次写 commit message 时,都会纠结用什么动词,格式应该什么样,所以决定总结一下。 查了一下,还是挺复杂的。因为只面向我个人日常使用,所以只进行一些简单的、适合我的总结。 正文 message 分为两部分&#…...
【厦门大学】DeepSeek大模型赋能高校教学和科研
DeepSeek赋能高校教学和科研 引言人工智能发展简史:从图灵测试到大模型时代大模型核心技术解析:构筑智能金字塔DeepSeek赋能高校:打造智能校园生态本地部署方案:安全、高效与定制化兼得教学革新:重塑知识传授与学习体验…...
【专刷】滑动窗口(一)
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
cJSON_Print 和 cJSON_PrintUnformatted的区别
cJSON_Print 和 cJSON_PrintUnformatted 是 cJSON 库中用于将 cJSON 对象转换为 JSON 字符串的两个函数,它们的区别主要在于输出的格式: 1. cJSON_Print 功能:将 cJSON 对象转换为格式化的 JSON 字符串。 特点: 输出的 JSON 字符…...
C 语 言 --- 指 针 4(习 题)
C 语 言 --- 指 针 4(习 题) sizeofstrlen整 型 数 组 - - - int a[ ]字 符 数 组 - - - char arr[ ]字 符 数 组 - - - char arr1[ ]字 符 串 常 量 指 针 - - - char arr[ ]二 维 数 组 - - - char arr[3][4]总结 💻作 者 简 介:…...
可发1区的超级创新思路(python 、MATLAB实现):基于区域注意力双通道MABMA的时间序列预测模型
首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流量预测等领域! 目录 首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流…...
可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型
一、数学模型与原理 1.1 小波变换多尺度分解 输入功率序列 x(t) 经小波变换分解为近似系数 Aj 与细节系数 Dj: 1.2 多尺度TCN特征提取 对每个尺度子序列 {A3,D3,D2,D1} 采用独立TCN: 式中 ∗d 为扩张率 d=2l 的扩张卷积,Wd 为可学习参数。 1.3 多尺度注…...
PyTorch `flatten()` 和 `squeeze()` 区别
PyTorch flatten() 和 squeeze() 区别 在 PyTorch 里,flatten() 和 squeeze(0) 是两个不同的张量操作, 1. flatten() 方法 flatten() 方法用于把一个多维张量展开成一维张量。它会将张量里的所有元素按顺序排列成一个一维序列。 语法 torch.flatten(input, start_dim=...
使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战
前言 在地理信息系统(GIS)领域,地图的可视化呈现至关重要,而样式定义语言(SLD)文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素(如点、线、面、文本等&#x…...
opencv练习
1.创建一个 PyQt 应用程序,该应用程序能够: (1)使用 OpenCV 加载一张图像。 (2)在 PyQt 的窗口中显示这张图像。 (3)提供四个按钮(QPushButton)࿱…...
opencv--基础
opencv OpenCV是一个实现数字图像处理和计算机视觉通用算法的开源跨平台库。 链接 opencv中的cv是什么意思 在OpenCV中,"cv" 是 "Computer Vision"(计算机视觉) 的缩写。 opencv的实现语言 opencv的底层实现代码是使…...
基于模板匹配的信用卡号码识别系统
本项目实现了一个基于模板匹配的信用卡号码识别系统。 1. 导入库和设置参数 # -*- coding: utf-8 -*- # 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils import os# 设置参数 ap argparse.ArgumentParser() # 替换…...
Spring Boot中Excel处理完全指南
文章目录 1. Excel处理基础知识1.1 为什么需要在应用中处理Excel文件?1.2 Java中的Excel处理库介绍1.2.1 Apache POI1.2.2 EasyExcel1.2.3 JExcel1.2.4 Apache POI SXSSF1.3 Spring Boot中集成Excel处理2. 在Spring Boot中集成Excel处理库2.1 集成Apache POI2.1.1 添加依赖2.1…...
洛谷P1312 [NOIP 2011 提高组] Mayan 游戏
题目 #算法/进阶搜索 思路: 根据题意,我们可以知道,这题只能枚举,剪枝,因此,我们考虑如何枚举,剪枝. 首先,我们要定义下降函数down(),使得小木块右移时,能够下降到最低处,其次,我们还需要写出判断函数,判断矩阵内是否有小木块没被消除.另外,我们还需要消除函数,将矩阵内三个相连…...