当前位置: 首页 > news >正文

猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新

前情提要


家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如厕习惯,我计划搭建一个基于视频监控和AI识别的系统,自动识别猫咪进出厕所的行为,记录如厕时间和停留时长,并区分不同猫咪。这样即使我不在家,也能掌握猫咪的健康状态,更安心地照顾它们。

已完成工作:

✅猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取
✅猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
✅猫咪如厕检测与分类识别系统系列【三】 融合yolov11目标检测
✅猫咪如厕检测与分类识别系统系列【四】融合检测日志输出及前端展示界面制作

计划工作:

✅ 猫咪管理功能:已完成猫咪照片上传与名称登记模块。
✅ 多图上传与分类特征提取:已支持批量上传猫咪图像并自动更新个体特征库。
✅ 目标检测与事件识别集成(YOLOv11):功能开发中,正在实现猫咪行为自动识别。
⏳ 检测区域绘制功能:待开发,计划支持用户自定义如厕检测区域。
🔄 事件行为记录模块:进行中,将实现如厕进出时间、停留时长等事件记录功能。
⏳ 检测结果推流展示:待更新,计划支持算法结果实时推流。
⏳ 整体运行结果推流整合:待更新,计划集成检测图像与系统状态为统一视频流输出。
我们现在进行两项升级:

  1. 将如厕记录 存储到 SQLite 数据库
  • 替代 CSV 存储方式
  • 使用 SQLite 存储字段:猫名、进入时间、离开时间、如厕时长、图片路径等
  1. 前端页面支持 上传猫脸图 & 添加猫
  • 用户可以从 Web 上传图片 + 猫名

  • 自动提特征并写入猫数据库(支持多图上传)


🗂️ 本章节会包括:

模块内容
toilet_logger.py改写为使用 SQLite 存储记录
cat_database.db存储如厕记录表 toilet_logs
Flask 页面上传猫图上传猫图 + 猫名,调用特征提取器 + 保存
Flask 页面展示改为从数据库查询展示记录

完成 SQLite 日志存储 + 查询展示(如厕记录页改数据库)
如厕记录系统已升级为使用 SQLite 数据库 存储,文件为:

records/toilet_log.db

表结构:toilet_logs(name, enter_time, exit_time, duration, enter_image, exit_image)


更新 Flask 页面,改为从数据库中查询记录并展示到表格中。

# app.py (使用 SQLite 显示如厕记录)from flask import Flask, render\_template, requestimport sqlite3import osapp \= Flask(\_\_name\_\_, static\_url\_path\='')DB\_PATH \= "records/toilet\_log.db"@app.route('/')def index():query \= request.args.get('q', '').lower()records \= \[\]if os.path.exists(DB\_PATH):conn \= sqlite3.connect(DB\_PATH)cursor \= conn.cursor()cursor.execute("SELECT name, enter\_time, exit\_time, duration, enter\_image, exit\_image FROM toilet\_logs ORDER BY id DESC")for row in cursor.fetchall():if query in row\[0\].lower():records.append({'Name': row\[0\],'Enter Time': row\[1\],'Exit Time': row\[2\],'Duration(s)': row\[3\],'Enter Image': row\[4\],'Exit Image': row\[5\]})conn.close()return render\_template('index.html', records\=records, query\=query)if \_\_name\_\_ \== '\_\_main\_\_':app.run(debug\=True)

✅ Flask 页面后端已完成更新,现在从 SQLite 数据库读取如厕记录,并支持通过 URL 查询参数 q 进行猫咪名称筛选。


✅ 接下来是 HTML 页面改造:

  • 输入框支持搜索(发送请求到 /?q=猫名

  • 保留图片预览功能

  • 所有记录从数据库加载

html_updated = """
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>猫咪如厕记录</title><style>body { font-family: Arial, sans-serif; margin: 20px; background-color: #f9f9f9; }h2 { color: #333; }table { width: 100%; border-collapse: collapse; margin-top: 20px; }th, td { border: 1px solid #ccc; padding: 10px; text-align: center; }th { background-color: #e0e0e0; }input[type="text"] { padding: 6px; width: 240px; margin-bottom: 15px; }.thumbnail { height: 80px; cursor: pointer; border-radius: 6px; }.modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;background-color: rgba(0, 0, 0, 0.7); align-items: center; justify-content: center; }.modal img { max-width: 80%; max-height: 80%; border-radius: 10px; }</style>
</head>
<body><h2>🐱 猫咪如厕记录</h2><form method="get" action="/"><input type="text" name="q" value="{{ query }}" placeholder="输入猫咪名字筛选..."><button type="submit">搜索</button></form><table id="recordTable"><thead><tr><th>猫咪</th><th>进入时间</th><th>离开时间</th><th>如厕时长 (秒)</th><th>进入图</th><th>离开图</th></tr></thead><tbody>{% for r in records %}<tr><td>{{ r['Name'] }}</td><td>{{ r['Enter Time'] }}</td><td>{{ r['Exit Time'] }}</td><td>{{ r['Duration(s)'] }}</td><td><img src="{{ '/' + r['Enter Image'] }}" class="thumbnail" onclick="showModal(this.src)"></td><td><img src="{{ '/' + r['Exit Image'] }}" class="thumbnail" onclick="showModal(this.src)"></td></tr>{% endfor %}</tbody></table><div class="modal" id="imgModal" onclick="hideModal()"><img id="modalImg" src=""></div><script>function showModal(src) {document.getElementById("modalImg").src = src;document.getElementById("imgModal").style.display = "flex";}function hideModal() {document.getElementById("imgModal").style.display = "none";}</script>
</body>
</html>
"""with open("cat_monitor/web/templates/index.html", "w", encoding="utf-8") as f:f.write(html_updated)"index.html 页面已更新,支持 SQLite 查询并带搜索功能。"

✅ 前端页面已更新,现在支持:

  • 从 SQLite 查询如厕记录

  • 输入猫名关键词搜索(带刷新保留结果)

  • 缩略图展示 + 点击预览大图


📍访问方式:

cd cat_monitor/web
python app.py

浏览器打开: http://127.0.0.1:5000/


图片路径无法访问问题原因分析:

图片无法展示,说明 图片路径不对Flask 无法找到图片文件。当前的记录表中,图片路径是这样的:

records/cat_name_enter_123456.jpg

但 Flask 默认只能访问 static/ 下的资源。


✅ 解决方案:

✅ 1. 把保存的图片改为放在 web/static/records/ 目录

修改你的 main.py 中这两行保存图片的位置:

cv2.imwrite("web/static/records/xxx.jpg", frame)

同时,保存路径传给数据库的也要改为相对路径,例如:

enter_img = f"static/records/{cat_name}_enter_{int(entry_time)}.jpg"

这样 Flask 页面显示时用:

<img src="/static/records/{{ r['Enter Image'] }}" ...>

✅ 2. 或者:设置 Flask 支持访问 /records/

如果你不想改文件保存位置,也可以在 Flask 中暴露 records 目录:

app = Flask(__name__, static_url_path='')# 添加这行让 Flask 能访问 records/ 里的图片
@app.route('/records/<path:filename>')
def serve_record_file(filename):from flask import send_from_directoryreturn send_from_directory('../records', filename)

然后前端页面这样写:

<img src="/records/{{ r['Enter Image'].split('/')[-1] }}" class="thumbnail">

✅ 推荐方式(更整洁):

我们规范所有图像都放到:

cat_monitor/web/static/records/

并使用 Flask 默认 static 路由 /static/... 展示即可。

🧩 进一步功能增强:

✅ 1. 【猫图上传页面】

  • Web 页面上传猫脸图 + 名字

  • 多图批量上传(改进识别稳定性)

  • 自动提取特征并存入猫数据库


✅ 2. 【统计功能】

  • 每只猫如厕频率统计(柱状图)

  • 如厕时长统计(平均、总和)

  • 趋势图(按日期汇总)


✅ 3. 【记录导出】

  • 记录导出为 CSV / Excel

  • 可按猫名 / 时间筛选后导出



1.猫图上传页面

✅ 之前已经创建了独立路由 /add_cat 支持:

  • 猫名输入

  • 批量上传猫脸图

  • 自动提取特征,保存识别样本

  • 上传成功后提示处理结果


接下来我会写页面模板 add_cat.html,支持:

  • 猫名输入框

  • 多图上传控件

  • 上传进度提示 / 成功信息

下面是其HTML 页面,并把它集成到原 Flask 页面的顶部菜单里作为一个导航入口。

html_addcat = """
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>添加猫咪</title><style>body { font-family: Arial, sans-serif; margin: 20px; }h2 { color: #333; }form { background: #f9f9f9; padding: 20px; border-radius: 8px; }input[type="text"], input[type="file"] {padding: 8px; width: 300px; margin-bottom: 10px;}input[type="submit"] {padding: 8px 16px; background: #4CAF50; color: white; border: none; border-radius: 4px;}.message { margin-top: 15px; color: green; }a { display: inline-block; margin-top: 15px; color: #007BFF; text-decoration: none; }</style>
</head>
<body><h2>📤 添加猫咪识别样本</h2><form method="POST" enctype="multipart/form-data"><label>猫咪名字:</label><br><input type="text" name="name" required><br><br><label>上传猫脸图片(可多选):</label><br><input type="file" name="images" multiple accept="image/*" required><br><br><input type="submit" value="上传并添加"></form>{% if message %}<div class="message">{{ message }}</div>{% endif %}<a href="/">← 返回如厕记录页</a>
</body>
</html>
"""with open("cat_monitor/web/templates/add_cat.html", "w", encoding="utf-8") as f:f.write(html_addcat)"已创建上传猫图页面 add_cat.html,可集成入口按钮到主页面。"

✅ 上传猫图页面 add_cat.html 已创建完毕。接下来我们将它集成到主页面(如厕记录页)里,方式如下:


🔧 集成步骤

index.html 顶部添加导航链接,例如放在 <body> 下:

<a href="/add_cat" style="text-decoration: none; background: #4CAF50; color: white; padding: 8px 12px; border-radius: 4px;">➕ 添加猫咪</a>

我可以立即为你修改 index.html 文件,是否现在执行?你也可以告诉我更偏好的按钮样式或放置位置~


✅ 2. 增加统计图表功能

功能目标:

  • 显示每只猫如厕的 频率统计(柱状图)

  • 显示每只猫的 平均如厕时长(可选)

  • 使用 Chart.js 进行前端可视化

具体实现步骤如下:

  1. 更新后端 SQL 查询逻辑,支持:

    • 按猫名聚合统计频率和平均时长

    • 按日期筛选记录(支持 URL 参数)

  2. 更新 index.html 页面:

    • 增加统计图表容器(Chart.js)

    • 增加时间筛选表单

    • 增加 “导出记录” 按钮


下面柱状图统计(如厕频率)代码,并集成到页面中。主要展示哪种统计图为主:频率、平均时长、趋势。

chart_html = """
<!-- 追加在 index.html 中统计图部分 -->
<h3>📊 猫咪如厕统计</h3>
<canvas id="chartFreq" height="120"></canvas>
<canvas id="chartDur" height="120" style="margin-top: 30px;"></canvas><script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>const freqCtx = document.getElementById('chartFreq');const durCtx = document.getElementById('chartDur');const freqData = {{ freq_data|tojson }};const durData = {{ dur_data|tojson }};new Chart(freqCtx, {type: 'bar',data: {labels: freqData.labels,datasets: [{label: '如厕次数',data: freqData.counts,borderWidth: 1}]},options: {responsive: true,plugins: { legend: { display: false }},scales: { y: { beginAtZero: true } }}});new Chart(durCtx, {type: 'bar',data: {labels: durData.labels,datasets: [{label: '平均如厕时长(秒)',data: durData.avg_durations,backgroundColor: 'rgba(75, 192, 192, 0.6)',borderWidth: 1}]},options: {responsive: true,plugins: { legend: { display: false }},scales: { y: { beginAtZero: true } }}});
</script>
"""with open("cat_monitor/web/templates/chart_part.html", "w", encoding="utf-8") as f:f.write(chart_html)"已生成图表统计部分的 HTML,可嵌入主页面 index.html,接下来更新 Flask 后端逻辑支持统计数据。"

🔜 接下来,我将更新 Flask 后端 app.py

  • 查询数据库生成统计数据(频率 + 平均时长)

  • 传递数据给模板渲染 Chart.js 图表

Flask 后端 app.py 支持:

  • 从数据库读取如厕记录

  • 自动生成:

    • 每只猫的如厕次数统计

    • 每只猫的平均如厕时长

  • 将数据传给前端用于 Chart.js 渲染


下一步是将我们之前准备好的图表模块 chart_part.html 嵌入 index.html 页面。是否我现在直接更新页面,让图表显示在记录表下方?

目前存在问题:

分类全是 Unknown 的情况我们可以一步步优化,目前问题大概率出现在 猫脸识别的匹配策略或特征质量 上。


🧠 问题原因分析:

1. 猫图质量不稳定

  • 光照/角度/遮挡较大 → 提取特征不一致

  • 建议上传正面清晰猫脸图,多张样本图增强泛化能力

2. 匹配阈值太高

  • 目前分类用的是最近邻 + 相似度阈值(默认 0.7)

  • 如果猫脸图本身差异大,0.7 可能过严 → 全部被判成 Unknown

✅ 临时建议:先降低阈值到 0.5,观察识别是否有改善:

# matcher.py 中的 match 方法
def match(self, query_vec, threshold=0.5):

3. 特征提取器泛化能力差

  • 使用的是通用 resnet18,可能对猫脸没有专门训练

  • 若需要长期稳定使用,可考虑:

    • ✅ 使用猫脸识别预训练模型(可提供)

    • ✅ 自定义猫脸数据集做微调(我可以帮你准备 fine-tune 流程)


✅ 测试:

  1. 上传每只猫的 3~5 张角度不同的图

  2. threshold 降低到 0.5 或更低(如 0.45)观察结果

  3. 使用 print 输出匹配得分看是否有接近但未过阈值的情况

例如你可以在 matcher.py 中打印相似度:

print(f"猫 {names[best_idx]} 相似度: {best_score}")

测试结果:我们不是在做猫脸识别,而是识别每只猫的“整体外观”来区分个体,那么我们可以把“全猫裁剪图”当作识别输入,而不是专注猫脸。


✅ 新策略:猫体图识别个体(视觉外观)

核心改法:

  1. 保持现在的 YOLOv11 检测框不变(整只猫)

  2. 将裁剪下来的整猫图像作为“猫的识别样本”上传(不是脸部)

  3. 使用同样的分类逻辑(特征提取 + 最近邻匹配),但目标变成“全猫识别”


🔧 如何改得更好?

✅ 1. 特征提取器建议使用:

  • 通用图像分类特征模型(如 resnet18, efficientnet-b0

  • 或者我可以给你微调一个 triplet loss 结构(更适合个体识别)


✅ 2. 增强识别稳定性方法:

方法描述
多图样本每只猫上传多张(不同角度)
特征聚合每只猫多个特征向量,识别时取最大相似度
动态阈值允许你为不同猫设定不同相似度阈值(进阶)

✅ 思路

  1. 重新上传几只猫的“整体图像”样本(清晰的检测框图,非脸)

  2. matcher.py 中暂时将阈值调低到 0.5 以下

  3. 可开启打印相似度,确认是不是识别接近却没达标


因此,替换/优化现在的特征提取器(更适合全猫图)

# matcher.py - 最近邻匹配猫个体(加入相似度输出 + 降低阈值)from sklearn.metrics.pairwise import cosine\_similarityimport numpy as npclass CatMatcher:def \_\_init\_\_(self, db):self.db \= dbdef match(self, query\_vec, threshold\=0.45): \# 降低默认阈值embeddings, names \= self.db.get\_all()if not embeddings:return "Unknown"sims \= cosine\_similarity(\[query\_vec\], embeddings)\[0\]best\_idx \= np.argmax(sims)best\_score \= sims\[best\_idx\]print("--- 猫识别相似度得分 ---")for i, sim in enumerate(sims):print(f"{names\[i\]}: {sim:.3f}")print(f"最相似: {names\[best\_idx\]}{best\_score:.3f}")if best\_score \> threshold:return names\[best\_idx\]return "Unknown"

已更新 matcher.py

  • 默认阈值调为 0.45(提高匹配成功率)

  • 每次识别时会输出所有猫的相似度分数

  • 控制台将显示最相似的猫与相似度,方便调试

相关文章:

猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新

前情提要 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的如…...

k8s的配置文件总结

在 Kubernetes 中&#xff0c;配置文件 是定义集群资源的核心&#xff0c;通常以 YAML 或 JSON 格式编写。以下是 Kubernetes 中关键的配置文件类型及其作用&#xff1a; 1. 核心工作负载配置 (1) Deployment • 用途&#xff1a;定义无状态应用的 Pod 副本管理策略&#xff…...

插值算法 - 最近邻插值实现

目录 1. 导入必要的库 2. nearest_neighbor_interpolation 3. 测试代码 数学原理 完整代码 本文实现了基于最近邻插值算法的图像缩放功能。 它使用 Python 编写,主要依赖于NumPy和PIL(Python Imaging Library)库。 NumPy用于高效的数值计算,而PIL仅用于图像的加载和…...

QEMU源码全解析 —— 块设备虚拟化(19)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(18) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社 特此致谢! QEMU启动…...

常见的归一化(Normalization)方法

本文详解深度学习中常见的归一化方法。 【归一化是将数据按比例缩放&#xff0c;使之落入一个特定的区间】目录 1. 批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;1.1 数学原理1.2 代码示例 2. 层归一化&#xff08;Layer Normalization&#xff0c;LN&…...

架构师面试(二十九):TCP Socket 编程

问题 今天考察网络编程的基础知识。 在基于 TCP 协议的网络 【socket 编程】中可能会遇到很多异常&#xff0c;在下面的相关描述中说法正确的有哪几项呢&#xff1f; A. 在建立连接被拒绝时&#xff0c;有可能是因为网络不通或地址错误或 server 端对应端口未被监听&#x…...

【高性能缓存Redis_中间件】二、redis进阶 高级特性及应用

一、前言 在第一篇文章中&#xff0c;我们已经对 Redis 消息队列有了基础的认识&#xff0c;掌握了其基本使用方法。然而&#xff0c;在实际的复杂业务场景中&#xff0c;仅仅运用基础功能是远远不够的。本篇文章将深入探讨 Redis 消息队列的高级特性&#xff0c;如消息确认机…...

vs2022 pcl1.15.0注意点

pcl1.15.0的版本变化很大&#xff0c;其中有一个地方需要设置成如下图所示 如果不设置生成的时候可能有以下错误&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 C1189 #error: "Potential runtime error due to…...

React Router路由

例子 // 创建Router实例对象 const router createBrowserRouter([{path:/login,element:<div>我是登录</div>},{path:/article,element:<div>我是文章</div> }])在jsx中配置一个RouterProvider组件 绑定 router{router} 常规的组件配置...

深度学习(一)

(Ⅰ)神经网络和深度学习 一&#xff0c;ReLU激活函数 ReLU(Rectified Linear Unit)函数&#xff0c;输入大于0时&#xff0c;直接输出该值&#xff1b;输入小于0时&#xff0c;输出0 代码实现&#xff1a; 图中的每个节点都可以是ReLU激活函数的一部分 二&#xff0c;循环神经…...

【LeetCode 热题100】二叉树遍历入门:从中序遍历到层序与右视图(力扣94 / 102/199)(Go语言版)

&#x1f333; 二叉树遍历入门&#xff1a;从中序遍历到层序与右视图 本文涵盖 LeetCode 上的三道基础但极具代表性的二叉树遍历题&#xff1a; 二叉树的中序遍历 二叉树的层序遍历 二叉树的右视图 通过这些题目&#xff0c;我们将从 DFS 到 BFS&#xff0c;深入理解如何处理…...

Tauri 2.3.1+Leptos 0.7.8开发桌面应用--Sqlite数据库的写入、展示和选择删除

在前期工作的基础上&#xff08;Tauri2Leptos开发桌面应用--Sqlite数据库操作_tauri sqlite-CSDN博客&#xff09;&#xff0c;尝试制作产品化学成分录入界面&#xff0c;并展示数据库内容&#xff0c;删除选中的数据。具体效果如下&#xff1a; 一、前端Leptos程序 前端程序主…...

MySQL 5.7.43 二进制安装指南:从零开始的高效快速实现安装部署

目录 引言&#xff1a;为什么选择二进制安装&#xff1f; 1 环境准备 1.1 基础环境检查 1.2 系统安全设置 2 系统优化配置 2.1 磁盘调度策略 2.2 系统资源限制 3 mariadb删除 4 依赖包安装 5 MySQL二进制安装包下载 6 MySQL安装部署 6.1 解压安装包 6.2 创建用户以…...

使用U盘安装 ubuntu 系统

1. 准备U 盘制作镜像 1.1 下载 ubuntu iso https://ubuntu.com/download/ 这里有多个版本以供下载&#xff0c;本文选择桌面版。 1.2 下载rufus https://rufus.ie/downloads/ 1.3 以管理员身份运行 rufus 设备选择你用来制作启动项的U盘&#xff0c;不能选错了&#xff1b;点…...

【家政平台开发(42)】筑牢家政平台安全防线:安全测试与漏洞修复指南

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...

JavaWeb-04-Web后端基础(SpringBootWeb、HTTP协议、分层解耦、IOC和DI)

目录 一、SpringBootWeb入门 1.1 概述 1.2 入门程序 1.2.1 需求 1.2.2 开发步骤 1.3 入门解析 二、HTTP协议 2.1 HTTP概述 2.1.1 介绍 2.1.2 特点 2.2 HTTP请求协议 2.2.1 介绍 2.2.2 获取请求数据 2.3 HTTP响应协议 2.3.1 格式介绍 2.3.2 响应状态码 2.3…...

随笔 20250413 Elasticsearch 的 term 查询

你这个问题非常经典&#xff0c;来自于 Elasticsearch 的 term 查询是 ✅精确匹配&#xff08;case-sensitive&#xff0c;大小写敏感&#xff09;&#xff01; &#x1f9e8; 为什么查不到 "World"&#xff1f; 你的查询语句是&#xff1a; GET /movie/_search {&…...

zk(Zookeeper)实现分布式锁

Zookeeper实现分布式锁 1&#xff0c;zk中锁的种类&#xff1a; 读锁&#xff1a;大家都可以读&#xff0c;要想上读锁的前提&#xff1a;之前的锁没有写锁 写锁&#xff1a;只有得到写锁的才能写。要想上写锁的前提是&#xff1a;之前没有任何锁 2&#xff0c;zk如何上读锁 创…...

操作系统简要概述

操作系统是计算机系统的核心软件&#xff0c;它管理和控制计算机硬件与软件资源&#xff0c;为用户提供方便、高效、安全的使用环境。以下是关于操作系统的详细介绍&#xff1a; 一、定义 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是计算机硬件与…...

开漏模式的触发条件和工作状态

MOS管的漏-栅-源三极 漏极开路--开漏 电路整体概述 这是开漏&#xff08;Open - Drain&#xff09;电路结构&#xff0c;核心由输出控制模块和一对互补的MOS管&#xff08;P - MOS和N - MOS&#xff09;组成。开漏电路的特点是MOS管漏极开路&#xff0c;这种结构常用于需要实现…...

【Java学习笔记】Java第一课,梦开始的地方!!!

目录 1. 基本内容介绍和软件安装 2. 快速入门之第一个程序 hello world 3. 学习方法 基本介绍和软件安装 一、 Java 岗位与应用场景 说明&#xff1a;java 基础也称javaSE 岗位 1. javaEE 软件工程师 电商领域 团购 众筹 sns&#xff08;社交网络&#xff09; 教育 金…...

共享内存技术

一、共享内存 共享内存是一种高效的 进程间通信&#xff08;IPC&#xff09; 机制&#xff0c;允许多个进程直接访问同一块物理内存区域&#xff0c;无需通过内核缓冲区或文件进行数据拷贝。它通常用于需要 低延迟、高吞吐量 的数据交换场景&#xff08;如实时系统、高频交易、…...

Lc 大数运算--快速幂 | 统计好数字的数目

快速幂算法是一种高效计算大数幂运算的方法&#xff0c;能将时间复杂度从传统算法的O(n)降低到O(log n)。它的核心思想是 分解指数分治思想&#xff0c;类似生活中的「拆快递」—— 把大包裹拆成小份&#xff0c;分批处理更高效。 一、生活示例&#xff1a;存钱罐的复利计算 假…...

Linux内存管理架构(2)

4.虚拟地址空间布局 4.1虚拟地址空间划分 对于64位处理器&#xff0c;目前不支持完全的64位虚拟地址 1.ARM64内核/用户虚拟地址划分 1. 虚拟地址的最大宽度 最大宽度&#xff1a;虚拟地址的最大宽度是48位。 内核虚拟地址&#xff1a; 在64位地址空间的顶部。高16位全是1。范围…...

图论基础理论

在我看来&#xff0c;想要掌握图的基础应用&#xff0c;仅需要三步走。 什么是图&#xff08;基本概念&#xff09;、图的构造&#xff08;打地基&#xff09;、图的遍历方式&#xff08;应用的基础&#xff09; 只要能OK的掌握这三步、就算图论入门了&#xff01;&#xff0…...

最大子序和问题——动态规划/贪心算法解决

目录 一&#xff1a;问题描述 二&#xff1a;解决思路1——动态规划思想 三&#xff1a;C 语言代码实现 四&#xff1a;复杂度分析 五&#xff1a;解决思路2——贪心算法思想 六&#xff1a;具体步骤 七: C语言代码实现 八&#xff1a;复杂度分析 一&#xff1a;问题描述 …...

车载以太网-SOMEIP

文章目录 基本概念SOME/IP的起源与核心定位核心定位设计目标协议栈架构与OSI模型映射报文结构与数据序列化SOME/IP的核心通信机制通信模式分类服务发现协议(SOME/IP-SD)服务发现流程服务质量(QoS)管理SOME/IP在智能汽车中的典型应用SOME/IP测试与验证体系SOME/IP测试环境构…...

DrissionPage详细教程

1. 基本概述 DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器&#xff0c;也能像requests一样收发数据包&#xff0c;更重要的是还能把两者合二为一。因此&#xff0c;简单来说DrissionPage可兼顾浏览器自动化的便利性和 requests 的高效率。 DrissionPa…...

6.1 GitHub亿级数据采集实战:双通道架构+三级容灾设计,破解API限制与反爬难题

GitHub 项目数据获取功能设计与实现 关键词:GitHub API 集成、网页爬虫开发、数据存储设计、定时任务调度、异常处理机制 1. 数据获取架构设计 采用双通道数据采集策略,同时使用 GitHub 官方 API 和网页爬虫技术确保数据完整性: #mermaid-svg-XUg7xhHrzFAozG4J {font-fami…...

LabVIEW 控制电机需注意的关键问题

在自动化控制系统中&#xff0c;LabVIEW 作为图形化编程平台&#xff0c;因其高度可视化、易于集成硬件等优势&#xff0c;被广泛应用于电机控制场景。然而&#xff0c;要实现稳定、精确、高效的电机控制&#xff0c;仅有软件并不足够&#xff0c;还需结合硬件选型、控制逻辑设…...

Linux系统远程操作和程序编译

目录 一、Linux远程终端登录、图形桌面访问、 X图形窗口访问和FTP文件传输操作 1.1 桥接模式 1.2 putty远程登录Ubuntu 1.3 win10远程登录并上传下载文件 1.4 X server仿真软件安装 1.5 树莓派在putty上的远程登录 1.6 使用ftp远程登录并实现文件上传下载 1.7 Linux下的…...

Mac配置开发环境

博主是一名Python后端开发&#xff0c;有时候环境太多 需要配置太多&#xff0c;故做此文章 环境Macbook &#xff0c;请注意自己的是ARM 还是x86 结构 Vscode/Cursor配置Python debug 配置Debug launch.json {"version": "0.2.0","configuratio…...

LabVIEW配电器自动测试系统

随着航天技术的迅猛发展&#xff0c;航天器供配电系统的结构越来越复杂&#xff0c;对配电器的功能完整性、稳定性和可靠性提出了更高要求。传统人工测试方式难以满足高效率、高精度、可重复的测试需求。本项目开发了一套基于LabVIEW平台的宇航配电器自动测试系统&#xff0c;融…...

生成与强化学习:赋予VLA系统物理行动能力

引言&#xff1a;从“理解世界”到“改变世界” 当机器能够“看懂”图像、“听懂”指令时&#xff0c;一个更根本的挑战浮现&#xff1a;如何让它们像人类一样&#xff0c;将认知转化为精准的物理动作&#xff1f;无论是机械臂抓取杯子&#xff0c;还是自动驾驶汽车紧急避障&a…...

基于Springboot+Mysql的闲一品(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;首页、个人中心、用户管理、零食分类管理、零食信息管理、订单评价管理、系统管理、订单管理。用户功能&#xff1a;首页、个人中心、订单评价管理、我的收藏管理、订单管理。前台首页功能&#xff1a;首页、零食信息、零食资讯、个人中心、后…...

jupyter4.4安装使用

一、chrome谷歌浏览器 1. 安装 1.1 下载地址&#xff1a; 下载地址&#xff1a; https://www.google.cn/intl/zh-CN_ALL/chrome/fallback/ 2 插件markdown-viewer 2.1 下载地址&#xff1a; 下载地址&#xff1a;https://github.com/simov/markdown-viewer/releases 2.2…...

Linux虚拟内存详解

引言 虚拟内存是现代操作系统中的核心概念之一&#xff0c;它为进程提供了一个连续的、独立的地址空间&#xff0c;有效解决了物理内存限制问题&#xff0c;并大大简化了程序开发和执行。本文将深入探讨Linux系统中虚拟内存的工作原理、实现机制以及相关的内存管理技术&#x…...

数据库安装(基于Linux下centos7)(保姆级教程)

前言:笔者有段时间没写博客了&#xff0c;今天笔者要分享新的知识了&#xff0c;那就是数据库&#xff0c;笔者会通过博客系统的且通俗易懂的分享数据库知识&#xff0c;对于想要学习数据库和学习过数据库的老铁复习都是非常有用的&#xff0c;绝对干货满满&#xff0c;那么今天…...

【自动驾驶 机器人】速度规划 |梯形/S型速度曲线

参考文章&#xff1a; &#xff08;1&#xff09;【自动驾驶】运动规划丨速度规划丨T型/S型速度曲线 &#xff08;2&#xff09;一文教你快速搞懂速度曲线规划之S形曲线&#xff08;超详细图文推导附件代码&#xff09; 1 梯形速度曲线 如下图所示梯形速度/加速度/加加速度曲…...

Qt C++内存泄漏排查方法

在Qt C++中排查内存泄漏可以按照以下步骤进行,结合工具使用和代码审查: 1. 使用内存检测工具 Valgrind (Linux/macOS) 安装Valgrind:sudo apt-get install valgrind运行程序并检测内存泄漏:valgrind --leak-check=full ./your_qt_app分析输出结果,定位未释放的内存块。Dr…...

[redis进阶一]redis的持久化(2)AOF篇章

目录 一 为什么有了RDB持久化机制还要有AOF呢 板书介绍具体原因: ​编辑二 详细讲解AOF机制 (1)AOF的基本使用 1)板书如下 2)开启AOF机制: 3) AOF工作流程 (2)AOF是否会影响到redis性能 ​编辑 (3)AOF缓冲区刷新策略 (4)AOF的重写机制 板书如下: 为什么要有这个重写机…...

聊天室项目day4(redis实现验证码期限,实现redis连接池)

1.redis连接池操作和之前所学过的io_context连接池原理一样这里不多赘述&#xff0c;也是创建多个连接&#xff0c;使用时按顺序取出来。 2.知识补充redisConnect()函数建立与 Redis 服务器的非阻塞网络连接&#xff0c;成功返回 redisContext*&#xff08;连接上下文指针&…...

Redis之分布式锁

面试切入点 锁的分类 单机版同一个JVM虚拟机内&#xff0c;synchronized或者Lock接口分布式多个不同JVM虚拟机&#xff0c;单机的线程锁不再起作用&#xff0c;资源类在不同的服务器之间共享了 一个靠谱分布式锁需要具备的条件与刚需 独占性&#xff1a;onlyOne&#xff…...

AF3 ProteinDataset类的__getitem__方法解读

AlphaFold3 protein_dataset 模块 ProteinDataset 类 __getitem__ 方法用于从数据集中获取一个条目,并根据配置对数据进行处理。 源代码: def __getitem__(self, idx):"""Return an entry from the dataset.If a clusters file is provided, then the idx i…...

NLP 梳理02 — 标点符号和大小写

文章目录 一、说明二、为什么文本预处理中需要小写2.1 为什么小写在文本预处理中至关重要&#xff1f;2.2 区分大小写对 NLP 任务的影响 三、删除标点符号及其对 NLP 任务的影响3.1 什么是标点符号&#xff1f;3.2 为什么在文本预处理中删除标点符号&#xff1f;3.3 删除标点符…...

HarmonyOS中的多线程并发机制

目录 多线程并发1. 多线程并发概述2 多线程并发模型3 TaskPool简介4 Worker简介4.1 Woker注意事项4.2 Woker基本用法示例 5. TaskPool和Worker的对比5.1 实现特点对比5.2 适用场景对比 多线程并发 1. 多线程并发概述 并发模型是用来实现不同应用场景中并发任务的编程模型&…...

游戏引擎学习第221天:(实现多层次过场动画)

资产: intro_art.hha 已发布 在下载页面&#xff0c;你会看到一个新的艺术包。你将需要这个艺术包来进行接下来的开发工作。这个艺术包是由一位艺术家精心制作并打包成我们设计的格式&#xff0c;旨在将这些艺术资源直接应用到游戏中。它包含了许多我们会在接下来的直播中使用…...

Python | 在Pandas中按照中值对箱形图排序

箱形图是可视化数据分布的强大工具&#xff0c;因为它们提供了对数据集内的散布、四分位数和离群值的洞察。然而&#xff0c;当处理多个组或类别时&#xff0c;通过特定的测量&#xff08;如中位数&#xff09;对箱形图进行排序可以提高清晰度并有助于揭示模式。在本文中&#…...

openapi + knife4j的使用

一、依赖作用与关系 1. springdoc-openapi-starter-webmvc-api • 核心功能&#xff1a; 基于 OpenAPI 3 规范&#xff0c;自动生成 API 文档元数据&#xff08;JSON 格式&#xff09;&#xff0c;并集成 Spring MVC。 提供Tag Operation、Schema 等注解&#xff0c;支持通过…...

数据结构*包装类泛型

包装类 什么是包装类 在讲基本数据类型的时候&#xff0c;有提到过包装类。 基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean 我们知道&#xff1a;基本数据类型并不是对象&#xff0c;没有对象所具有的方法和属…...