猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取
开发背景
家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如厕习惯,我计划搭建一个基于视频监控和AI识别的系统,自动识别猫咪进出厕所的行为,记录如厕时间和停留时长,并区分不同猫咪。这样即使我不在家,也能掌握猫咪的健康状态,更安心地照顾它们。
🎯 核心需求拆解:
1. 区域检测
-
指定一个“如厕区域”,只在这个区域内检测是否有猫咪。
-
可通过自定义矩形坐标或交互式选择方式设置该区域。
2. 猫咪检测 + 分类
-
使用
YOLOv11
做目标检测,识别猫咪是否进入区域。 -
分类出是哪只猫(通过猫脸识别或自定义分类模型实现)。
-
支持动态添加新猫类别
3. 事件记录与图片保存
-
检测到猫咪“进入区域”时:
-
记录时间戳
-
保存一张图片(入场图)
-
-
检测到“离开区域”时:
-
记录时间戳
-
保存一张图片(离场图)
-
计算如厕时间并保存(离开时间 - 进入时间)
-
4. 记录保存
-
记录内容包括:
-
猫咪ID / 名称
-
进入时间
-
离开时间
-
如厕时长
-
图片路径
-
-
保存为 SQLite 数据库
🛠️ 技术栈:
-
检测模型:YOLOv11 进行目标检测(识别是否为猫及位置)
-
分类模型:使用一个轻量 CNN 或
ArcFace + ResNet
的猫脸识别模型(支持增量学习或动态注册) -
逻辑判断:跟踪猫咪是否进入区域(通过目标跟踪或 ID 跟踪)
✅ UI 界面设计:
-
区域选择(绘制检测区域)【待更新】
-
视频流预览(摄像头或视频)【待更新】
-
猫咪管理(添加猫照片及名字)【已完成】
-
事件记录展示(列表、时间线)【已完成】
-
导出功能(CSV / Excel / 图片)【待更新】
✅ 一、猫咪分类模块(支持添加新猫)
思路:
我们用猫脸图片提特征,然后进行“最近邻”匹配:
-
初次录入时,提取特征 + 存入特征库(保存为
.npy
或 SQLite) -
实时推理时,检测到猫 → 裁剪猫脸 → 提特征 → 与已知猫对比 → 分类结果
模型选型(轻量):
-
使用
ResNet18
或 MobileFaceNet 做猫脸识别 -
特征距离:欧氏距离 / 余弦相似度
✅ 二、YOLOv11 + 摄像头区域检测
功能:
-
启动摄像头实时检测
-
在图像中标注“如厕区域”
-
判断猫是否进入区域
-
裁剪猫图并交给分类模块识别
-
管理状态(进入 / 离开)并记录时间
🧱 项目目录构建:
cat_monitor/
├── detector/ # YOLOv11 推理代码
│ └── yolo_detector.py
├── recognizer/ # 猫咪识别代码
│ ├── embedder.py # 提取猫脸特征
│ ├── database.py # 猫脸数据库管理
│ └── matcher.py # 分类识别逻辑
├── data/
│ └── embeddings/ # 猫脸特征向量存储
├── records/ # 图片与如厕记录
├── web/ # Flask 前端展示
├── main.py # 实时主程序
└── config.py
🐱 猫咪分类模块目标
✅ 功能概述:
-
用户上传猫咪脸部图片 + 输入名字 → 添加新猫
-
每张图提取特征(使用轻量模型)
-
将猫的特征保存(后续用于识别)
-
实时时:检测到猫 → 裁剪猫图 → 提特征 → 与库里比对 → 得出是哪只猫
🧠 分类逻辑核心流程:
-
提特征(使用预训练猫脸模型 or 自训练轻量 CNN)
-
保存特征向量(.npy)+ 名称映射
-
比对:通过余弦相似度 / 欧氏距离 → 找出最接近的猫
✅ 模块设计方案
🔹 1. embedder.py
– 提取猫脸特征
import torch
import torchvision.transforms as transforms
from torchvision.models import resnet18
from PIL import Imageclass CatEmbedder:def __init__(self, model_path=None):self.model = resnet18(pretrained=True) # 可替换为你训练的猫脸模型self.model.fc = torch.nn.Identity()self.model.eval()self.transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),])def extract(self, img_path):img = Image.open(img_path).convert('RGB')img = self.transform(img).unsqueeze(0)with torch.no_grad():features = self.model(img)return features.squeeze().numpy()
🔹 2. database.py
– 管理猫的特征库
import os
import numpy as np
import jsonclass CatDatabase:def __init__(self, db_path='data/embeddings'):self.db_path = db_pathself.mapping_file = os.path.join(db_path, 'cat_names.json')os.makedirs(db_path, exist_ok=True)if os.path.exists(self.mapping_file):with open(self.mapping_file, 'r') as f:self.name_map = json.load(f)else:self.name_map = {}def add_cat(self, name, embedding):cat_id = str(len(self.name_map))np.save(os.path.join(self.db_path, f"{cat_id}.npy"), embedding)self.name_map[cat_id] = namewith open(self.mapping_file, 'w') as f:json.dump(self.name_map, f)def get_all(self):embeddings = []names = []for cat_id, name in self.name_map.items():vec = np.load(os.path.join(self.db_path, f"{cat_id}.npy"))embeddings.append(vec)names.append(name)return embeddings, names
🔹 3. matcher.py
– 识别猫咪身份
from sklearn.metrics.pairwise import cosine_similarity
import numpy as npclass CatMatcher:def __init__(self, db):self.db = dbdef match(self, query_vec, threshold=0.7):embeddings, names = self.db.get_all()if not embeddings:return "Unknown"sims = cosine_similarity([query_vec], embeddings)[0]best_idx = np.argmax(sims)if sims[best_idx] > threshold:return names[best_idx]return "Unknown"
✅ 流程示意图:
【上传猫脸图 + 名字】↓extract → embedding↓database.add_cat(name, embedding)↓
【实时分类时】→ 提特征 → matcher.match() → 猫名 / Unknown
✅ 测试:
# 测试添加猫
from recognizer.embedder import CatEmbedder
from recognizer.database import CatDatabaseembedder = CatEmbedder()
db = CatDatabase()vec = embedder.extract("cat_face_1.jpg")
db.add_cat("Mimi", vec)
# 测试识别
from recognizer.matcher import CatMatchermatcher = CatMatcher(db)
query_vec = embedder.extract("some_query_cat.jpg")
print(matcher.match(query_vec))
接下来制作一个猫咪添加页面的 Web 前端,用 Flask 实现,功能如下:
🧩 功能:
-
上传猫咪脸部图片(JPEG/PNG)
-
输入猫咪的名字
-
点击提交 → 提取特征并存入数据库
-
页面展示已有猫咪列表(含名字)
📁 项目结构(简化版)
cat_monitor/
├── recognizer/
│ ├── embedder.py
│ ├── database.py
│ └── matcher.py
├── web/
│ ├── app.py ← Flask 主程序
│ ├── templates/
│ │ └── index.html ← 上传页面
│ └── static/
│ └── uploads/ ← 存猫图
🔧 1. Flask 后端 (web/app.py
)
from flask import Flask, render_template, request, redirect, url_for
import os
from recognizer.embedder import CatEmbedder
from recognizer.database import CatDatabaseapp = Flask(__name__)
UPLOAD_FOLDER = 'web/static/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
os.makedirs(UPLOAD_FOLDER, exist_ok=True)embedder = CatEmbedder()
db = CatDatabase()@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'POST':name = request.form['name']file = request.files['image']if name and file:img_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)file.save(img_path)vec = embedder.extract(img_path)db.add_cat(name, vec)return redirect(url_for('index'))# 显示已有猫_, names = db.get_all()return render_template('index.html', cats=names)if __name__ == '__main__':app.run(debug=True)
🖼️ 2. HTML 页面 (web/templates/index.html
)
<!DOCTYPE html>
<html>
<head><title>猫咪识别管理</title>
</head>
<body><h2>添加新猫咪</h2><form method="POST" enctype="multipart/form-data"><input type="text" name="name" placeholder="猫咪名字" required><input type="file" name="image" accept="image/*" required><input type="submit" value="添加猫咪"></form><h3>已录入猫咪:</h3><ul>{% for name in cats %}<li>{{ name }}</li>{% endfor %}</ul>
</body>
</html>
✅ 使用方法
- 启动 Flask 服务:
cd web
python app.py
-
打开浏览器访问
http://127.0.0.1:5000/
-
添加猫咪并上传图片,后台会自动提特征并保存
✅ 前端效果展示
相关文章:
猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取
开发背景 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的…...
sparkcore编程算子
今天是Spark Core编程算子 Value类型算子 1. map 将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。Map算子是分区内一个数据一个数据的执行,类似于串行操作。 特点: - 主要目的将数据源中的数据进行…...
【EI会议】第三届机器人与软件工程前沿国际会议(FRSE 2025)
第三届机器人与软件工程前沿国际会议(FRSE 2025)将于2025年8月8日-10日在中国张家界召开。会议由清华大学自动化系主办,长沙理工大学、湖南科技大学、吉首大学、AC学术中心协办。 一、会议信息 大会官网:www.icfrse.org 会议时…...
机器人系统仿真--1.机器人模型URDF
添加机器人地盘...
具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制(3)
具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制(1)-CSDN博客 具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制&a…...
+++++背到厌倦。持续更新
Spring IoC 的工作流程: 读取 BeanDefinition: Spring 容器启动时,会读取 Bean 的配置信息 (例如 XML 配置文件、注解或 Java 代码),并将这些配置信息转换为 BeanDefinition 对象。创建 Bean 实例: 根据 BeanDefinition 中的信息,Spring 容器…...
修改 docker 工作目录
一、停掉 containerd、cri-docker、docker systemctl stop containerd systemctl stop cri-docker systemctl stop docker 二、拷贝 docker 工作目录下的所有文件到新路径 rsync -aP /var/lib/docker/ /docker/data/ 三、daemon.json 添加新工作目录路径 {"registry-…...
51c嵌入式~继电器~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/13775821 一、继电器应用细节 继电器的应用,相信大家都知道,在电路中只要给它供电、断电也就可以工作了。本文讨论它的应用细节。 现在流行的接法 图中,继电器的线圈经过Q1作为开关&am…...
舵机:机器人领域的“关节革命者”
机器人的技术,每一个细微的进步都可能引领一场行业变革。而在这场变革中,舵机作为机器人关节的核心部件,正悄然上演着一场革命性的应用风暴。从简单的关节运动到复杂的姿态控制,舵机以其卓越的性能和无限的可能,重新定…...
飞书集成衡石ChatBot实战:如何10分钟搭建一个业务数据问答机器人?
让数据查询像聊天一样简单 在快节奏的业务环境中,数据查询的实时性和便捷性至关重要。传统BI工具需要复杂的操作,而衡石ChatBot结合飞书,让业务人员只需在聊天窗口提问,就能立刻获取数据反馈,真正实现“零门槛”数据分…...
高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案(悲观锁、乐观锁、分布式锁)
以下是针对高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案: 高并发下的超发详解 1. 超发现象定义 超发(Over-issuance)指在并发操作中,系统实际发放的资源(如商品库存)超过…...
Git 分支整合策略:Cherry-pick、Merge、Rebase 三者之间对比
Git 分支整合策略详解:Cherry-pick、Merge、Rebase 在日常的 Git 多分支协作开发中,代码合并是常见操作。Git 中主要提供以下三种方式来合并或迁移分支的提交: Cherry-pick:精确挑选部分提交复制到当前分支;Merge&am…...
嵌入式八股---计算机网络篇
前言 这块主要是结合着LWIP去理解计算机网络中常见的面试题 OSI四层/五层/七层模型 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层(http)、表示层(加密)、应用层。 TCP/IP分层(4层):网络接口层…...
使用 3D Layout 和 Icepak 进行 PCB、DCIR 和热分析
在本教程中,您将学习如何使用 3D Layout 执行 DCIR,然后使用功率损耗数据执行热分析。热分析将使用电子桌面 Icepak 进行。SIwave 及其嵌入式 icepak 可用于执行相同的分析,但有一个例外。电子桌面 Icepak 是一款功能齐全的 3D 工具。用户可以…...
UE5 Windows游戏窗口置顶
参考资料:UE5 UE4 项目设置全局置顶_ue4运行设置置顶-CSDN博客 修改完build.cs后,关掉重新生成解决方案。(不然可能编译报错,在这卡了半个小时) 不知道怎么用C的,可以用这个 Topmost - Keep Editor/Game w…...
【Linux】进程管理
一、程序与进程区别 1.程序: 存放在磁盘文件可执行文件(静态存在) 特点 静态性:程序是静态的,它只是一组指令的集合,在未被执行时,不会占用计算机的运行资源,也不会产生任何实际的…...
Android Studio PNG转SVG方法总结
在 Android Studio 中,将 PNG 位图转换为 SVG 矢量图并非直接内置的功能,但你可以通过以下步骤实现目标: 方法 1:使用在线转换工具 访问在线转换网站 推荐工具: CloudConvert Vector Magic OnlineConvertFree 上传…...
第6篇:Linux程序访问控制FPGA端LEDR<四>
Q:如何设计.c程序代码控制FPGA端外设LEDR动态显示? A:我们来设计程序实现简易计数器:将上一期点亮LEDR的程序代码*LEDR_ptr 0x2aa 改为 *LEDR_ptr *LEDR_ptr 1,读取LEDR端口的data寄存器,将寄存器值递增…...
DP扰码模块verilog仿真
在DisplayPort 1.4协议中,为了减少EMI,在8B/10B编码之前,需进行扰码Scramble。扰码用到了16-bit LFSR,表达式如下。 LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。…...
协作焊接机器人的应用场景
协作焊接机器人凭借其灵活性、安全性和高效性,在多个领域有着广泛的应用场景,以下是一些主要的方面: 汽车制造 车身焊接:在汽车车身生产线上,协作焊接机器人可与工人协同工作,完成车身各部件的焊接任务。例…...
深入解析计算机操作系统的底层架构与核心模块功能
深入解析计算机操作系统的底层架构与核心模块功能 一、操作系统底层架构总览 操作系统处于计算机系统的核心地位,是计算机硬件与用户之间的关键纽带,承担着资源管理者的重要角色。它负责统筹管理计算机的各类资源,如CPU、内存、存储设备以及…...
Elasticsearch 官网阅读学习笔记01
Elasticsearch 官网阅读学习笔记01 什么是 Elasticsearch? Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Elasticsearch 可为所有类型的数据提供近乎实时的搜索和分析。无论您拥有的是结构化或非结构化文本、数值数据还是地理空间数据 Elastic…...
玩转Docker | 使用Docker搭建Van-Nav导航站
玩转Docker | 使用Docker搭建Van-Nav导航站 前言一、Van-Nav介绍van-nav 简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Van-Nav服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问Van-Nav应用访问Van-Nav首页登录后台管理五、添…...
若依 前后端部署
后端:直接把代码从gitee上拉去到本地目录 (https://gitee.com/y_project/RuoYi-Vue ) 注意下redis连接时password改auth 后端启动成功 前端:运行前首先确保安装了node环境,随后执行: !!一定要用管理员权限…...
笔记:头文件与静态库的使用及组织方式
笔记:头文件与静态库的使用及组织方式 1. 头文件的作用 接口声明:提供函数、类、变量等标识符的声明,供其他模块调用。编译依赖:编译器需要头文件来验证函数调用和类型匹配。避免重复定义:通过包含保护(如…...
PostgreSQL-常用命令
PostgreSQL 提供了丰富的命令行工具和 SQL 命令,用于管理和操作数据库。以下是一些常用的命令和操作: 1. 数据库管理 创建数据库 CREATE DATABASE dbname; 删除数据库 DROP DATABASE dbname; 列出所有数据库 \l SELECT datname FROM pg_database;…...
如何在 Postman(测试工具) 中实现 Cookie 持久化并保持同一会话
在开发基于 Spring Boot 的 Web 应用时,使用 Session 存储验证码等敏感信息是常见的做法。然而,在调试接口时,你可能会遇到这样一个问题:第一次请求接口时存入的验证码在第二次请求时无法获取,原因往往是两个请求所使用…...
粘性定位(position:sticky)——微信小程序学习笔记
1. 简介 CSS 中的粘性定位(Sticky positioning)是一种特殊的定位方式,它可以使元素在滚动时保持在视窗的特定位置,类似于相对定位(relative),但当页面滚动到元素的位置时,它会表现得…...
谷歌浏览器极速安装指南
目录 📋 准备工作 步骤一:访问官网 🌐 步骤二:获取安装包 ⬇️ 步骤三:一键安装 🖱️ 步骤四:首次启动设置 ⚙️ 步骤五:开始探索! 🌟 💬 …...
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
引言 2024年11月,研究者在测量领域国际顶级期刊《IEEE Transactions on Instrumentation and Measurement》(IF 5.6,JCR 1区,中科院二区)上发表科学研究成果,以“Optimized Fuzzy Slope Entropy: A Comple…...
无人机击落技术难点与要点分析!
一、技术难点 1. 目标探测与识别 小型化和低空飞行:现代无人机体积小、飞行高度低(尤其在城市或复杂地形中),雷达和光学传感器难以有效探测。 隐身技术:部分高端无人机采用吸波材料或低可探测设计,进…...
Flink的数据流图中的数据通道 StreamEdge 详解
本文从基础原理到代码层面逐步解释 Flink 的数据通道 StreamEdge,尽量让初学者也能理解。 主要思路:从概念开始,逐步深入到实现细节,并结合伪代码来逐步推导。 第一步:什么是 StreamEdge? StreamEdge 是 F…...
OpenCV 图形API(25)图像滤波-----均值滤波(模糊处理)函数blur()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用归一化的方框滤波器模糊图像。 该函数使用以下核来平滑图像: K 1 k s i z e . w i d t h k s i z e . h e i g h t [ 1 1 ⋯ …...
基于频率约束条件的最小惯量需求评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink
基于频率约束条件的最小惯量评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink 1建立了含新能源调频的频域仿真传函模型,虚拟惯量下垂控制 2基于构建的模型,考虑了不同调频系数,不同扰动情况下的系统最小惯量需求...
.pdf,.docx,.doc文档在一页纸上显示4页内容(详细步骤)
生活中常见一页纸上显示4页内容,我们熟知的是打印文件时,选择“每页4版”,但如果也是为了方便阅读,想要设置成一张纸上显示4页内容,又该怎么做呢?下面分享.docx和.pdf文档,一张纸上显示4页内容的…...
基于CNN-BiLSTM-GRU的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
一、深度Q网络(Deep Q-Network,DQN)介绍 1、背景与动机 深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统…...
高并发场景下的 Java 性能优化
在当今数字化时代,高并发场景已成为众多 Java 应用面临的常态,如电商大促、在线直播等活动期间,系统需承受巨大的访问压力。因此,Java 性能优化在高并发场景下显得尤为重要。传统的人工编写代码优化方式不仅耗时费力,还…...
Java 设计模式:观察者模式详解
Java 设计模式:观察者模式详解 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会收到通知并自动更新。这种模式广泛…...
Linux vagrant 导入Centos
前言 vagrant 导入centos 虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署centos 虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/centos8/Vagrantfile (可配置网络IP,内存…...
linux Ubuntu 如何删除文件,错误删除后怎么办?
一、删除文件的常用方法 命令行删除 普通删除:rm 文件名 (示例:rm old_file.txt) 强制删除(无提示):rm -f 文件名 (示例:rm -f locked_file.txt) 删除目录…...
【前端】事件循环专题
引入 以下情况是为什么呢? //q1 for (var i 0; i < 3; i) {setTimeout(() > {console.log(i);}, 1000); } // console: // 3 // 3 // 3//q2 let name;setTimeout(() > {name name;console.log(name); }, 1000);if (name) {name newname;console.log(n…...
3DMAX笔记-UV知识点和烘焙步骤
1. 在展UV时,如何点击模型,就能选中所有这个模型的uv 2. 分多张UV时,不同的UV的可以设置为不同的颜色,然后可以通过颜色进行筛选。 3. 烘焙步骤 摆放完UV后,要另存为一份文件,留作备份 将模型部件全部分成…...
【深度学习】PyTorch实现VGG16模型及网络层数学原理
一、Demo概述 代码已附在文末 1.1 代码功能 ✅ 实现VGG16网络结构✅ 在CIFAR10数据集上训练分类模型 1.2 环境配置 详见【深度学习】Windows系统Anaconda CUDA cuDNN Pytorch环境配置 二、各网络层概念 2.1 卷积层(nn.Conv2d) nn.Conv2d(in_cha…...
Spring 事务
29.Spring管理事务的方式有几种? Spring中的事务分为编程式事务和声明式事务。 编程式事务是在代码中硬编码,通过 TransactionTemplate或者 TransactionManager 手动管理事务,事务范围过大会出现事务未提交导致超时,比较适合分布…...
GPT - TransformerDecoderBlock
本节代码定义了一个 TransformerDecoderBlock 类,它是 Transformer 架构中解码器的一个基本模块。这个模块包含了多头自注意力(Multi-Head Attention)、前馈网络(Feed-Forward Network, FFN)和层归一化(Lay…...
【C语言】预处理(预编译)(C语言完结篇)
一、预定义符号 前面我们学习了C语言的编译和链接。 在C语言中设置了一些预定义符号,其可以直接使用,预定义符号也是在预处理期间处理的。 如下: 可以看到上面的预定义符号,其都有两个短下划线,要注意的是ÿ…...
【Kubernetes】Kubernetes 如何进行日志管理?Fluentd / Loki / ELK 适用于什么场景?
由于 Kubernetes 运行在容器化的环境中,应用程序和系统日志通常分布在多个容器和节点上,传统的日志管理方法(例如直接访问每个节点的日志文件)在 Kubernetes 中不适用。 因此,Kubernetes 引入了集中式日志管理方案&am…...
从 SaaS 到 MCP:构建 AI Agent 生态的标准化服务升级之路
从 SaaS 到 MCP:构建 AI Agent 生态的标准化服务升级之路 —— 以数据连接器 dslink 的技术改造实践为例 引言:AI Agent 时代的 SaaS 服务范式转型 在生成式 AI 爆发式发展的 2025 年,AI Agent 已从概念验证走向企业级应用落地,…...
Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变
一、概述:Makefile—— 工程编译的 “智能指挥官” 1. 为什么需要 Makefile? 手动编译的痛点:当工程包含数十个源文件时,每次修改都需重复输入冗长的编译命令(如gcc file1.c file2.c -o app),…...
CST入门教程:如何从SYZ参数提取电容C和电感L --- 双端口
上期解释了单端口计算S参数,然后后处理很容易提取L或C,已经满足基本需求。 这期我们看复杂一点的情况,电路中放两个端口,比如S2P: 或集总电路: 或导入SPICE: 两个端口的Y和Z参数就是四个量了,Y…...