FaceFusion 从0开始本地部署,RTX4060
FaceFusion 从0开始本地部署指南
一、环境准备
1. 基础工具安装
1.1 Git 安装
- 使用管理员权限打开 PowerShell
- 执行安装命令:
winget install -e --id Git.Git
- 验证安装:
git --version
1.2 FFmpeg 安装
- 使用管理员权限打开 PowerShell
- 执行安装命令:
winget install -e --id Gyan.FFmpeg
-
添加环境变量:
- 打开"系统属性" -> “环境变量”
- 在"系统变量"的 Path 中添加:
C:\Program Files\ffmpeg\bin
-
在 conda 环境中配置 FFmpeg(两种方法):
方法一:单独添加 FFmpeg 路径
# 激活环境 conda activate py310_facefusion# 添加 FFmpeg 路径到 conda 环境 conda env config vars set PATH="%PATH%;C:\Users\yuuu\AppData\Local\Microsoft\WinGet\Links"# 重新激活环境使变更生效 conda deactivate conda activate py310_facefusion
方法二:继承系统 PATH(推荐)
# 激活环境 conda activate py310_facefusion# 将系统环境变量复制到 conda 环境 conda env config vars set PATH="%PATH%"# 重新激活环境使变更生效 conda deactivate conda activate py310_facefusion
-
验证安装:
# 确保在 conda 环境中
conda activate py310_facefusion# 验证 FFmpeg
where ffmpeg
ffmpeg -version
1.3 K-Lite Codec Pack Basic 安装
- 使用管理员权限打开 PowerShell
- 执行安装命令:
winget install -e --id CodecGuide.K-LiteCodecPack.Basic
1.4 Anaconda 安装
- 下载 Anaconda:
- 访问 Anaconda官网
- 下载 Python 3.10 版本的安装包
- 安装步骤:
- 运行安装程序
- 选择"Install for All Users"
- 建议安装到默认路径:
C:\ProgramData\Anaconda3
- 勾选"Add Anaconda to PATH"
- 验证安装:
conda --version
python --version
1.5 创建虚拟环境
- 打开 Anaconda Prompt(管理员)
- 创建 Python 3.10 环境:
# 创建环境时继承系统环境变量
conda create -n py310_facefusion python=3.10 --copy-system-site-packages
如果环境已经创建,可以修改现有环境:
# 激活环境
conda activate py310_facefusion# 将系统环境变量复制到 conda 环境
conda env config vars set PATH="%PATH%"# 或者编辑 conda 环境配置文件
# 打开 C:\Users\<用户名>\.conda\envs\py310_facefusion\etc\conda\activate.d\env_vars.bat
# 添加以下内容:
@echo off
set "PATH=%PATH%;C:\Users\yuuu\AppData\Local\Programs\Python\Python310;C:\Users\yuuu\AppData\Local\Programs\Python\Python310\Scripts"
如果只想添加 Python 路径:
conda env config vars set PATH="%PATH%;C:\Users\yuuu\AppData\Local\Programs\Python\Python310;C:\Users\yuuu\AppData\Local\Programs\Python\Python310\Scripts"# 重新激活环境使变更生效
conda deactivate
conda activate py310_facefusion
验证 Python 是否可用:
where python
python --version
注意:
- 环境变量覆盖只在当前终端会话中有效
- 退出虚拟环境后会恢复原始环境变量
- 这不会永久修改系统环境变量
取消当前环境的 PATH 配置:
# 1. 查看当前环境变量配置
conda env config vars list# 2. 取消 PATH 变量设置
conda env config vars unset PATH# 3. 重新激活环境使更改生效
conda deactivate
conda activate py310_facefusion# 4. 验证环境变量是否已清除
conda env config vars list
如果还有其他配置文件:
- 检查并删除环境变量配置文件:
# 删除 activate.d 目录下的配置文件
del C:\Users\yuuu\.conda\envs\py310_facefusion\etc\conda\activate.d\env_vars.bat
del C:\Users\yuuu\.conda\envs\py310_facefusion\etc\conda\activate.d\path.bat
- 如果需要特定的 PATH 配置,建议:
- 在 base 环境中配置
- 或使用 .condarc 文件进行全局配置
- 或在激活环境时临时设置
1.6 配置镜像源
- 添加清华源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
- 配置 pip 源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
1.7 注意事项:
- 所有安装命令建议使用管理员权限运行
- 安装完成后需要重启 PowerShell 或 CMD 使环境变量生效
- 如果 winget 命令不可用,需要先在 Microsoft Store 中安装 App Installer
- 确保网络连接稳定,特别是在配置镜像源时
- 如果安装过程中遇到权限问题,检查是否使用了管理员权限
- 建议在安装完成后重启系统,确保所有配置生效
1.8 常见问题:
-
FFmpeg 未找到:
- 检查环境变量是否正确配置
- 尝试重启终端或系统
-
Conda 命令未找到:
- 检查 Anaconda 是否已添加到 PATH
- 使用 Anaconda Prompt 而不是普通终端
-
pip 或 conda 下载速度慢:
- 确认镜像源配置是否正确
- 尝试更换其他镜像源
2. 显卡环境
2.1 NVIDIA 驱动安装
- 检查显卡型号和当前驱动:
nvidia-smi
- 如果未安装驱动:
- 访问 NVIDIA驱动下载
- 选择对应显卡型号下载驱动
- 运行安装程序,按默认选项安装
2.2 CUDA 环境配置
- 安装 PyTorch (包含 CUDA):
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
- 安装 cuDNN:
conda install -c conda-forge cudnn
- 安装 TensorRT:
pip install tensorrt --extra-index-url https://pypi.nvidia.com
- 安装 OpenVINO(可选):
pip install openvino
2.3 CUDA 环境验证
- 创建验证脚本
验证cuda相关的安装.py
:
import torch
import sysdef check_cuda():print(f"Python 版本: {sys.version}")print(f"PyTorch 版本: {torch.__version__}")print(f"CUDA 是否可用: {torch.cuda.is_available()}")if torch.cuda.is_available():print(f"CUDA 版本: {torch.version.cuda}")print(f"cuDNN 版本: {torch.backends.cudnn.version()}")print(f"GPU 设备名称: {torch.cuda.get_device_name(0)}")print(f"GPU 数量: {torch.cuda.device_count()}")# 测试 CUDA 计算x = torch.rand(5, 3)print("\n测试 CPU 张量:")print(x)print("\n测试 GPU 张量:")if torch.cuda.is_available():x = x.cuda()print(x)else:print("CUDA 不可用,请检查安装")if __name__ == "__main__":check_cuda()
- 运行验证:
python 验证cuda相关的安装.py
2.4 注意事项:
-
CUDA 版本要求:
- PyTorch 2.x 推荐 CUDA 11.8 或更高版本
- 确保 NVIDIA 驱动版本支持所安装的 CUDA 版本
-
内存管理:
- 确保显存足够(建议 8GB 以上)
- 适当设置批处理大小避免显存溢出
2.5 常见问题:
-
CUDA 不可用:
- 检查 NVIDIA 驱动是否正确安装
- 确认 PyTorch 是否安装了 CUDA 版本
- 检查 CUDA 环境变量是否正确
-
显存不足:
- 减小批处理大小
- 使用显存优化选项
- 考虑使用显存更大的显卡
-
版本不匹配:
- 确保 PyTorch、CUDA、cuDNN 版本互相兼容
- 需要时可以降级或升级相应组件
二、安装步骤
1. 系统工具安装
- 使用管理员权限打开 PowerShell
- 安装 Git
- 安装 FFmpeg
- 安装编解码器
- 配置环境变量
2. Python 环境配置
- 安装 Anaconda
- 创建虚拟环境
- 激活虚拟环境
- 配置 pip 和 conda 镜像源
3. CUDA 环境配置
- 安装 NVIDIA 驱动
- 安装 CUDA Toolkit
- 安装 cuDNN
- 安装 PyTorch
- 安装 TensorRT
4. 项目配置
4.1 克隆项目
- 创建项目目录:
mkdir S:\AI_App
cd S:\AI_App
- 克隆项目:
git clone https://github.com/facefusion/facefusion.git
cd facefusion
4.2 安装项目依赖
- 确保在正确的环境中:
conda activate py310_facefusion
- 安装项目依赖:
# 安装 gradio 用于 UI 界面
pip install gradio gradio_rangeslider# 运行项目的安装脚本
python install.py
4.3 下载模型文件
- 自动下载(推荐):
# 自动下载所需的模型文件
python facefusion.py force-download
该命令会执行以下操作:
-
检查
.assets/models/
目录是否存在,不存在则创建 -
下载以下必需的模型文件:
- 人脸检测模型:
retinaface_10g.onnx
(人脸定位)scrfd_2.5g.onnx
(人脸检测)yoloface_8n.onnx
(人脸识别)
- 人脸特征模型:
recognition_hybrid.onnx
(人脸特征提取)recognition_dynamic.onnx
(动态特征识别)
- 人脸处理模型:
inswapper_128.onnx
(人脸交换)GFPGANv1.4.pth
(人脸增强)79999_iter.pth
(表情恢复)parsing_parsenet.onnx
(人脸解析)
- 其他辅助模型
- 人脸检测模型:
-
下载过程:
- 自动选择最快的下载源
- 显示下载进度
- 校验文件完整性
- 如果文件已存在且完整,则跳过
-
下载源包括:
- GitHub Release
- Hugging Face
- 项目官方 CDN
- 社区镜像
-
注意事项:
- 需要稳定的网络连接
- 总下载大小约 2-3GB
- 部分地区可能需要代理
- 建议使用 VPN 或镜像加速
-
常见问题处理:
- 如果下载中断:重新运行命令会继续下载
- 如果校验失败:删除对应文件重新下载
- 如果下载速度慢:可以尝试手动下载方式
-
手动下载(如果自动下载太慢):
a. 创建目录结构:mkdir -p .assets/models
b. 从以下地址下载模型文件:
-
主要下载源:
-
GitHub:
- 基础URL: https://github.com
- 路径模板: /facefusion/facefusion-assets/releases/download/{base_name}/{file_name}
- 完整示例: https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx
-
Hugging Face:
- 基础URL: https://huggingface.co
- 路径模板: /facefusion/{base_name}/resolve/main/{file_name}
- 完整示例: https://huggingface.co/facefusion/models/resolve/main/inswapper_128.onnx
注意:下载时需要将路径模板中的 {base_name} 替换为 “models”,{file_name} 替换为具体的模型文件名
-
-
需要下载的模型文件:
- 人脸检测模型:
retinaface_10g.onnx
(约 20MB)scrfd_2.5g.onnx
(约 5MB)yoloface_8n.onnx
(约 8MB)
- 人脸特征模型:
recognition_hybrid.onnx
(约 90MB)recognition_dynamic.onnx
(约 45MB)
- 人脸处理模型:
inswapper_128.onnx
(约 1.2GB)GFPGANv1.4.pth
(约 350MB)79999_iter.pth
(约 450MB)parsing_parsenet.onnx
(约 100MB)
- 其他辅助模型(根据需要下载)
- 人脸检测模型:
c. 放置文件:
- 将下载的模型文件放入
.assets/models/
目录 - 确保文件名与原始文件名完全一致
- 不要修改文件内容或重命名文件
- 文件结构应该如下:
.assets/ └── models/├── retinaface_10g.onnx├── scrfd_2.5g.onnx├── yoloface_8n.onnx├── recognition_hybrid.onnx├── recognition_dynamic.onnx├── inswapper_128.onnx├── GFPGANv1.4.pth├── 79999_iter.pth└── parsing_parsenet.onnx
d. 验证文件完整性:
# 运行程序会自动检查模型文件 python facefusion.py run
e. 常见问题:
- 如果下载链接失效,可以:
- 使用
force-download
命令获取最新链接 - 查看项目 Discussions 区获取镜像链接
- 通过社区分享获取
- 使用
- 如果文件校验失败:
- 确保完整下载,没有断点续传
- 检查文件是否被修改
- 重新下载对应版本的文件
-
4.3.1 哈希验证失败的处理方法
当看到类似 “[FACEFUSION.DOWNLOAD] Validating hash for xxx failed” 的错误时:
- 清理已下载的文件:
# Windows
del .assets\models\alexandra_daddario_224
# 或 Linux/Mac
rm .assets/models/alexandra_daddario_224
-
重新下载的方法:
a. 使用命令行:python facefusion.py force-download
b. 或手动下载:
- 访问 https://github.com/facefusion/facefusion-assets/releases
- 下载对应的文件
- 确保完整下载(不要使用断点续传)
-
验证步骤:
- 下载完成后运行程序会自动验证
- 如果还是失败,尝试使用其他下载源
- 确保网络稳定,最好使用代理或VPN
-
预防措施:
- 使用稳定的网络连接
- 避免使用下载管理器
- 确保磁盘有足够空间
- 下载时不要暂停或中断
4.4 修改配置文件
- 创建或编辑
facefusion.ini
:
[general]
# 执行提供程序设置
execution_providers = ['cuda'] # 可选值: ['cpu', 'cuda', 'coreml', 'directml', 'openvino', 'rocm', 'tensorrt']
execution_thread_count = 8 # 范围: 1-32,控制处理线程数
execution_queue_count = 1 # 范围: 1-4,控制任务队列数[memory]
# 显存管理策略
video_memory_strategy = 'strict' # 可选值: ['strict', 'moderate', 'tolerant']
system_memory_limit = 0 # 范围: 0-128,系统内存限制(GB),0表示不限制[face_detector]
# 人脸检测器设置
model = 'retinaface' # 可选值: ['many', 'retinaface', 'scrfd', 'yoloface']
size = '640x640' # 检测尺寸,根据模型支持的尺寸选择
score = 0.5 # 范围: 0.0-1.0,检测置信度阈值[face_selector]
# 人脸选择器设置
mode = 'reference' # 可选值: ['many', 'one', 'reference']
order = 'left-right' # 可选值: ['left-right', 'right-left', 'top-bottom', 'bottom-top', 'small-large', 'large-small', 'best-worst', 'worst-best'][frame_processor]
# 帧处理器设置
blend = 0.8 # 范围: 0.0-1.0,融合强度
quality = 80 # 范围: 0-100,输出质量[temp]
# 临时文件设置
format = 'jpg' # 可选值: ['jpg', 'png']
folder = 'temp' # 临时文件夹路径
配置文件说明:
-
general 部分:
- execution_providers: 设置运行设备,推荐使用 cuda
- execution_thread_count: 处理线程数,根据CPU核心数设置
- execution_queue_count: 任务队列数,影响并行处理能力
-
memory 部分:
- video_memory_strategy: 显存管理策略
- strict: 严格模式,确保不会超出显存
- moderate: 中等模式,允许适度使用
- tolerant: 宽松模式,允许更多显存使用
- system_memory_limit: 系统内存限制,0表示不限制
- video_memory_strategy: 显存管理策略
-
face_detector 部分:
- model: 人脸检测模型选择
- size: 检测尺寸,越大越准确但更慢
- score: 检测置信度,越高要求越严格
-
face_selector 部分:
- mode: 人脸选择模式
- order: 人脸处理顺序
-
frame_processor 部分:
- blend: 融合强度,影响结果自然度
- quality: 输出质量,影响文件大小
-
temp 部分:
- format: 临时文件格式
- folder: 临时文件存储位置
4.5 启动项目
- 启动 UI 界面:
python facefusion.py run
如果遇到错误:
Error launching UI: expected str, bytes or os.PathLike object, not NoneType
[FACEFUSION.CORE] CURL is not installed
解决方法:
- 安装 CURL:
# 在 conda 环境中安装 curl
conda install curl# 或使用 pip 安装 pycurl
pip install pycurl
-
修复 UI 启动错误:
a. 确保已安装 gradio:pip install --upgrade gradio gradio_rangeslider
b. 检查项目依赖:
# 重新运行安装脚本 python install.py# 或手动安装核心依赖 pip install -r requirements.txt
c. 清理临时文件:
# 删除临时文件夹 rm -rf temp/ mkdir temp
-
验证安装:
# 检查 curl 是否可用
curl --version# 检查 Python 依赖
pip list | findstr curl
pip list | findstr gradio
- 或使用命令行模式:
# 处理单个文件
python facefusion.py run -s <源图片> -t <目标图片/视频> -o <输出路径># 批量处理
python facefusion.py batch-run -s <源目录> -t <目标目录> -o <输出目录>
4.6 注意事项:
-
项目目录权限:
- 确保有写入权限
- 路径不要包含中文和特殊字符
-
模型文件:
- 确保模型文件完整下载
- 检查文件 hash 值是否正确
-
运行环境:
- 确保在正确的 conda 环境中
- 确保所有依赖都已正确安装
4.7 常见问题:
-
模型下载失败:
- 检查网络连接
- 尝试手动下载
- 使用代理或镜像
-
依赖安装错误:
- 检查 Python 版本
- 检查 pip 源配置
- 查看错误日志
-
启动失败:
- 检查 CUDA 环境
- 验证模型文件完整性
- 查看日志输出
三、验证步骤
1. 环境验证
- 验证 FFmpeg 安装
- 验证 CUDA 环境
- 验证 PyTorch 环境
2. 项目验证
- 验证基础功能
- 验证 UI 界面
- 验证模型加载
四、常见问题
1. 环境问题
- CUDA 版本不匹配解决方案
- FFmpeg 未找到解决方案
- 临时文件路径问题
2. 运行问题
- 模型下载失败解决方案
- UI 启动失败解决方案
- CUDA 内存不足解决方案
五、优化建议
1. 性能优化
- GPU 内存管理
- 临时文件管理
- 批处理优化
2. 使用建议
- 推荐参数设置
- 最佳实践流程
- 注意事项
六、功能说明
1. 核心功能
1.1 人脸处理
-
人脸检测:支持多种检测器
- RetinaFace (推荐)
- SCRFD
- YOLOFace
- Many
-
人脸识别与分析
- 人脸特征提取
- 人脸对比和匹配
- 表情分析
- 年龄和性别识别
-
人脸编辑
- 人脸交换
- 表情恢复
- 人脸增强
- 面部遮挡处理
1.2 视频处理
- 视频帧提取和处理
- 音频同步
- 多种输出格式支持:
- 视频编码器:
- libx264/libx265 (CPU)
- h264_nvenc/hevc_nvenc (NVIDIA GPU)
- h264_amf/hevc_amf (AMD GPU)
- h264_qsv/hevc_qsv (Intel GPU)
- 视频编码器:
1.3 批处理功能
- 批量图片处理
- 批量视频处理
- 任务队列管理
2. 使用模式
2.1 UI 界面模式
python facefusion.py run
- 图形界面操作
- 实时预览
- 参数可视化调整
2.2 命令行模式
# 单文件处理
python facefusion.py run -s <源图片> -t <目标图片/视频> -o <输出路径># 批量处理
python facefusion.py batch-run -s <源目录> -t <目标目录> -o <输出目录>
3. 可配置选项
3.1 人脸检测配置
[face_detector]
model = 'retinaface' # 检测模型选择
size = '640x640' # 检测尺寸
score = 0.5 # 置信度阈值
3.2 人脸选择配置
[face_selector]
mode = 'reference' # 选择模式
order = 'left-right' # 处理顺序
3.3 处理器配置
[frame_processor]
blend = 0.8 # 融合强度
quality = 80 # 输出质量
4. 高级功能
4.1 性能优化
- 多线程处理
- GPU 加速
- 内存管理
- 临时文件优化
4.2 质量控制
- 面部特征保持
- 表情同步
- 光照适配
- 边缘融合
4.3 安全特性
- 文件完整性校验
- 错误处理和恢复
- 进度保存和恢复
- 日志记录
相关文章:
FaceFusion 从0开始本地部署,RTX4060
FaceFusion 从0开始本地部署指南 一、环境准备 1. 基础工具安装 1.1 Git 安装 使用管理员权限打开 PowerShell执行安装命令: winget install -e --id Git.Git验证安装: git --version1.2 FFmpeg 安装 使用管理员权限打开 PowerShell执行安装命令&…...
Swift Combine 学习(六):自定义 Publisher 和 Subscriber
Swift Combine 学习(一):Combine 初印象Swift Combine 学习(二):发布者 PublisherSwift Combine 学习(三):Subscription和 SubscriberSwift Combine 学习(四&…...
服务器网卡绑定mode和交换机的对应关系
互联网各领域资料分享专区(不定期更新): Sheet 模式类别 网卡绑定mode共有七种(0~6): bond0、bond1、bond2、bond3、bond4、bond5、bond6 mode详解 mode0 ,即:(balance-rr) Round-robin policy(平衡轮循环策略,需要配置交换机静态聚合) mode…...
【动手学轨迹预测】2.4 考虑地图拓扑关系的表征方法
上一节我们介绍了VectorNet提出了矢量化场景表征方法, 大幅提高了预测网络编码性能. 但是VectorNet对地图数据的编码是基于无向无权图的, 并没有考虑到地图的拓扑关系. 显然在预测中, 地图的拓扑关系应该被考虑到. 于是在VectorNet的基础上, LaneGCN提出一种将地图车道作为节点…...
ChatGLM3模型搭建(踩坑记录版)
参考 魔搭社区 https://zhuanlan.zhihu.com/p/720148240 智谱AI通用大模型:本地部署ChatGLM3-6B开源大模型 - 编程库 说明 搭建方式多篇文章结合着看; 模型下载强烈推荐魔塔社区下载ZhipuAI/chatglm3-6b; 官方github指定清华的模型没有…...
基于 Python Django 的花卉商城系统的研究与实现
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
Spring Boot 3 文件下载、多文件下载以及大文件分片下载、文件流处理、批量操作 和 分片技术
在 Spring Boot 3 中,实现文件下载、多文件下载以及大文件分片下载需要结合以下功能:文件流处理、批量操作 和 分片技术。以下是详细实现方案: 1. 单文件下载 基础的单文件下载实现,可以参考以下代码: GetMapping(&…...
什么是事件循环(Event Loop)?请谈谈它在 JavaScript 中的作用?
事件循环(Event Loop)是什么? 事件循环(Event Loop)是JavaScript运行时环境(如浏览器或Node.js)中的一个核心机制,用于处理异步操作和事件。 它负责协调代码的执行、事件的处理、以…...
Lua : Coroutine(协程)
Lua 协程(coroutines)是一种强大的控制结构,允许函数在执行过程中暂停并在稍后恢复。与线程不同,协程是非抢占式的,这意味着它们不会被操作系统调度,而是由程序显式地切换。协程在 Lua 中非常有用ÿ…...
【2024华为OD-E卷-200分-跳格子2】(题目+思路+JavaC++Python解析)
题目描述 在一个二维平面上,有一个 n x m 的网格,每个格子有一个非负整数。你从左上角 (0, 0) 开始,每次只能向右或向下移动,目标是到达右下角 (n-1, m-1)。 在移动过程中,你需要记录经过的格子中,最大数…...
【仓颉语言基础】语言概念、环境配置与语法解析
华为仓颉语言是一门专为分布式系统设计的现代编程语言,以简洁的语法和强大的分布式能力为核心,提供高效的资源管理和任务调度方案。本篇文章将带您从概念入手,逐步掌握环境配置与语法基础,为分布式开发奠定坚实基础。 文章目录 一…...
LeetCode - 初级算法 数组(删除排序数组中的重复项)
免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…...
SpringMVC进阶(自定义拦截器以及异常处理)
文章目录 1.自定义拦截器 1.基本介绍 1.说明2.自定义拦截器的三个方法3.流程图 2.快速入门 1.Myinterceptor01.java2.FurnHandler.java3.springDispatcherServlet-servlet.xml配置拦截器4.单元测试 3.拦截特定路径 1.拦截指定路径2.通配符配置路径 4.细节说明5.多个拦截器 1.执…...
2 秒杀系统架构
第一步 思考面临的问题和业务场景 秒杀系统面临的问题: 短时间内并发非常高,如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。 第二步 思考目前的处境和解决方案 因为秒杀系统属于短时间内的高并发问题,我们不可能使用那么…...
C++如何遍历数组vector
在C中,vector是一个可变数组。那么怎么遍历它呢?我们以for循环为例(while循环,大家自己脑补)。 方法一: 基于范围的for循环,这是C11新引入的。 std::vector<int> v {1, 2, 3, 4, 5, 6…...
ubuntu非root用户操作root权限问题-virbox挂在共享文件夹
首先讲一下,virtuallbox 挂在文件夹,操作的时候总是需要root权限,比较费劲。 这一操作其实也正对着我们在Ubuntu上的操作。 前段时间我想在ubuntu正常用户下去操作i2c,也出现了类似的问题。 后来把正常的操作加到组里面也解决了类…...
大模型推理:vllm多机多卡分布式本地部署
文章目录 1、vLLM分布式部署 docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献 单台机器GPU资源不足以执行推理任务时,一个方法是模型蒸馏量化,结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理,资源不…...
WFP Listbox绑定数据后,数据变化的刷新
Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型,可以通知 W…...
AI + 爬虫:智能化数据采集的未来
随着人工智能(AI)技术的不断进步,传统的网络爬虫正经历一场前所未有的变革。从规则驱动到智能化演变,AI 的引入不仅提高了爬虫的效率和适应性,更为大规模数据采集提供了全新思路。本文将深入探讨 AI 与爬虫的结合&…...
人工智能知识分享第五天-正则化.损失函数案例
正则化 欠拟合与过拟合 过拟合:一个假设 在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据 (体现在准确率下降),此时认为这个假设出现了过拟合的现象。(模型过于复杂) 欠拟合:一个假设 在训…...
WebRTC的线程事件处理
1. 不同平台下处理事件的API: Linux系统下,处理事件的API是epoll或者select;Windows系统下,处理事件的API是WSAEventSelect,完全端口;Mac系统下,kqueue 2. WebRTC下的事件处理类: …...
C++软件设计模式之迭代器模式
迭代器模式是一种行为设计模式,它允许你顺序访问一个聚合对象的元素,而不暴露其底层表示。在C软件设计中,迭代器模式的主要目的是将数据的遍历行为与数据结构本身分离,使得数据结构的修改不会影响到遍历代码。 目的和意图 解耦遍…...
git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)
git reset --hard 是一个强大的命令,它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态,所有未提交的更改都会被永久丢弃。因此,使用这个命令时需要非常小心。 基本用法 重置到当前提交(丢弃所有未提交的更…...
三分钟在你的react项目中引入tailwindcss
前言:在vite搭建的react项目中引入并使用tailwindcss 一、初始化react项目 1、创建项目 在文件夹下右键打开终端并输入命令使用vite创建项目 pnpm create vite react-tailwind选择reactjavascript,并输入命令安装依赖并启动 2、安装tailwind pnpm …...
Android Studio学习笔记
01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器...
19712 数字接龙
/*我觉得重要的理解点:1.四维数组白表示一个点从另一个点沿对角线的方式进行移动,如果这个元素的值为真则表示这样的移动存在。 2.按照0->k-1的顺序移动。这个要求的实现方法也值得学习 3.count和index的含义: index表示索引,表…...
【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 完整代码和训练好的模型权重文件下载链接见本文底…...
Linux-mac地址
mac地址 由6位16进制数组成。最高字节的最低位,0表示单播地址,1表示多播地址。最高字节的第二位,0表示全局地址,1表示本地地址。 单播地址:单播MAC地址用于一对一的通信模式,即从单一的源端发送到单一的目…...
旷视科技Java面试题及参考答案
讲一下进程间的通讯方式(如管道、消息队列、共享内存、Socket 等),各有什么特点? 管道(Pipe) 管道是最早出现的进程间通信方式之一,主要用于具有亲缘关系(父子进程)的进程之间通信。 特点: 半双工通信,数据只能单向流动。例如,在一个简单的父子进程通信场景中,父进…...
【无线传感网】WSN数据管理技术
文章目录 WSN数据管理的基本概念以数据为中心的WSN数据库与分布式数据库相比具有的特殊性WSN数据管理技术的研究热点 WSN数据管理的关键技术无线传感器网络数据存储结构网外集中式存储方案网内分层存储方案网内本地存储方案以数据为中心的网内存储方案 数据查询处理技术查询类型…...
硬件基础知识笔记(2)——二级管、三极管、MOS管
Part 2 二级管、三极管、MOS管 1、二级管1.1肖特基二极管和硅二极管选型比较1.2到底是什么决定了二极管的最高工作频率?1.3二极管结电容和反向恢复时间都是怎么来的 1、二级管 1.1肖特基二极管和硅二极管选型比较 肖特基二极管的优势主要在速度和压降,对…...
记录uniapp组件swiper自适应高度
在uniapp组件swiper不能自适应高度 思路: 根据传的图片,进行图片分析宽高, 根据屏幕尺寸,进行换算对应的宽高比。 最后获得图片尺寸,进行赋值。 <swiper class="swiper" :style="{ height: `${swiperheight}` + px }" @change="onSwiperC…...
Presto-简单了解-230403
presto是什么了解一下: 秒级查询引擎(不做存储),GB-PB级不依赖于yarn,有自己的资源管理和执行计划支持多种数据源:hive、redis、kafka presto架构 presto优缺点 presto优点 内存到内存的传输࿰…...
Windows Knowledge
1 GRUB简介 1.1 MBR和PBR MBR分为GRUB.MBR和DOS.MBR。 由于硬盘上扇区从偏移0到偏移62属于同一个磁道0,虽然DOS.MBR仅占用一个扇区,但是需要将DOS.MBR后面的偏移1到偏移62保留,所以磁盘上第一个分区的第一个扇区是从偏移63开始的。fbinst软件…...
【Rust自学】9.1. 不可恢复的错误以及panic!
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 9.1.1. Rust错误处理概述 Rust拥有极高的可靠性,这也延伸到了错误处理的领域。比如说在大部分情况下,Rust会迫使你…...
UE5 Debug的一些心得
1、BUG粗略可分为两类: 一种是显性的,编译直接就通不过,必须马上解决。 第二种是隐性的,新功能完成后,编译成功顺利运行,洋洋自得,而问题隐藏在幕后,测试之后才逐渐发现有问题&…...
Docker Compose 构建 EMQX 集群 实现mqqt 和websocket
EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …...
通过Xshell远程连接wsl2
目录 一、WSL网络原理 二、 下载XShell 三、Ubuntu里配置ssh 1.查看是否已经安装SSH 2.安装SSH 3.修改SSH配置 4.重启ssh 5.查看ip 四、在Xshell中链接电脑 五、设置端口转发 1.设置主机端口映射到wsl2的端口 六、防火墙设置开放8989端口 方式一(推荐): 方式二:…...
产品原型设计
🤣🤣目录🤣🤣 一、Axure原型设计(Axure RP 9 )1.1 软件下载安装1.2 产品原型展示1.3 产品原型下载1.4 视频课程推荐 二、磨刀原型设计2.1 软件下载安装2.2 产品原型展示2.3 产品原型下载2.4 视频课程推荐 什…...
【二】arcgis JavaScript api 实现加载不同坐标系的底图和三维服务
提示:如果是天地图底图参考这篇文章 【一】arcgis JavaScript api 实现加载不同坐标系的底图和三维服务_arcgis js api 调用三维地图服务-CSDN博客 需求: 前端开发实现底图(wkid:3857,web墨卡托)&#x…...
使用JMeter对Linux生产服务器进行压力测试
安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言(例如:Chinese&am…...
mapper文件的解释
<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.ruoyi.system.mapper.Jianai…...
利用Claude3.5点评学习LightRAG源码
原始代码为:lightrag. 以下为两次提问记录:↓↓ 1. 请从专业程序员的角度点评这段代码↓ 我来从几个方面分析这段代码: 优点 👍 代码结构清晰 使用了 dataclass 来管理配置清晰的模块化设计,将不同功能分离到不同的存储类中使用了依赖注入…...
linux查看硬件信息
1 CPU # 查看 CPU 详细信息 # 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 cat /proc/cpuinfo# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个…...
基于单片机中药存放环境监测系统的实现
基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用,中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素,若不加以控制,将会导致中药材失效或变质。因此,设计一个基于单片机的…...
从零开始开发纯血鸿蒙应用之UI封装
从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前,为了大家能够从本篇博文中,汲…...
0101java面经
1.Java 中有哪些垃圾回收算法? 标记 - 清除算法(Mark - Sweep) 基本原理:标记 - 清除算法是最基础的垃圾回收算法之一。它分为两个阶段,首先是标记阶段,从根对象(如栈帧中的局部变量、静态变量等引用的对…...
逐行讲解大模型流式输出 streamer 源码
目录 简介TextStreamer 基础流式输出TextIterateStreamer 迭代器流式输出本地代码模型加载并前端展示streamlit 输出显示gradio 输出显示 vllm 部署模型并前端展示streamlit 输出显示gradio 输出显示 备注 简介 本文详细讲解了大模型流式输出的源码实现,包括TextSt…...
springboot533图书管理系统(论文+源码)_kaic
摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,图书信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…...
Dell服务器升级ubuntu 22.04失败解决
ubuntu系统原版本20.04,服务器dell T40. 执行apt update后,再执行apt upgrade。 apt update执行成功,但apt upgrade执行中断,提示如下: Checking package manager Reading package lists... Done Building dependen…...