【HFP】蓝牙 HFP 协议状态通知机制研究
目录
一、状态通知体系架构
1.1 核心功能矩阵
1.2 三层控制体系
1.3 角色分工
1.4 协议栈层级
二、核心AT命令解析
2.1 AT+CMER:指示器状态报告控制
2.2 AT+BIA:指示器激活控制
2.3 +CIEV:未请求结果码
三、关键功能实现机制
3.1 注册状态更新
3.2 信号强度指示
3.3 电池电量监控
3.4 漫游状态处理逻辑
四、运营商查询与错误处理
4.1 前提条件
4.3 运营商查询流程
4.4 关键步骤解析
4.5 开发要点
4.6 应用场景
4.7 扩展错误处理机制
五、典型错误处理与调试机制
5.1 AT+CMEE:扩展错误报告
5.2 常见故障排查
5.3 状态同步故障排查表
5.4 性能优化建议
六、工程实践与优化
6.1 测试用例设计
6.2 性能优化策略
七、典型应用场景
7.1 车载免提系统
7.2 智能耳机控制
八、协议扩展与兼容性考虑
8.1 编码协商机制
8.2 多设备协同
九、总结与建议
9.1 开发建议
9.2 最佳实践
十、规范参考
在蓝牙通信领域,音频网关(AG)与免提设备(HF)的协同工作机制是实现高质量音频传输和设备控制的关键。本文基于HFP(Hands-Free Profile)协议规范,深入解析AT命令在状态更新、错误处理及功能控制中的核心作用,重点探讨AT+CMER
、AT+BIA
、+CIEV
等关键指令的实现逻辑与典型应用场景。
一、状态通知体系架构
1.1 核心功能矩阵
HFP 协议通过 AT 命令和未请求结果码(+CIEV)实现设备间状态同步,覆盖以下关键领域:
状态类型 | 通知使能命令 | 结果码 | 取值范围 |
注册状态 | AT+CMER | +CIEV: 1 | 0-2(未注册 / 已注册 / 漫游) |
信号强度 | AT+CMER | +CIEV: 5 | 0-31(0 = 无信号,31 = 超出范围) |
漫游状态 | AT+CMER | +CIEV: 2 | 0-1(未漫游 / 漫游) |
电池电量 | AT+CMER | +CIEV: 4 | 0-5(0=0%,5=100%) |
运营商选择 | AT+COPS | #NAME? | 运营商名称字符串 |
1.2 三层控制体系
蓝牙HFP协议通过三层控制体系实现智能状态同步,在保证实时性的同时最大限度降低功耗:
-
全局开关控制:AT+CMER命令设置事件报告模式
-
细粒度控制:AT+BIA命令管理单个指示器
-
动态触发机制:+CIEV事件实现实时推送
1.3 角色分工
-
音频网关(AG):作为音频输入输出节点,通常由手机或车载系统扮演,负责音频流的中继处理。
-
免提设备(HF):作为远程控制终端,如蓝牙耳机或车载音响,实现音频的远程输入输出及设备控制。
1.4 协议栈层级
-
L2CAP层:提供基础数据传输通道
-
RFCOMM层:模拟串口通信协议
-
HFP层:定义电话控制功能框架
-
AT命令层:实现设备控制指令集
二、核心AT命令解析
2.1 AT+CMER:指示器状态报告控制
功能:启用/禁用AG的主动状态更新功能 参数格式:AT+CMER=<mode>[,<ind>[,<value>]]
-
<mode>
:控制模式(0-禁用,1-启用) -
<ind>
:指定指示器类型(0-所有,1-信号强度等) -
<value>
:阈值设定(部分指示器支持)
工作流程:
-
HF发送
AT+CMER=1,0
启用全局状态更新 -
AG在检测到注册状态变化时,主动发送
+CIEV: 1,1
(注册成功) -
当信号强度低于阈值时,AG发送
+CIEV: 4,2
(信号等级2)
典型配置
// 使能服务状态、呼叫状态和信号强度通知
send_at_command("AT+CMER=3,0,0,1");
2.2 AT+BIA:指示器激活控制
功能:选择性激活/禁用特定状态指示器 参数格式:AT+BIA=<ind>,<status>
-
<ind>
:指示器编号(1-注册状态,4-信号强度等) -
<status>
:激活状态(0-禁用,1-启用)
典型场景:
-
禁用电池电量更新:
AT+BIA=7,0
-
仅启用漫游状态监控:
AT+BIA=6,1
实现逻辑
void handle_bia(const std::string& cmd) {int indicator_id = std::stoi(cmd.substr(6, 1));int state = std::stoi(cmd.substr(8));switch(indicator_id) {case 5: signal_strength_enabled = state; break;case 4: battery_enabled = state; break;}
}
2.3 +CIEV:未请求结果码
功能:AG主动推送状态变化通知 格式:+CIEV: <ind>,<value>
-
预定义指示器:
编号 | 含义 | 取值范围 |
1 | 注册状态 | 0-2 |
4 | 信号强度 | 0-5 |
6 | 漫游状态 | 0-1 |
7 | 电池电量 | 0-100 |
状态机示例:
典型响应
+CIEV: 3,1 // 呼叫状态:振铃
+CIEV: 5,4 // 信号强度:4格
+CIEV: 4,2 // 电池电量:50%
解析逻辑
void handle_ciev(const std::string& response) {std::vector<std::string> parts = split(response, ',');int indicator_id = std::stoi(parts[0].substr(6));int value = std::stoi(parts[1]);switch(indicator_id) {case 3: update_call_status(value); break;case 5: update_signal_strength(value); break;case 4: update_battery_level(value); break;}
}
三、关键功能实现机制
3.1 注册状态更新
状态值定义
值 | 描述 |
0 | 未注册 |
1 | 已注册 |
2 | 漫游中 |
交互流程
3.2 信号强度指示
取值范围
-
0: 无信号
-
1-30: 信号强度递增
-
31: 超出范围
优化策略
// 信号强度变化超过阈值时更新UI
if (new_strength - old_strength >= 2) {update_ui();
}
3.3 电池电量监控
取值映射
值 | 电量百分比 |
0 | 0% |
1 | 10% |
... | ... |
5 | 100% |
低电量处理
if (battery_level == 0) {send_at_command("AT+BATT=0"); // 断开连接play_low_battery_alert();
}
3.4 漫游状态处理逻辑
判定依据:
-
MCC/MNC比对结果
-
网络运营商白名单
-
用户自定义规则
状态转换:
四、运营商查询与错误处理
该流程用于 Hands-Free 设备(HF)获取 Audio Gateway(AG,如手机)当前选择的网络运营商名称,适用于车载系统、蓝牙耳机等场景。
4.1 前提条件
-
服务级别连接(SLC)已建立:AG 与 HF 之间必须存在有效的 RFCOMM 连接。
-
连接恢复机制:若连接未建立,AG 需通过blog.csdn.net重新连接。
4.3 运营商查询流程
4.4 关键步骤解析
①设置格式:
-
命令:
AT+COPS=3,0
-
参数说明:
-
3
:仅修改格式参数 -
0
:指定长字母数字格式(最多 16 字符)
-
②查询运营商:
-
命令:
AT+COPS?
-
响应格式:
-
+COPS: <format>,<mode>,"<operator>"
-
示例:
+COPS: 0,0,"China Mobile"
-
③无运营商情况:
-
响应:省略
<format>
和<operator>
字段 -
处理:HF 应显示 "未注册" 或类似提示
4.5 开发要点
①格式验证:
-
确保 AG 返回的运营商名称长度≤16 字符
-
处理特殊字符(如非 ASCII 字符)
②错误处理:
-
连接超时:设置 AT 命令超时(建议 5 秒)
-
无效响应:过滤非预期格式的 + COPS 消息
③兼容性测试:
-
覆盖主流运营商(如中国移动、Verizon)
-
测试漫游状态下的运营商名称更新
4.6 应用场景
-
车载系统:在仪表盘显示当前网络运营商
-
蓝牙耳机:通过语音提示 "已连接至 XX 网络"
-
设备管理:用于统计用户常连接的运营商
4.7 扩展错误处理机制
错误码映射表:
错误码 | 含义 | 典型场景 |
0 | AG忙 | 同时处理多个呼叫 |
1 | 无效AT命令 | 语法错误 |
3 | 不支持的操作 | 尝试启用未实现功能 |
5 | 设备未就绪 | 蓝牙未连接 |
错误处理框架:
class ErrorHandler:ERROR_MAP = {0: "AG busy",1: "Invalid command",3: "Operation not allowed",5: "Device not ready"}def handle_error(self, code):if code in self.ERROR_MAP:log.error("CME ERROR %d: %s", code, self.ERROR_MAP[code])show_user_alert(self.ERROR_MAP[code])else:log.warning("Unknown error code: %d", code)
五、典型错误处理与调试机制
5.1 AT+CMEE:扩展错误报告
功能:启用详细错误代码 参数:AT+CMEE=<n>
-
<n>
=0:基础错误代码 -
<n>
=1:扩展错误代码
典型错误码:
-
+CME ERROR: 3
:操作未支持 -
+CME ERROR: 10
:SIM卡未插入 -
+CME ERROR: 50
:设备未就绪
5.2 常见故障排查
问题1:AT命令无响应
-
检查项:
-
波特率匹配(常见值:9600/115200)
-
流控制设置(RTS/CTS)
-
模块工作模式(AT/透传)
-
问题2:+CIEV更新丢失
-
解决方案:
-
确认
AT+CMER
已启用 -
检查
AT+BIA
未禁用目标指示器 -
验证RFCOMM链路质量
-
调试工具推荐:
-
Wireshark:抓取蓝牙HCI数据包
-
nRF Connect:BLE协议分析工具
-
串口助手:AT命令实时交互
5.3 状态同步故障排查表
现象 | 检测点 | 解决方案 |
状态更新丢失 | CMER参数配置 | 验证AT+CMER=3,0,0,1 |
信号强度不变化 | BIA掩码设置 | 检查AT+BIA=,,1,1配置 |
运营商名称乱码 | COPS格式设置 | 确认执行AT+COPS=3,0 |
错误码无法解析 | CMEE功能启用状态 | 发送AT+CMEE=1启用扩展错误 |
5.4 性能优化建议
-
事件防抖机制:设置200-500ms的状态变化延迟阈值
-
数据压缩策略:对频繁变化的信号强度采用差值触发
-
内存优化:使用位域存储状态标志
typedef struct {uint8_t service:2;uint8_t signal:3;uint8_t battery:3;bool roaming:1;
} status_flags_t;
六、工程实践与优化
6.1 测试用例设计
测试项 | 测试步骤 | 预期结果 |
连接释放响应时间 | 发送 AT+CHUP → 测量 OK 到达时间 | ≤100ms |
状态通知延迟 | 模拟状态变化 → 测量 + CIEV 到达时间 | ≤50ms |
多指示器并发通知 | 同时触发多个状态变化 → 检查通知顺序 | 按优先级依次到达 |
6.2 性能优化策略
-
批量通知:AG 合并多个状态变化为一个 + CIEV 消息
-
智能过滤:仅当状态值变化超过阈值时发送通知
-
链路优化:使用 EDR 模式提升数据传输速率
七、典型应用场景
7.1 车载免提系统
功能需求:
-
实时显示网络状态
-
自动切换通话音频通道
-
低电量提醒功能
实现方案:
-
通过
+CIEV:1
监测网络注册状态 -
使用
AT+BIA=7,1
启用电池监控 -
结合
+CIEV:7
实现三级电量提醒
7.2 智能耳机控制
交互流程:
-
用户双击耳机触发
AT+COPS?
查询运营商 -
AG返回
+COPS: "China Mobile"
-
语音合成模块播报运营商信息
优化策略:
-
缓存运营商信息(有效期5分钟)
-
实现异步查询机制
-
添加查询超时处理(默认3秒)
八、协议扩展与兼容性考虑
8.1 编码协商机制
支持编码:
-
CVSD(必选)
-
mSBC(可选)
-
AAC(扩展)
协商流程:
-
AG发送
+BCS: 0
(CVSD) -
HF响应
AT+BCS: 1
(请求mSBC) -
AG确认
OK
完成协商
8.2 多设备协同
连接管理:
-
主设备优先级机制
-
音频焦点控制
-
资源抢占策略
状态同步:
九、总结与建议
9.1 开发建议
-
状态缓存:本地存储最后一次状态值,避免重复更新
-
超时机制:对 AT 命令设置合理超时(建议 5 秒)
-
兼容性测试:覆盖主流手机品牌(如三星、小米)
9.2 最佳实践
-
连接释放后重置状态:断开连接后清除本地缓存的状态信息
-
优先级处理:按呼叫状态 → 信号强度 → 电池电量的顺序处理通知
-
错误恢复:对无效的 + CIEV 消息进行过滤和日志记录
通过深度解析HFP协议中的关键AT命令和状态更新机制,本文为蓝牙开发者提供了完整的协议实现框架。在实际开发中,建议结合具体硬件平台特性进行协议栈优化,同时充分利用调试工具进行协议合规性验证。随着蓝牙技术向LE Audio演进,未来协议将支持更多低延迟、高音质的应用场景,值得开发者持续关注。
十、规范参考
-
HFP 1.8 Specification
-
3GPP TS 27.007
相关文章:
【HFP】蓝牙 HFP 协议状态通知机制研究
目录 一、状态通知体系架构 1.1 核心功能矩阵 1.2 三层控制体系 1.3 角色分工 1.4 协议栈层级 二、核心AT命令解析 2.1 ATCMER:指示器状态报告控制 2.2 ATBIA:指示器激活控制 2.3 CIEV:未请求结果码 三、关键功能实现机制 3.1 注册…...
unity100天学习计划
以下是一个为期100天的Unity学习大纲,涵盖从零基础到独立开发完整游戏的全流程,结合理论、实践和项目实战,每天学习2-3小时: 第一阶段:基础奠基(Day 1-20) 目标:掌握Unity引擎基础与C#编程 Day 1-5:引擎入门 安装Unity Hub和Unity Editor(LTS版本)熟悉Unity界面:S…...
STM32电机库 电机控制特性
ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...
MySQL数据库 - 事务
事务 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录 事务1. 事务简介2. 事务操作2.1 事务操作 - 方式一2.2 方式二代码实现 3. 事务四大特性(ACID)4. 并发事务问题5. 事务隔离级别代码实现 总结 1. 事务…...
火山引擎旗下的产品
用户问的是火山引擎旗下的产品,我需要详细列出各个类别下的产品。首先,我得确认火山引擎有哪些主要业务领域,比如云计算、大数据、人工智能这些。然后,每个领域下具体有哪些产品呢?比如云计算方面可能有云服务器、容器…...
用 Python 从零构建异步回显服务器
简介 让我们从 0 开始,搭建一个异步服务输出服务器。 套接字 套接字(socket),是不同计算机中实现通信的一种方式,你可以理解成一个接口,它会在客户端和服务端建立连接,一台发送数据ÿ…...
【3D文件】可爱小鹿3D建模,3D打印文件
【3D文件】可爱小鹿3D建模,3D打印文件 免费下载,下载链接: 3D文件可爱小鹿3D建模,可爱小鹿建模仿真,小鹿仿真设计,3D打印文件,免费下载资源-CSDN文库 资源下载: 3D文件可爱小鹿3D…...
RabbitMQ 优先级队列详解
本文是博主在记录使用 RabbitMQ 在执行业务时遇到的问题和解决办法,因此查阅了相关资料并做了以下记载,记录了优先级队列的机制和使用要点。 本文为长文,详细介绍了相关的知识,可作为学习资料看。 文章目录 一、优先级队列介绍1、…...
串口通信简述
一.串口的特点 1.全双工异步通信 全双工指通信双方可以同时进行数据的发送和接收操作。 异步通信是指通信双方不使用共同的时钟信号来同步数据传输,而是通过特殊的信号或约定来标识数据的开始和结束 2.数据字长度可编程(8 位或 9 位) 不…...
【2025年五一数学建模竞赛A题】完整思路和代码
1.问题背景与重述 2.解题思路分析 2.1 问题一的分析 问题一假设无人机以平行于水平面的方式飞行并投放物资,可以将物资的运动 类比成平抛运动,由于物资的重量较大,因此不能简单的看成质点,还要考虑物资 的重量。 2.1.1本题要求给…...
为了四季度的盈利,李斌的换人还在继续
李斌对蔚来和乐道人事调整还在继续。 4月10日,蔚来发布内部邮件宣布大量人事变动。 蔚来方面: 原用户关系(UR)负责人沈泓因个人原因将离开公司。 任命孙明担任用户关系(UR)负责人,向高级副总…...
Pytest 自动化测试框架详解
Pytest和Unittest测试框架的区别? 如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架&#x…...
sqli-labs靶场 less 9
文章目录 sqli-labs靶场less 9 时间盲注 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”…...
奇趣点播系统测试报告
1.项目简介 本项目旨在搭建一个视频共享点播系统,服务器支持用户通过前端浏览器访问服务器,获取展示与观看和操作的界面,最终实现视频的上传以及观看和删改查等基础管理功能。让用户拥有良好的观看体验和分享视频的快捷方式,此外…...
空地机器人在复杂动态环境下,如何高效自主导航?
随着空陆两栖机器人(AGR)在应急救援和城市巡检等领域的应用范围不断扩大,其在复杂动态环境中实现自主导航的挑战也日益凸显。对此香港大学王俊铭基于阿木实验室P600无人机平台自主搭建了一整套空地两栖机器人,使用Prometheus开源框架完成算法的仿真验证与…...
01 - QEMU 初始化概览 - Init()
目录 1.初始化 - qemu_init() 1.1.基本设备 1.2.日志 1.3.模块信息 1.4.子系统 1.5.选项解析 - 阶段一 1.6.选项解析 - 阶段二 1.7.选项配置 1.8.Trace 1.9.主线程 1.10.CPU 时钟 1.11.其他设置 1.12.创建虚拟机 1.13.启动虚拟机 2.主线程 - qemu_main() 2.1.处…...
Vue3 使用ref
<button click"changeMsg">change</button> <div>{{ message }}</div>//接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property,指向该内部值。 const message ref(hello world) const mum 1 co…...
React中 点击事件写法 的注意(this、箭头函数)
目录 1、错误写法:onClick{this.acceptAlls()} 2、正确写法:onClick{this.acceptAlls}(不带括号) 总结 方案1:构造函数绑定 方案2:箭头函数包装方法(更简洁) 方案3&am…...
DeepSeek AI大模型:中国智能时代的“争气机“-AI生成
DeepSeek AI大模型:中国智能时代的"争气机" 当全球科技巨头在万亿参数竞赛中你追我赶时,一家中国公司悄然改写了游戏规则。DeepSeek AI最新发布的"探月"大模型不仅以中英双语能力打破技术壁垒,更用"动态脑区"设…...
Java老鼠迷宫(递归)---案例来自韩顺平老师讲Java
题目: 粉色圈圈是启动,红色方框是阻挡,蓝色五角星是出口,走到出口,老鼠winner 代码: public class test6 {public static void main(String[] args){//创建二维数组int[][] map new int[8][7];// 最外围都…...
Python大数据视频教程
概述 最新整理的Python大数据视频教程已出,需要学习的小伙伴抓紧了。 课程亮点: ❶ 编程基石:从Python基础到高阶函数式编程,用代码驯服数据 ❷ 数据魔法:SQL进阶ETL实战,Pandas玩转百万级数据分析 ❸ 分…...
Java工厂模式解析:灵活对象创建的实践指南
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、模式定义与分类 工厂模式(Factory Pattern)是创建型设计模式的核心成员之一,主要解决对象创建过程中的灵活性问题。根…...
PDF转换格式失败?原因及解决方法全解析
在日常工作中,我们经常会遇到将PDF转换为Word、Excel、PPT等格式的需求。有时候以为一键转换就能搞掂,没想到却转换失败。到底问题出在哪?别急,我们可以看看是否以下几个问题引起的,找到解决问题的关键! 原…...
《轨道力学讲义》——第五讲:摄动理论基础
第五讲:摄动理论基础 引言 在实际的航天任务中,我们很少能够使用理想的二体问题来精确描述航天器的运动。地球的非球形性、大气阻力、太阳辐射压以及第三天体引力等各种因素都会对航天器轨道产生偏离理想轨道的影响。这些额外的力被称为"摄动力&q…...
【NLP】23.小结:选择60题
Question 1: What does the fixed lookup table in traditional NLP represent? A. A table of one‐hot vectors B. A table of pre‐trained dense word embeddings C. A dictionary of word definitions D. A table of n-gram counts Answer (中文): 答案选 B。传统NLP中“…...
C++核心机制-this 指针传递与内存布局分析
示例代码 #include<iostream> using namespace std;class A { public:int a;A() {printf("A:A()的this指针:%p!\n", this);}void funcA() {printf("A:funcA()的this指针:%p!\n", this);} };class B { public:int b;B() {prin…...
python asyncio 的基本使用
1、引言 asyncio 是 Python 标准库中的一个库,提供了对异步 I/O 、事件循环、协程和任务等异步编程模型的支持。 asyncio 文档 2、进程、线程、协程 线程 线程是操作系统调度的基本单位,同一个进程中的多个线程共享相同的内存空间。线程之间的切换由操…...
大模型中提到的分词器是什么
分词器在大模型中的核心解析 1. 分词器的定义与基本作用 分词器(Tokenizer)是自然语言处理(NLP)中的核心组件,负责将原始文本拆分为模型可处理的离散单元(称为Token)。其核心功能包括: 文本离散化:将连续字符序列转化为数字序列,作为模型的输入。语义单元提取:通过…...
Android中使用BuildConfig.DEBUG无法找到的解决方法
BuildConfig是Android构建工具自动生成的一个类,通常位于应用的包名下,包含一些构建相关的常量,比如DEBUG标志、应用ID、版本信息等。 遇到的问题可能有几种情况。首先,可能项目没有正确构建,导致BuildConfig没有被生…...
Python(14)Python内置函数完全指南:从基础使用到高阶技巧
目录 背景介绍一、内置函数全景分类1. 数据类型转换(15个)2. 数学运算(12个)3. 迭代处理(9个)4. 对象操作(11个)5. 输入输出(4个) 二、高阶函数应用场景1. en…...
echo命令,tail命令,反引号,重定向符
echo命令: 作用:在命令行中输出指定的内容,相当于print语句 语法:echo 指定的内容(当内容包含空格和特殊字符的时候,语句很复杂的时候,最好用双引号括起来) tail命令:…...
集成学习介绍
集成学习(Ensemble Learning)是一种机器学习范式,它通过组合多个模型的预测来提高整体模型的性能。单一模型可能在某些方面表现不佳或具有较高的偏差或方差,而集成方法能够通过结合多个模型的优点来克服这些问题,从而提…...
【CUDA】ubuntu环境下安装cuda
写在前面 软硬件匹配问题 :如老显卡安装ubuntu24, 会发现适合显卡的cuda不适合ubuntu24, 适合ubuntu24的cuda不适合显卡,因此安装ubuntu系统前,务必查明 :当前设备的显卡支持的cuda,支持哪些ubuntu版本 下面的三个问题…...
进程间通信-信号量
消息队列(Message Queue)是一种在不同组件或进程间进行异步通信的机制,它允许应用程序以松耦合的方式交换消息。消息队列就像一个缓冲区,发送者将消息放入队列,接收者从队列中取出消息进行处理。以下为你详细介绍消息队…...
Ubuntu 22.04安装MySQL : Qwen2.5 模型对话数据收集与微调教程
在Ubuntu 22.04安装MySQL的教程请点击下方链接进行参考: 点击这里获取MySQL安装教程 今天将为大家带来如何微调Qwen2.5模型并连接数据库进行对话的教程。快跟着小编一起试试吧~ 1 大模型 Qwen2.5 微调步骤 1.1 从 github 仓库 克隆项目 克隆存储库:#拉取代码 git clo…...
L1-8 新年烟花
单位 杭州百腾教育科技有限公司 新年来临,许多地方会举行烟花庆典庆祝。小 C 也想参加庆典,但不幸的是跟他一个想法的人实在太多,活动场地全是人人人人人人人人人…… 活动场地可视作一个 NM 的矩阵,其中有一些格子是空的&#…...
OpenCV中的轮廓检测方法详解
文章目录 引言一、什么是轮廓?二、OpenCV中的轮廓检测基础1. 基本步骤2. findContours函数详解 三、轮廓检索模式四、轮廓近似方法五、轮廓特征分析1. 轮廓面积2. 轮廓周长/弧长3. 轮廓近似(多边形拟合)4. 凸包5. 边界矩形6. 最小闭合圆7. 拟…...
AIP-231 批量方法:Get
编号231原文链接AIP-231: Batch methods: Get状态批准创建日期2019-06-18更新日期2019-06-18 一些API允许用户获取一组特定资源在一个时间点(例如使用读事务)的状态。批量获取方法提供了这个功能。 指南 API 可以 按照以下模式支持批量获取࿱…...
人工智能基础-matplotlib基础
绘制图形 import numpy as np x np.linspace(0, 10, 100) y np.sin(x) import matplotlib as mpl import matplotlib.pyplot as plt plt.plot(x, y) plt.show()绘制多条曲线 siny y.copy() cosy np.cos(x) plt.plot(x, siny) plt.plot(x, cosy) plt.show()设置线条颜色 …...
qt运行时报段错误
标题: qt运行时报段错误,查看stack,显示: 原因 报错的cpp文件新包含一个头文件,这个头文件里的pack指令有问题,如下: 解决办法 修改为正确的pack指令。...
【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门
🍑个人主页:Jupiter. 🚀 所属专栏:QT 欢迎大家点赞收藏评论😊 目录 Qt Creator 新建项⽬认识 Qt Creator 界⾯项⽬⽂件解析Qt 编程注意事项认识对象模型(对象树)Qt 窗⼝坐标体系 Qt Creator 新…...
CAP应用
1.工作原理 CAP(Consistent,Available,Partition - tolerant)框架在.NET 中的工作原理。CAP 是一个用于.NET 的分布式事务解决方案,主要用于实现微服务架构中的数据一致性(实现分布式事务的最终一致性&…...
典型操作系统内核架构
在典型操作系统架构(如下图所示)中,内核负责以安全、公平的方式为多个应用程序管理和共享硬件资源。 内核通过一组 API(即系统调用)向应用程序提供服务。这些 API 不同于常规库函数,因其是用户模式到内核模…...
AWS Redshift的使用场景及一些常见问题
Redshift 不是关系型数据库, 提供了Amazon Redshift Serverless 和 Amazon Redshift 都是构建于 Redshift 数仓引擎之上的,但它们适用的场景不同。Redshift和Dynamodb都可以存储数据, 分别怎么选择? 这里记录一些常见的问题和场景。 1. 如何选择用Amazon Redshift…...
**searchProperties 是什么,python中**是什么:解包字典的操作符
searchProperties 是什么,python中是什么:解包字典的操作符 在 Python 中,** 是用于解包字典的操作符,**searchProperties 是一个可变关键字参数。它允许函数接受任意数量的关键字参数,这些参数会被收集到一个字典中,字典的键是参数名,值是参数对应的值。 在 ButtonCon…...
.NET MCP 文档
MCP 概述 MCP(Model Context Protocol)是由 Anthropic 推出的一种开放协议,类似 AI 的 USB-C 扩展坞,用于在大模型和数据源之间建立安全的通信(授权),让 AI 应用能够安全地访问和操作本地或远程…...
07软件测试需求分析案例-修改用户信息
修改用户信息是后台管理菜单的一个功能模块,只有admin才有修改权限。包括查询用户名进行显示用户相关信息,并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息,提出问题,输出具有逻辑、规则、流程的业务…...
第九届“创客中国”中小企业创新创业大赛总决赛企业组三等奖项目—基于AI智能代码疫苗技术的数字供应链安全解决方案
项目名称:基于AI智能代码疫苗技术的数字供应链安全解决方案 企业名称:北京安普诺信息技术有限公司(悬镜安全) 项目简介: 基于AI智能代码疫苗技术的数字供应链安全解决方案,悬镜安全在全球范围内首创…...
企业级RAG行业应用落地方案——阿里云百炼
行业痛点分析 这张图主要围绕“行业痛点锚定”展开,通过雷达图和表格结合的方式,分析电商选品在不同维度下的情况: 分析对象:聚焦电商选品。维度展示:从可结构化程度、重复性、数据可得性、人机互动性、AI带来的价值这…...
Mac切换node版本
Mac切换node版本 1.首先安装n模块: sudo npm install -g n 2.升级node.js到最新稳定版 sudo n stable 3.升级到最新版 sudo n latest 4.n后面也可以跟随版本号,升级到任意版本 sudo n v0.10.26或sudo n 0.10.26 5.切换使用版本 sudo n 7.10.0 6.删除制定版本…...