FUTURE POLICE语音解构实战:MySQL数据库存储与数据分析教程

news2026/3/16 3:08:12
FUTURE POLICE语音解构实战MySQL数据库存储与数据分析教程想象一下你刚刚用FUTURE POLICE处理完一场两小时的团队会议录音。系统精准地识别出了每个人的发言生成了毫秒级对齐的字幕文件。但当你想要回顾上周关于“项目风险”的讨论或者想统计一下技术总监在整个季度会议中的发言占比时面对几十个散落在文件夹里的JSON文件是不是瞬间感到无从下手这就是我们今天要解决的问题。FUTURE POLICE提供了强大的语音解构能力但要让这些数据真正产生价值我们需要一个更聪明的存储和分析方案。把数据存进MySQL数据库就像给散乱的乐高积木找到了分类箱——不仅整齐还能让你快速拼出想要的任何形状。这篇教程我将带你从零开始搭建一个完整的语音数据管理系统。从MySQL环境准备、表结构设计到编写数据入库接口最后用SQL进行多维数据分析。整个过程就像组装一套精密的工具每一步都有明确的目标和可运行的代码。1. 为什么选择MySQL从数据孤岛到智能中枢在深入技术细节之前我们先看看不存数据库会面临哪些具体问题。上周我帮一个内容团队处理他们的播客音频。他们用FUTURE POLICE生成了几十期节目的字幕但当他们想找“所有提到‘人工智能伦理’的片段”时一个实习生花了整整一下午在文件里搜索。更麻烦的是当他们想分析不同主播的语速变化趋势时发现数据根本没法直接计算。MySQL这样的关系型数据库能完美解决这些问题。它不只是个存储仓库更是一个数据处理引擎。把FUTURE POLICE的输出存进去之后你可以秒级检索用一句SQL就能找到任意时间、任意关键词的所有对话片段多维分析轻松统计发言时长、情感趋势、高频词汇生成可视化报告数据关联把语音数据和其他业务数据如会议纪要、项目文档关联起来持久化服务通过API向外提供统一的数据查询服务团队共享变得简单更重要的是这个方案是可扩展的。今天你只是存文本和时间戳明天就可以加入说话人识别、情感分析、主题聚类所有数据都在同一个体系里。2. 环境准备快速搭建MySQL工作台我们先从最基础的开始——准备MySQL环境。如果你已经安装过MySQL可以跳过安装步骤直接看数据库创建部分。2.1 MySQL安装与启动在Ubuntu或Debian系统上安装MySQL只需要几条命令# 更新包列表 sudo apt update # 安装MySQL服务器 sudo apt install mysql-server -y # 启动MySQL服务 sudo systemctl start mysql # 设置开机自启 sudo systemctl enable mysql # 运行安全配置向导设置root密码等 sudo mysql_secure_installation运行安全配置时它会问你几个问题是否设置验证密码插件建议选“是”设置root用户的密码记住这个密码是否移除匿名用户建议选“是”是否禁止root远程登录根据需求选择是否移除测试数据库建议选“是”是否重新加载权限表选“是”对于Windows或macOS用户可以直接从MySQL官网下载安装程序图形界面安装更简单。2.2 创建专用数据库和用户安装完成后我们需要创建一个专门用于语音分析的数据库以及一个专用的数据库用户。这样做比直接用root用户更安全。用root用户登录MySQLmysql -u root -p输入你刚才设置的密码进入MySQL命令行后执行以下SQL-- 创建数据库使用utf8mb4字符集支持所有语言字符 CREATE DATABASE voice_analysis CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建专用用户设置一个强密码 CREATE USER voice_analystlocalhost IDENTIFIED BY SecurePass123!; -- 授予用户对voice_analysis数据库的所有权限 GRANT ALL PRIVILEGES ON voice_analysis.* TO voice_analystlocalhost; -- 刷新权限使设置生效 FLUSH PRIVILEGES; -- 切换到新创建的数据库 USE voice_analysis;这里有几个关键点utf8mb4字符集能完整支持Emoji和所有Unicode字符避免中文乱码创建专用用户遵循了最小权限原则提高了安全性记得把SecurePass123!换成你自己的强密码现在你的MySQL环境已经准备好了。我们可以开始设计存储语音数据的表结构了。3. 表结构设计构建语音数据的三层架构好的数据库设计就像建房子的蓝图决定了后续使用的便利性和性能。FUTURE POLICE的输出数据很丰富我们需要合理规划。我建议采用三层表结构它们之间的关系清晰直观音频元数据表存放文件级别的信息文本片段表存放识别出的句子或段落实体信息表存放从文本中提取的关键信息可选用于深度分析下面是具体的建表SQL语句我加了详细注释帮你理解每个字段的作用-- 1. 音频文件元数据表 - 记录每个处理过的音频文件 CREATE TABLE audio_metadata ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键自动递增, file_name VARCHAR(255) NOT NULL COMMENT 原始音频文件名如meeting_20240515.wav, file_path VARCHAR(500) COMMENT 文件在服务器上的存储路径, file_size BIGINT COMMENT 文件大小单位字节, duration_seconds FLOAT COMMENT 音频总时长单位秒, sample_rate INT COMMENT 采样率如16000, channels INT COMMENT 声道数1为单声道2为立体声, upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 文件上传或处理时间, additional_info JSON COMMENT 扩展信息JSON格式可存说话人数量、语言等, -- 创建索引加速查询 INDEX idx_upload_time (upload_time), INDEX idx_file_name (file_name(100)) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT存储语音文件的基本信息; -- 2. 转录文本片段表 - 核心数据表存储FUTURE POLICE的主要输出 CREATE TABLE transcript_segments ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, audio_id INT NOT NULL COMMENT 关联的音频文件ID外键, speaker_tag VARCHAR(50) COMMENT 说话人标签如spk_0、spk_1或具体人名, text_content TEXT NOT NULL COMMENT 识别出的文本内容, start_time FLOAT NOT NULL COMMENT 片段开始时间秒毫秒级精度, end_time FLOAT NOT NULL COMMENT 片段结束时间秒, confidence FLOAT COMMENT 识别置信度0-1之间越高越准确, sentiment_score FLOAT COMMENT 情感倾向分数-1到1负数为负面正数为正面, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 记录创建时间, -- 外键约束确保数据一致性 FOREIGN KEY (audio_id) REFERENCES audio_metadata(id) ON DELETE CASCADE, -- 复合索引覆盖常见查询场景 INDEX idx_audio_time (audio_id, start_time), INDEX idx_speaker (speaker_tag), INDEX idx_confidence (confidence) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT存储语音识别出的文本片段句子级; -- 3. 语音实体表 - 用于存储从文本中提取的关键信息 CREATE TABLE speech_entities ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, segment_id INT NOT NULL COMMENT 关联的文本片段ID, entity_type VARCHAR(50) NOT NULL COMMENT 实体类型KEYWORD关键词、PERSON人名、ORG组织名、DATE日期等, entity_text VARCHAR(200) NOT NULL COMMENT 实体文本内容, relevance_score FLOAT COMMENT 相关性分数可用于排序, start_pos INT COMMENT 在原文中的起始位置, end_pos INT COMMENT 在原文中的结束位置, -- 外键约束 FOREIGN KEY (segment_id) REFERENCES transcript_segments(id) ON DELETE CASCADE, -- 索引设计 INDEX idx_entity_type (entity_type), INDEX idx_entity_text (entity_text(50)), INDEX idx_segment_entity (segment_id, entity_type) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT存储从文本片段中提取的关键词或命名实体;这个设计有几个巧妙之处音频元数据表是入口每条记录对应一个处理过的文件。additional_info字段用JSON格式可以灵活存储各种扩展信息比如说话人数量、音频质量评分等。文本片段表是核心存储了FUTURE POLICE的主要输出。我特意增加了sentiment_score字段你可以用情感分析模型处理文本后填入这个值为后续的情感分析做准备。索引设计也很重要idx_audio_time能加速“查找某个音频在特定时间段的对话”这类查询。语音实体表是可选的进阶表。如果你对识别出的文本做了进一步处理比如用NLP模型提取关键词、识别人名地名结果可以存在这里。这样你就能直接查询“所有会议中提到的技术术语”而不需要每次都重新分析全文。执行完这些SQL你的数据库里就有了三张空表。接下来我们要让数据流动起来。4. 数据入库编写Python接口连接FUTURE POLICE表建好了现在需要把FUTURE POLICE产生的结果存进去。我会用一个完整的Python示例展示如何连接数据库、解析数据、批量插入。首先安装必要的Python库pip install mysql-connector-python假设FUTURE POLICE处理完一个音频文件后返回的数据结构是这样的{ audio_info: { file_name: weekly_meeting_20240515.wav, file_path: /data/audio/weekly_meeting_20240515.wav, duration: 3720.5, sample_rate: 16000, channels: 2, speaker_count: 4 }, segments: [ { speaker: spk_0, text: 好的我们开始本周的技术评审会。, start: 0.0, end: 3.2, confidence: 0.98 }, { speaker: spk_1, text: 我先汇报一下后端服务的性能优化进展。, start: 3.8, end: 7.1, confidence: 0.96 }, { speaker: spk_0, text: 数据库的查询延迟从200ms降到了50ms效果很明显。, start: 8.5, end: 12.3, confidence: 0.97 } ] }下面是完整的Python入库脚本import mysql.connector from mysql.connector import Error import json import os from datetime import datetime class VoiceDataImporter: 语音数据导入器负责将FUTURE POLICE结果存入MySQL def __init__(self, hostlocalhost, databasevoice_analysis, uservoice_analyst, passwordSecurePass123!): 初始化数据库连接参数 self.host host self.database database self.user user self.password password self.connection None def connect(self): 建立数据库连接 try: self.connection mysql.connector.connect( hostself.host, databaseself.database, userself.user, passwordself.password, charsetutf8mb4, # 重要支持中文和特殊字符 use_unicodeTrue ) if self.connection.is_connected(): print(成功连接到MySQL数据库) return True except Error as e: print(f连接数据库失败: {e}) return False def insert_audio_result(self, result_data): 插入单条语音处理结果 参数: result_data: dict或JSON字符串FUTURE POLICE的输出结果 if not self.connection or not self.connection.is_connected(): print(数据库未连接) return False cursor None try: cursor self.connection.cursor() # 解析数据 if isinstance(result_data, str): data json.loads(result_data) else: data result_data audio_info data.get(audio_info, {}) segments data.get(segments, []) if not audio_info.get(file_name): print(错误音频文件名不能为空) return False # 1. 插入音频元数据 insert_audio_sql INSERT INTO audio_metadata (file_name, file_path, duration_seconds, sample_rate, channels, additional_info) VALUES (%s, %s, %s, %s, %s, %s) # 准备additional_info JSON additional_info { speaker_count: audio_info.get(speaker_count), source_system: FUTURE_POLICE, process_time: datetime.now().isoformat() } audio_values ( audio_info.get(file_name), audio_info.get(file_path), audio_info.get(duration), audio_info.get(sample_rate), audio_info.get(channels), json.dumps(additional_info, ensure_asciiFalse) ) cursor.execute(insert_audio_sql, audio_values) audio_id cursor.lastrowid # 获取刚插入的音频ID print(f插入音频记录成功ID: {audio_id}) # 2. 批量插入文本片段 if segments: insert_segment_sql INSERT INTO transcript_segments (audio_id, speaker_tag, text_content, start_time, end_time, confidence) VALUES (%s, %s, %s, %s, %s, %s) segment_values [] for seg in segments: segment_values.append(( audio_id, seg.get(speaker), seg.get(text), seg.get(start), seg.get(end), seg.get(confidence) )) cursor.executemany(insert_segment_sql, segment_values) print(f插入 {len(segments)} 个文本片段成功) # 3. 可选插入实体信息如果有 entities data.get(entities, []) if entities: self._insert_entities(cursor, audio_id, entities) # 提交事务 self.connection.commit() print(f数据插入完成音频ID: {audio_id}) return audio_id except Error as e: print(f插入数据时出错: {e}) if self.connection: self.connection.rollback() # 出错时回滚 return False finally: if cursor: cursor.close() def _insert_entities(self, cursor, audio_id, entities): 插入实体信息内部方法 # 先查询出这个音频的所有片段ID cursor.execute(SELECT id, start_time FROM transcript_segments WHERE audio_id %s, (audio_id,)) segments cursor.fetchall() if not segments: return # 建立时间戳到片段ID的映射 segment_map {} for seg_id, start_time in segments: segment_map[round(start_time, 1)] seg_id # 四舍五入到0.1秒 insert_entity_sql INSERT INTO speech_entities (segment_id, entity_type, entity_text, relevance_score) VALUES (%s, %s, %s, %s) entity_values [] for entity in entities: # 根据时间戳找到对应的片段 entity_time round(entity.get(timestamp, 0), 1) segment_id segment_map.get(entity_time) if segment_id: entity_values.append(( segment_id, entity.get(type, KEYWORD), entity.get(text, ), entity.get(score, 1.0) )) if entity_values: cursor.executemany(insert_entity_sql, entity_values) print(f插入 {len(entity_values)} 个实体记录成功) def batch_import(self, results_list): 批量导入多个处理结果 success_count 0 for i, result in enumerate(results_list, 1): print(f正在处理第 {i}/{len(results_list)} 个文件...) if self.insert_audio_result(result): success_count 1 print(f批量导入完成成功 {success_count}/{len(results_list)}) return success_count def close(self): 关闭数据库连接 if self.connection and self.connection.is_connected(): self.connection.close() print(数据库连接已关闭) # 使用示例 def main(): # 创建导入器实例 importer VoiceDataImporter( hostlocalhost, databasevoice_analysis, uservoice_analyst, passwordSecurePass123! # 替换为你的密码 ) # 连接数据库 if not importer.connect(): return try: # 模拟FUTURE POLICE的输出数据 sample_result { audio_info: { file_name: team_meeting_20240515.wav, file_path: /recordings/team_meeting_20240515.wav, duration: 1800.5, sample_rate: 16000, channels: 1, speaker_count: 3 }, segments: [ { speaker: spk_0, text: 今天我们讨论一下Q2的产品规划。, start: 0.0, end: 3.5, confidence: 0.99 }, { speaker: spk_1, text: 用户反馈显示搜索功能需要优化。, start: 4.2, end: 8.1, confidence: 0.97 }, { speaker: spk_2, text: 我建议增加AI智能推荐模块。, start: 9.0, end: 12.8, confidence: 0.98 } ], entities: [ { text: 产品规划, type: KEYWORD, timestamp: 1.5, score: 0.9 }, { text: 搜索功能, type: KEYWORD, timestamp: 5.0, score: 0.85 }, { text: AI智能推荐, type: KEYWORD, timestamp: 10.5, score: 0.95 } ] } # 插入数据 audio_id importer.insert_audio_result(sample_result) if audio_id: print(f数据插入成功音频记录ID: {audio_id}) finally: # 关闭连接 importer.close() if __name__ __main__: main()这个脚本有几个关键设计连接管理使用类封装确保连接正确打开和关闭避免资源泄漏。批量插入对于文本片段使用executemany()批量插入比逐条插入快得多。事务处理使用数据库事务确保要么全部插入成功要么全部回滚保持数据一致性。错误处理捕获数据库操作异常出错时回滚事务避免脏数据。扩展性_insert_entities方法展示了如何处理额外的NLP分析结果你可以根据需要扩展。在实际使用中你可以把这个导入器集成到FUTURE POLICE的处理流程中实现处理完自动入库的流水线。5. 数据分析实战用SQL挖掘语音数据价值数据存进去了现在到了最有趣的部分——分析。SQL就像一把瑞士军刀能帮你从数据中挖掘出各种洞察。下面我分享几个实用的分析场景和对应的SQL查询。5.1 基础分析会议参与度统计想知道一次会议中谁发言最多谁的发言时间最长这个查询给你答案-- 分析单个会议的发言统计 SELECT speaker_tag as 发言人, COUNT(*) as 发言次数, ROUND(SUM(end_time - start_time), 1) as 总时长(秒), ROUND(AVG(end_time - start_time), 1) as 平均每次时长(秒), ROUND(SUM(end_time - start_time) / total_duration * 100, 1) as 时长占比(%) FROM transcript_segments ts CROSS JOIN ( SELECT duration_seconds as total_duration FROM audio_metadata WHERE id 1 -- 替换为你要分析的音频ID ) as audio_info WHERE audio_id 1 GROUP BY speaker_tag, total_duration ORDER BY SUM(end_time - start_time) DESC;这个查询会输出一个清晰的表格显示每个发言人的发言次数、总时长、平均时长和占比。对于会议主持人来说这是了解会议动态的宝贵数据。5.2 质量监控识别低置信度片段FUTURE POLICE的识别准确率很高但总有需要人工复核的情况。这个查询帮你快速定位可能有问题的地方-- 查找所有音频中置信度低于阈值的片段 SELECT am.file_name, am.upload_time, ts.speaker_tag, LEFT(ts.text_content, 50) as 文本预览, -- 只显示前50字符 ts.confidence, CONCAT(ROUND(ts.start_time, 1), s) as 开始时间, CONCAT(ROUND(ts.end_time, 1), s) as 结束时间, ROUND(ts.end_time - ts.start_time, 1) as 时长(秒) FROM transcript_segments ts JOIN audio_metadata am ON ts.audio_id am.id WHERE ts.confidence 0.90 -- 设置你的质量阈值 AND am.upload_time 2024-05-01 -- 只检查5月后的数据 ORDER BY ts.confidence ASC, am.upload_time DESC LIMIT 20; -- 每次只看最需要关注的20条我加了一些实用功能文本预览避免显示过长内容时间格式更易读按时间倒序显示最新的问题在前。你可以定期运行这个查询确保语音识别质量。5.3 情感分析会议情绪变化趋势如果你用情感分析模型处理了文本填充了sentiment_score字段这个分析会很有趣-- 分析会议中的情感变化按5分钟分段 SELECT CONCAT(FLOOR(start_time / 300), -, FLOOR(start_time / 300) 5, 分钟) as 时间段, COUNT(*) as 发言片段数, ROUND(AVG(sentiment_score), 3) as 平均情感分, ROUND(MIN(sentiment_score), 3) as 最低情感分, ROUND(MAX(sentiment_score), 3) as 最高情感分, -- 情感倾向分类 CASE WHEN AVG(sentiment_score) 0.2 THEN 积极 WHEN AVG(sentiment_score) -0.2 THEN 消极 ELSE 中性 END as 情感倾向 FROM transcript_segments WHERE audio_id 1 AND sentiment_score IS NOT NULL GROUP BY FLOOR(start_time / 300) ORDER BY FLOOR(start_time / 300);这个查询把会议按5分钟分段计算每个时间段的情感平均值。你能看到会议的情绪曲线是不是在讨论难题时情绪下降达成共识时情绪上升这对改进会议效率很有帮助。5.4 关键词追踪业务话题热度分析结合speech_entities表你可以追踪特定关键词的出现情况-- 追踪特定关键词在所有会议中的出现情况 SELECT am.file_name, DATE(am.upload_time) as 会议日期, ts.speaker_tag, se.entity_text as 关键词, ts.text_content as 上下文, CONCAT(ROUND(ts.start_time / 60, 1), 分) as 出现时间 FROM speech_entities se JOIN transcript_segments ts ON se.segment_id ts.id JOIN audio_metadata am ON ts.audio_id am.id WHERE se.entity_type KEYWORD AND se.entity_text IN (数据库, 性能, 安全, 用户体验) -- 你关心的关键词 AND am.upload_time DATE_SUB(NOW(), INTERVAL 30 DAY) -- 最近30天 ORDER BY am.upload_time DESC, ts.start_time;这个查询能帮你回答“最近一个月大家在哪些会议里讨论了数据库性能问题”对于项目管理和知识沉淀特别有用。5.5 高级分析发言模式识别这个稍微复杂一点的查询能识别出会议中的发言模式-- 分析发言间隔和对话模式 WITH conversation_flow AS ( SELECT speaker_tag, start_time, end_time, LAG(speaker_tag) OVER (ORDER BY start_time) as prev_speaker, LAG(end_time) OVER (ORDER BY start_time) as prev_end_time, start_time - LAG(end_time) OVER (ORDER BY start_time) as pause_before FROM transcript_segments WHERE audio_id 1 ORDER BY start_time ) SELECT speaker_tag as 当前发言人, prev_speaker as 前一位发言人, CONCAT(ROUND(start_time, 1), s) as 开始时间, CONCAT(ROUND(pause_before, 1), s) as 发言间隔, CASE WHEN pause_before 0.5 THEN 快速接话 WHEN pause_before BETWEEN 0.5 AND 2 THEN 正常间隔 WHEN pause_before 2 THEN 较长停顿 ELSE 会议开始 END as 对话节奏 FROM conversation_flow WHERE prev_speaker IS NOT NULL ORDER BY start_time LIMIT 15;这个查询使用窗口函数分析发言顺序和间隔能看出会议的对话节奏是激烈的辩论快速接话还是有序的讨论正常间隔6. 总结走到这里你已经完成了一个完整的语音数据管理系统从FUTURE POLICE的毫秒级语音解构到MySQL的结构化存储再到SQL的多维分析。这个过程就像把原始的语音矿石提炼成了可用的数据金属再加工成有价值的信息产品。回顾一下关键收获表结构设计是基础三层表结构音频-片段-实体既保证了灵活性又避免了数据冗余。合理的索引设计能让查询速度提升数倍。Python接口是桥梁自动化的数据入库流程让FUTURE POLICE和MySQL无缝衔接。批量插入和事务处理确保了数据完整性和性能。SQL分析是价值所在通过简单的查询你就能回答复杂的业务问题。谁在会议上主导讨论哪些话题被频繁提及会议的情绪走向如何这些洞察原本隐藏在音频中现在通过数据变得清晰可见。实际部署时你可能会遇到数据量增长的挑战。这时可以考虑为transcript_segments表按时间分区提升查询性能添加缓存层对常用查询结果进行缓存定期归档历史数据保持主表的高效运行这个方案的美妙之处在于它的可扩展性。今天你只是存储了文本和时间戳明天就可以加入更多维度的分析语速检测、关键词提取、话题聚类、摘要生成。所有数据都在同一个体系里分析维度可以不断丰富。最让我兴奋的是这套系统让语音数据真正“活”了起来。原本只能听一次的会议录音现在变成了可查询、可分析、可挖掘的数据资产。团队的知识沉淀、会议效率分析、项目复盘都有了数据支撑。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…