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

【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析

在这里插入图片描述

FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析

  • 1. 项目概述
  • 2. 技术原理
      • 2.1 图像变形基础
      • 2.2 常见的哈哈镜变形算法
        • 2.2.1 凸透镜效果
        • 2.2.2 凹透镜效果
        • 2.2.3 波浪效果
  • 3. 项目实现细节
      • 3.1 核心代码结构
      • 3.2 主要功能实现
        • 3.2.1 图像采集
        • 3.2.2 变形映射生成
        • 3.2.3 图像重映射
  • 4. 项目运行指南
      • 4.1 环境准备
        • 4.1.1 系统要求
        • 4.1.2 依赖安装
      • 4.2 运行项目
      • 4.3 参数调整
  • 5. 常见问题与解决方案
      • 5.1 摄像头无法打开
      • 5.2 性能问题
      • 5.3 图像变形效果不明显
  • 6. 进阶开发
      • 6.1 添加新效果
      • 6.2 性能优化
  • 7. 相关理论与论文
  • 8. 应用场景与扩展
      • 8.1 实际应用
      • 8.2 扩展方向
  • 9. 总结

1. 项目概述

FunnyMirrors是LearnOpenCV组织下的一个有趣计算机视觉项目,它利用OpenCV库实现了多种实时哈哈镜效果。哈哈镜(Funny Mirror)是一种能够扭曲图像产生滑稽效果的镜面,在游乐园和娱乐场所常见。该项目通过数字图像处理技术,在普通摄像头视频流中模拟了这种效果。

项目GitHub仓库:https://github.com/spmallick/learnopencv/tree/master/FunnyMirrors

2. 技术原理

2.1 图像变形基础

哈哈镜效果本质上是一种非线性图像变形技术,其数学基础可以表示为:

I d s t ( x , y ) = I s r c ( f ( x , y ) , g ( x , y ) ) I_{dst}(x,y) = I_{src}(f(x,y), g(x,y)) Idst(x,y)=Isrc(f(x,y),g(x,y))

其中:

  • I s r c I_{src} Isrc是源图像
  • I d s t I_{dst} Idst是变形后的图像
  • f ( x , y ) f(x,y) f(x,y) g ( x , y ) g(x,y) g(x,y)是变形函数

2.2 常见的哈哈镜变形算法

2.2.1 凸透镜效果

凸透镜效果可以通过径向变形实现:

r ′ = ( x − x c ) 2 + ( y − y c ) 2 r' = \sqrt{(x - x_c)^2 + (y - y_c)^2} r=(xxc)2+(yyc)2

r = { r ′ ( 1 − k ⋅ r ′ 2 ) if  r ′ ≤ R r ′ otherwise r = \begin{cases} r'(1 - k \cdot r'^2) & \text{if } r' \leq R \\ r' & \text{otherwise} \end{cases} r={r(1kr′2)rif rRotherwise

其中:

  • ( x c , y c ) (x_c, y_c) (xc,yc)是变形中心
  • k k k是变形强度系数
  • R R R是变形半径
2.2.2 凹透镜效果

凹透镜效果与凸透镜类似,但变形方向相反:

r = r ′ ( 1 + k ⋅ r ′ 2 ) r = r'(1 + k \cdot r'^2) r=r(1+kr′2)

2.2.3 波浪效果

波浪效果可以通过正弦波变形实现:

x ′ = x + A ⋅ sin ⁡ ( 2 π y λ + ϕ ) x' = x + A \cdot \sin(\frac{2\pi y}{\lambda} + \phi) x=x+Asin(λ2πy+ϕ)

y ′ = y + A ⋅ sin ⁡ ( 2 π x λ + ϕ ) y' = y + A \cdot \sin(\frac{2\pi x}{\lambda} + \phi) y=y+Asin(λ2πx+ϕ)

其中:

  • A A A是振幅
  • λ \lambda λ是波长
  • ϕ \phi ϕ是相位

3. 项目实现细节

3.1 核心代码结构

项目主要包含以下关键文件:

  • funnyMirrors.py:主程序文件,实现各种哈哈镜效果
  • utils.py:包含辅助函数和工具类

3.2 主要功能实现

3.2.1 图像采集
import cv2cap = cv2.VideoCapture(0)  # 打开默认摄像头
while True:ret, frame = cap.read()  # 读取帧if not ret:break
3.2.2 变形映射生成
def create_bulge_effect_map(shape, center, radius, strength):map_x = np.zeros(shape, np.float32)map_y = np.zeros(shape, np.float32)for y in range(shape[0]):for x in range(shape[1]):dx = x - center[0]dy = y - center[1]distance = np.sqrt(dx*dx + dy*dy)if distance < radius:factor = 1 - (distance / radius)**2factor = factor * strengthnew_x = dx * factor + center[0]new_y = dy * factor + center[1]map_x[y,x] = new_xmap_y[y,x] = new_yelse:map_x[y,x] = xmap_y[y,x] = yreturn map_x, map_y
3.2.3 图像重映射
def apply_effect(frame, map_x, map_y):return cv2.remap(frame, map_x, map_y, cv2.INTER_LINEAR)

4. 项目运行指南

4.1 环境准备

4.1.1 系统要求
  • Python 3.6+
  • OpenCV 4.0+
  • NumPy
4.1.2 依赖安装
pip install opencv-python numpy

4.2 运行项目

  1. 克隆仓库:
git clone https://github.com/spmallick/learnopencv.git
cd learnopencv/FunnyMirrors
  1. 运行主程序:
python funnyMirrors.py

4.3 参数调整

程序运行时可以通过键盘控制:

  • 1-6 键切换不同效果
  • +/- 调整变形强度
  • ESC 退出程序

5. 常见问题与解决方案

5.1 摄像头无法打开

错误现象

[ WARN:0] global /tmp/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

解决方案

  1. 检查摄像头是否正确连接
  2. 尝试更改摄像头索引:
cap = cv2.VideoCapture(1)  # 尝试其他索引
  1. 在Linux系统检查用户是否有摄像头访问权限

5.2 性能问题

问题现象:帧率过低,效果不流畅

优化方案

  1. 降低处理分辨率:
ret, frame = cap.read()
frame = cv2.resize(frame, (640, 480))  # 降低分辨率
  1. 优化映射计算,预先生成映射表
  2. 使用更高效的插值方法:
cv2.remap(frame, map_x, map_y, cv2.INTER_LINEAR)  # 改为INTER_NEAREST

5.3 图像变形效果不明显

调整方法

  1. 修改变形强度参数
  2. 调整变形中心位置
  3. 增大变形半径

6. 进阶开发

6.1 添加新效果

可以扩展项目添加更多变形效果,例如:

漩涡效果

def create_swirl_effect_map(shape, center, radius, strength):map_x = np.zeros(shape, np.float32)map_y = np.zeros(shape, np.float32)for y in range(shape[0]):for x in range(shape[1]):dx = x - center[0]dy = y - center[1]distance = np.sqrt(dx*dx + dy*dy)if distance < radius:angle = strength * (radius - distance) / radiusnew_x = center[0] + dx * np.cos(angle) - dy * np.sin(angle)new_y = center[1] + dx * np.sin(angle) + dy * np.cos(angle)map_x[y,x] = new_xmap_y[y,x] = new_yelse:map_x[y,x] = xmap_y[y,x] = yreturn map_x, map_y

6.2 性能优化

使用NumPy向量化运算替代循环:

def create_bulge_effect_map_optimized(shape, center, radius, strength):x = np.arange(shape[1])y = np.arange(shape[0])x, y = np.meshgrid(x, y)dx = x - center[0]dy = y - center[1]distance = np.sqrt(dx**2 + dy**2)factor = np.where(distance < radius, 1 - (distance / radius)**2, 0)factor = factor * strengthnew_x = np.where(distance < radius, dx * factor + center[0], x)new_y = np.where(distance < radius, dy * factor + center[1], y)return new_x.astype(np.float32), new_y.astype(np.float32)

7. 相关理论与论文

  1. 图像变形理论

    • Beier, T., & Neely, S. (1992). “Feature-based image metamorphosis”. ACM SIGGRAPH Computer Graphics.
  2. 实时图像处理

    • OpenCV官方文档中关于remap函数的优化实现
  3. 计算机视觉中的几何变换

    • Hartley, R., & Zisserman, A. (2003). “Multiple View Geometry in Computer Vision”. Cambridge University Press.
  4. 非线性图像变形

    • Gomes, J., et al. (1999). “Warping and Morphing of Graphical Objects”. Morgan Kaufmann.

8. 应用场景与扩展

8.1 实际应用

  • 娱乐应用:视频聊天特效
  • 艺术创作:数字艺术变形
  • 教育演示:光学变形原理展示

8.2 扩展方向

  1. 结合人脸检测,实现针对面部的局部变形
  2. 添加更多创意效果,如分形变形、液体模拟等
  3. 开发移动端应用,利用手机GPU加速处理

9. 总结

FunnyMirrors项目展示了如何利用OpenCV实现实时图像变形效果。通过该项目,我们可以学习到:

  1. 图像变形的基本原理和数学表示
  2. OpenCV中remap函数的高级用法
  3. 实时视频处理的基本流程
  4. 性能优化的多种技巧

该项目代码简洁但功能强大,是学习计算机视觉和图像处理的优秀实践案例。读者可以基于此项目进行扩展,开发出更多有趣的图像变形应用。

相关文章:

【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析

FunnyMirrors&#xff1a;基于OpenCV的实时哈哈镜效果实现技术解析 1. 项目概述2. 技术原理2.1 图像变形基础2.2 常见的哈哈镜变形算法2.2.1 凸透镜效果2.2.2 凹透镜效果2.2.3 波浪效果 3. 项目实现细节3.1 核心代码结构3.2 主要功能实现3.2.1 图像采集3.2.2 变形映射生成3.2.3…...

量子机器学习:下一代AI的算力革命与算法范式迁移——从量子神经网络到混合量子-经典架构的产业落地

一、引言&#xff1a;当AI遇见量子力学 2025年&#xff0c;全球量子计算市场规模突破200亿美元&#xff0c;而量子机器学习&#xff08;QML&#xff09;正以370%的年复合增长率&#xff08;数据来源&#xff1a;Gartner 2024&#xff09;成为最受关注的技术融合领域。传统深度…...

【数据结构】——栈

一、栈的概念和结构 栈其实就是一种特殊的顺序表&#xff0c;其只允许在一端进出&#xff0c;就是栈的数据的插入和删除只能在一端进行&#xff0c;进行数据的插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的元素遵循先进后出LIFO&#xff08;Last InFirst O…...

Octave 绘图快速入门指南

目录 1. 基本的 2D 绘图 2. 自定义图形样式 3. 绘制散点图 4. 绘制柱状图 5. 绘制直方图 6. 3D 绘图 6.6.1 3D 曲面图 6.6.2 3D 散点图 7. 绘制极坐标 8. 多子图绘制 总结 Octave 是一个类似于 MATLAB 的开源数学软件&#xff0c;广泛用于数值计算和数据分析。它提供…...

RabbitMQ深入学习

继续上一节的学习&#xff0c;上一节学习了RabbitMQ的基本内容&#xff0c;本节学习RabbitMQ的高级特性。 RocketMQ的高级特性学习见这篇博客 目录 1.消息可靠性1.1生产者消息确认1.2消息持久化1.3消费者消息确认1.4消费失败重试机制1.5消息可靠性保证总结 2.什么是死信交换机…...

数据结构中的栈与队列:原理、实现与应用

前言&#xff1a;栈和队列是计算机科学中两种最基础的线性数据结构&#xff0c;它们的独特操作规则和广泛的应用场景使其成为每一位开发者必须掌握的核心知识。本文将通过生活案例、代码实现和实际应用场景&#xff0c;带您深入理解这两种数据结构的精髓。 1.栈&#xff08;Sta…...

Android 13 默认打开 使用屏幕键盘

原生设置里&#xff0c;系统-语言和输入法-实体键盘-使用屏幕键盘 选项&#xff0c; 关闭时&#xff0c;外接物理键盘&#xff0c;如USB键盘&#xff0c;输入时不会弹出软键盘。 打开时&#xff0c;外接物理键盘&#xff0c;如USB键盘&#xff0c;输入时会弹出软键盘。 这个选…...

C++GO语言微服务之图片、短信验证码生成及存储

目录 01 session的处理 02 获取网页图片验证码ID 03 测试图片验证码 04 图片验证码模块集成 05 图片验证码功能移植微服务 06 图片验证码功能对接微服务的web实现 07 对接微服务的web实现步骤小结 08 Redis数据库基本操作回顾 09 go语言操作Redis数据库API介绍 10 go语…...

视觉革命来袭!ComfyUI-LTXVideo 让视频创作更高效

探索LTX-Video 支持的ComfyUI 在数字化视频创作领域&#xff0c;视频制作效果的提升对创作者来说无疑是一项重要的突破。LTX-Video支持的ComfyUI便是这样一款提供自定义节点的工具集&#xff0c;它专为改善视频质量、提升生成速度而开发。接下来&#xff0c;我们将详细介绍其功…...

MySQL 索引(一)

文章目录 索引&#xff08;重点&#xff09;硬件理解磁盘盘片和扇区定位扇区磁盘的随机访问和连续访问 软件方面的理解建立共识索引的理解 索引&#xff08;重点&#xff09; 索引可以提高数据库的性能&#xff0c;它的价值&#xff0c;在于提高一个海量数据的检索速度。 案例…...

认识 Linux 内存构成:Linux 内存调优之内存分配机制和换页行为认知

写在前面 博文内容涉及 Linux 中内存分配和换页机制的基本认知理解不足小伙伴帮忙指正 😃,生活加油99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行…...

uniapp-商城-50-后台 商家信息

本文介绍了如何在后台管理系统中添加和展示商家信息&#xff0c;包括商家logo、名称、电话、地址和介绍等内容&#xff0c;并支持后期上传营业许可等文件。通过使用uni-app的uni-forms组件&#xff0c;可以方便地实现表单的创建、校验和管理操作。文章详细说明了组件的引入、页…...

汇编语言的温度魔法:单总线温度采集与显示的奇幻之旅

在嵌入式系统的奇妙世界中&#xff0c;汇编语言与硬件的结合总是充满了无限可能。今天&#xff0c;我将带你走进一场充满乐趣的实验&#xff1a;如何用汇编语言在单片机上实现单总线温度采集与显示。这不仅是一次技术探索&#xff0c;更是一场点亮创意与灵感的奇幻之旅&#xf…...

2025盘古石初赛WP

来不及做&#xff0c;还有n道题待填坑 文章目录 手机取证 Mobile Forensics分析安卓手机检材&#xff0c;手机的IMSI是&#xff1f; [答案格式&#xff1a;660336842291717]养鱼诈骗投资1000&#xff0c;五天后收益是&#xff1f; [答案格式&#xff1a;123]分析苹果手机检材&a…...

巡检机器人数据处理技术的创新与实践

摘要 随着科技的飞速发展&#xff0c;巡检机器人在各行业中逐渐取代人工巡检&#xff0c;展现出高效、精准、安全等显著优势。当前&#xff0c;巡检机器人已从单纯的数据采集阶段迈向对采集数据进行深度分析的新阶段。本文探讨了巡检机器人替代人工巡检的现状及优势&#xff0c…...

MySQL的Order by与Group by优化详解!

目录 前言核心思想&#xff1a;让索引帮你“排好序”或“分好组”Part 1: ORDER BY 优化详解1.1 什么是 Filesort&#xff1f;为什么它慢&#xff1f;1.2 如何避免 Filesort&#xff1f;—— 利用索引的有序性1.3 EXPLAIN 示例 (ORDER BY) Part 2: GROUP BY 优化详解2.1 什么是…...

使用小丸工具箱(视频压缩教学)压缩7倍

我们日常经常会遇见视频录制或者剪辑视频生成之后&#xff0c;视频文件非常占用存储空间&#xff0c;那么这款开源工具可以帮助我们压缩7倍&#xff0c;而且视频质量依然清晰。 软件下载 ①&#xff1a;可以通过我分享的CSDN资源下载&#xff1a;https://download.csdn.net/d…...

ui组件二次封装(vue)

组件二次封装的意义 保证一个系统中ui风格和功能的一致性便于维护 从属性、事件、插槽、ref这几方面考虑 属性和事件的处理&#xff1a;ui组件上绑定$attrs&#xff08;v-model本质也是一个属性加一个事件&#xff0c;所以也在其列&#xff09; 在自定义组件中打印$attrs&am…...

利用大型语言模型有效识别网络威胁情报报告中的攻击技术

摘要 本研究评估了网络威胁情报&#xff08;CTI&#xff09;提取方法在识别来自网络威胁报告中的攻击技术方面的性能&#xff0c;这些报告可从网络上获取&#xff0c;并使用了 MITRE ATT&CK 框架。我们分析了四种配置&#xff0c;这些配置利用了最先进的工具&#xff0c;包…...

笔试模拟 day4

观前提醒&#xff1a; 笔试所有系列文章均是记录本人的笔试题思路与代码&#xff0c;从中得到的启发和从别人题解的学习到的地方&#xff0c;所以关于题目的解答&#xff0c;只是以本人能读懂为目标&#xff0c;如果大家觉得看不懂&#xff0c;那是正常的。如果对本文的某些知…...

TCP的连接管理

三次握手 什么是三次握手&#xff1f; 1. 第一次握手&#xff08;客户端 → 服务器&#xff09; 客户端发送一个 SYN 报文&#xff0c;请求建立连接。 报文中包含一个初始序列号 SEQ x。 表示&#xff1a;我想和你建立连接&#xff0c;我的序列号是 x。 2. 第二次握手&a…...

ffmpeg 写入avpacket时候,即av_interleaved_write_frame方法是如何不需要 业务层释放avpacket的 逻辑分析

我们在通过 av_interleaved_write_frame方法 写入 avpacket的时候&#xff0c;通常不需要关心 avpacket的生命周期。 本文分析一下内部实现的部分。 ----> 代表一个内部实现。 A(){ B(); C(); } B(){ D(); } 表示为: A ---->B(); ---->D(); ---->C(); int…...

【MyBatis-7】深入理解MyBatis二级缓存:提升应用性能的利器

在现代应用开发中&#xff0c;数据库访问往往是性能瓶颈之一。作为Java生态中广泛使用的ORM框架&#xff0c;MyBatis提供了一级缓存和二级缓存机制来优化数据库访问性能。本文将深入探讨MyBatis二级缓存的工作原理、配置方式、使用场景以及最佳实践&#xff0c;帮助开发者充分利…...

扫雷革命:矩阵拓扑与安全扩散的数学之美

目录 扫雷革命:矩阵拓扑与安全扩散的数学之美引言第一章 雷区生成算法1.1 组合概率模型1.2 矩阵编码体系第二章 数字计算系统2.1 卷积核运算2.2 边缘处理第三章 安全扩散机制3.1 广度优先扩散3.2 记忆化加速第四章 玩家推理模型4.1 线性方程组构建4.2 概率决策模型第五章 高级…...

通俗的桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09; 就像一座桥&#xff0c;把两个原本独立变化的东西连接起来&#xff0c;让它们可以各自自由变化&#xff0c;互不干扰。简单来说&#xff0c;就是 “把抽象和实现分开&#xff0c;用组合代替继承”。 一句话理解桥接模式 假设你…...

金丝猴食品:智能中枢AI-COP构建全链路数智化运营体系

“金丝猴奶糖”&#xff0c;这个曾藏在无数人童年口袋里的甜蜜符号&#xff0c;如今正经历一场数智焕新。当传统糖果遇上数字浪潮&#xff0c;这家承载着几代人味蕾记忆的企业&#xff0c;选择以数智化协同运营平台为“新配方”&#xff0c;将童年味道酿成智慧管理的醇香——让…...

基于定制开发开源AI智能名片S2B2C商城小程序的公私域流量融合运营策略研究

摘要&#xff1a;本文以定制开发开源AI智能名片S2B2C商城小程序为技术载体&#xff0c;系统探讨公域流量向私域流量沉淀的数字化路径。研究通过分析平台流量&#xff08;公域流量&#xff09;与私域流量的共生关系&#xff0c;提出"公域引流-私域沉淀-数据反哺"的闭环…...

一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨

随着企业数据的爆炸式增长&#xff0c;如何有效地存储、管理和分析这些数据&#xff0c;从中提炼价值&#xff0c;成为现代企业的核心竞争力之一。数据仓库 (Data Warehouse, DW) 正是为此而生的关键技术。理解其基础理论对于构建高效的数据驱动决策体系至关重要。 一、数据库…...

智慧能源大数据平台建设方案(PPT)

1、建设背景 2、建设思路 3、建设架构 4、应用场景 5、展望 软件开发全方位管理资料包清单概览&#xff1a; 任务部署指令书&#xff0c;可行性研究报告全集&#xff0c;项目启动审批文件&#xff0c;产品需求规格详尽说明书&#xff0c;需求调研策略规划&#xff0c;用户调研问…...

递归函数(斐波那契数列0,1,1,2,3,5,8,13,21,34,55...)

目录 一、斐波那契数列&#xff08;兔子问题&#xff09; 二、迭代法&#xff08;用while循环推下一项 ) 三、递归函数 (函数的定义中调用函数自身的一种函数定义方式) 四、递归函数的底层逻辑推理 (二叉树推倒最左下节点回退法) 一、斐波那契数列&#xff08;兔子问题&…...

Python 从 SQLite 数据库中批量提取图像数据

Python 从 SQLite 数据库中批量提取图像数据 flyfish 实现了一个可扩展的 SQLite 图像导出工具&#xff0c;能够自动检测图像格式、处理数据前缀&#xff0c;并将数据库中的二进制图像数据导出为文件系统中的标准图像文件 import os import sqlite3 from typing import Dict…...

rust-candle学习笔记12-实现因果注意力

参考&#xff1a;about-pytorch 定义结构体&#xff1a; struct CausalAttention {w_qkv: Linear,dropout: Dropout, d_model: Tensor,mask: Tensor,device: Device, } 定义new方法&#xff1a; impl CausalAttention {fn new(vb: VarBuilder, embedding_dim: usize, ou…...

vue3使用tailwindcss报错问题

npm create vitelatestnpm install -D tailwindcss postcss autoprefixernpx tailwindcss init 4. 不过执行 npx tailwindcss init 的时候控制台就报错了PS E:\vite-demo> npx tailwindcss init npm ERR! cb.apply is not a function npm ERR! A complete log of this run c…...

MySQL COUNT(*) 查询优化详解!

目录 前言1. COUNT(*) 为什么慢&#xff1f;—— InnoDB 的“计数烦恼” &#x1f914;2. MySQL 执行 COUNT(*) 的方式 (InnoDB)3. COUNT(*) 优化策略&#xff1a;快&#xff01;准&#xff01;狠&#xff01;策略一&#xff1a;利用索引优化带 WHERE 子句的 COUNT(*) (最常见且…...

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如 HashTable 这样的代码中&#xff0c;他的方法都是使用 sync…...

RAG 赋能客服机器人:多轮对话与精准回复

一、引言 在人工智能技术飞速发展的今天&#xff0c;客服机器人已成为企业提升服务效率的重要工具。然而&#xff0c;传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术通过结合大语言…...

rust-candle学习笔记13-实现多头注意力

参考&#xff1a;about-pytorch 定义结构体&#xff1a; use core::f32;use candle_core::{DType, Device, Result, Tensor}; use candle_nn::{embedding, linear_no_bias, linear, ops, Dropout, Linear, Module, VarBuilder, VarMap};struct MultiHeadAttention {w_qkv: Li…...

PyTorch API 5 - 全分片数据并行、流水线并行、概率分布

文章目录 全分片数据并行 (FullyShardedDataParallel)torch.distributed.fsdp.fully_shardPyTorch FSDP2 (fully_shard) Tensor Parallelism - torch.distributed.tensor.parallel分布式优化器流水线并行为什么需要流水线并行&#xff1f;什么是 torch.distributed.pipelining&…...

STL-list

一、 list的介绍 std::list 是 C 标准模板库&#xff08;STL&#xff09;中的一种双向链表容器。每个元素包含指向前后节点的指针&#xff0c;支持高效插入和删除操作&#xff0c;但随机访问性能较差。 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#x…...

WPF中如何自定义控件

WPF自定义控件简化版&#xff1a;账户菜单按钮&#xff08;AccountButton&#xff09; 我们以**“账户菜单按钮”为例&#xff0c;用更清晰的架构实现一个支持标题显示、渐变背景、选中状态高亮**的自定义控件。以下是分步拆解&#xff1a; 一、控件核心功能 我们要做一个类似…...

华为云Git使用与GitCode操作指南

案例介绍 本文档带领开发者学习如何在云主机上基于GitCode来使用Git来管理自己的项目代码,并使用一些常用的Git命令来进行Git环境的设置。 案例内容 1 概述 1.1 背景介绍 Git 是一个快速、可扩展的分布式版本控制系统,它拥有异常丰富的命令集,可以提供高级操作和对内部…...

UniRepLknet助力YOLOv8:高效特征提取与目标检测性能优化

文章目录 一、引言二、UniRepLknet 的框架原理&#xff08;一&#xff09;架构概述&#xff08;二&#xff09;架构优势 三、UniRepLknet 在 YOLOv8 中的集成&#xff08;一&#xff09;集成方法&#xff08;二&#xff09;代码实例 四、实验与对比&#xff08;一&#xff09;对…...

【软件工程】基于频谱的缺陷定位

基于频谱的缺陷定位&#xff08;Spectrum-Based Fault Localization, SBFL&#xff09;是一种通过分析程序执行覆盖信息&#xff08;频谱数据&#xff09;来定位代码中缺陷的方法。其核心思想是&#xff1a;通过测试用例的执行结果&#xff08;成功/失败&#xff09;和代码覆盖…...

stm32之IIC

目录 1.I2C1.1 简介1.2 硬件电路1.3 时序基本单元1.4 时序实例1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读 2.MPU60502.1 简介2.2 参数2.3 硬件电路2.4 框图2.5 文档 3.软件操作MPU60504.I2C通信外设4.1 简介4.2 I2C框图4.3 基本结构4.4 主机发送/接收4.5 软件/硬件波形…...

阿里云购买ECS 安装redis mysql nginx jdk 部署jar 部署web

阿里云服务维护 1.安装JDK 查询要安装jdk的版本,命令&#xff1a;yum -y list java* 命令&#xff1a;yum install -y java-1.8.0-openjdk.x86_64 yum install -y java-17-openjdk.x86_64 2.安装nginx 启用 EPEL 仓库 sudo yum install epel-release 安装 Nginx sudo yum …...

记录 ubuntu 安装中文语言出现 software database is broken

搜索出来的结果是 sudo apt-get install language-pack-zh-han* 然而,无效,最后手动安装如下 apt install language-pack-zh-hans apt install language-pack-zh-hans-base apt install language-pack-gnome-zh-hans apt install fonts-arphic-uming apt install libreoffic…...

质数和约数

一、知识和经验 把质数和约数放在一起就是因为他们有非常多的联系&#xff0c;为了验证这个观点我们可以先学习唯一分解定理&#xff1a;一个大于 1 的自然数一定能被唯一分解为有限个质数的乘积。 而且一个数不仅能被质数分解&#xff0c;原本也应该被自己的约数分解&#xf…...

OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)详解

OSPF的四种特殊区域&#xff08;Stub、Totally Stub、NSSA、Totally NSSA&#xff09;通过限制LSA的传播来优化网络性能&#xff0c;减少路由表规模。以下是它们的核心区别&#xff1a; 1. Stub 区域&#xff08;末梢区域&#xff09; 允许的LSA类型&#xff1a;Type 1-3&#…...

Docker中运行的Chrome崩溃问题解决

问题 各位看官是否在 Docker 容器中的 Linux 桌面环境&#xff08;如Xfce&#xff09;上启动Chrome &#xff0c;遇到了令人沮丧的频繁崩溃问题&#xff1f;尤其是在打开包含图片、视频的网页&#xff0c;或者进行一些稍复杂的操作时&#xff0c;窗口突然消失&#xff1f;如果…...

【从零实现JsonRpc框架#3】线程模型与性能优化

1.Muduo 的线程模型 Muduo 基于 Reactor 模式 &#xff0c;采用 单线程 Reactor 和 多线程 Reactor 相结合的方式&#xff0c;通过事件驱动和线程池实现高并发。 1. 单线程模型 核心思想 &#xff1a;所有 I/O 操作&#xff08;accept、read、write&#xff09;和业务逻辑均…...