Deep-Live-Cam + 米家/萤石云摄像头实现本地实时推流换脸

基座模型

    1. 人脸识别模型:buffalo_l;
    1. 人脸替换模型:inswapper_128_fp16;
    1. 人脸增强模型:GFPGANv1.4

算法介绍

1. 基于inswapperGFOGAN等模型组成的换脸算法方案,以下简称算法,旨在提供一种便捷的、高效的、实时的人脸替换方案。算法具备以下特点:

  • 只需要提供一张目标图片即可捕获人脸特征,进行替换;

  • 可以针对实时视频流进行处理,或针对媒体文件进行后处理;

  • 可以针对人物的嘴部动作进行实时捕获嘴部掩码,并进行实时替换,实现张嘴动作的同步;

  • 使用生成对抗网络对inswapper模型粗略处理过的面部进行增强,以实现细节上的补充

  • 算法具备一定程度上的环境光抗干扰的能力

2. 算法使用多个模型串联的方式来实现功能流程上的自定义,例如:

  • 基于insightfacearcface算法的人脸识别模型:buffalo_l,其中包括人脸的特征检测模型、性别年龄检测模型、2d、3d关键点检测模型等,主要应用于对源图片和目标图片的人脸检测、特征检测、人脸对齐等;

  • 基于insightface库的人脸交换算法模型:inswapper_128_fp16,具备较高的替换精度和时效性;

  • 基于对抗生成网络的人脸增强模型GFOGANv1.4,应用后对inswapper模型粗换的面部进行细节补全

Read More

Pycharm推送gitlab远程仓库

新建Gitlab远程仓库

Pycharm连接仓库

1.文件-设置-版本控制-Git

添加git路径并测试

2.VSC-启用版本控制集成

3.VSC变成Git后,选择管理远程,添加仓库链接

增加本地gitlab服务端口号

远程推送

提交代码

推送代码

【注】提示推送被拒,是由于本地第一次推送和仓库的代码文件不同步,需要先pull远程仓库进行合并

打开git控制台,执行git pull origin main --allow-unrelated-histories强制合并允许不相关历史

重新推送即可

CentOs7基础环境更新

本文针对刚部署的CentOS7服务器,更新基础环境

系统级依赖包

1
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y

显卡

英伟达显卡驱动参考版本:575.57.08

CUDA参考版本:12.9

统一使用安装脚本cuda_12.9.1_575.57.08_linux.run安装驱动和CUDA

查看显卡型号

1
lspci | grep -i nvidia

获取cuda+驱动包(cuda-toolkit)

https://developer.nvidia.com/cuda-toolkit-archive

安装于/usr/local

禁用nouveau驱动

1
sudo gedit /etc/modprobe.d/blacklist.conf
1
2
3
# 添加以下内容:
blacklist nouveau
options nouveau modeset=0
1
sudo update-initramfs -u

验证nouveau已禁用

1
2
reboot
lsmod | grep nouveau # 无输出表示禁用成功

进入文本模式

1
sudo telinit 3

停止显示服务

1
sudo service gdm3 stop

安装

1
sh cuda_12.9.1_575.57.08_linux.run

稍等片刻,同意协议,勾选驱动和cuda,安装。成功后执行nvidia-smi将有输出

升级Make

安装依赖

1
yum install epel-release libffi-devel tcl-devel tk-devel libuuid-devel -y

下载源码包

1
2
wget http://ftp.gnu.org/pub/gnu/make/make-4.4.tar.gz
tar -zxvf make-4.4.tar.gz

编译安装

1
2
3
4
5
cd make-4.4
./configure --prefix=/usr
type make # 可能提示报错,不影响后续操作
make check
make install

版本验证

1
make -v  # 输出应为 GNU Make 4.4

升级GCC14

下载源码包

1
2
wget https://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.gz
tar -zxvf gcc-14.2.0.tar.gz

编译安装

1
2
3
4
cd gcc-14.2.0/
mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --prefix=/usr/local/gcc
make -j $(nproc) # 耗时约30~50分钟,取决于硬件性能

替换旧版本,建立软连接

1
2
3
4
5
6
yum -y remove gcc g++  # 删除系统默认旧版GCC
make install
ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6

版本验证

1
gcc -v  # 输出 GCC 版本 14.2.0

升级 binutils 2.43

安装依赖

1
2
yum install texinfo -y
makeinfo --version # 验证texinfo安装成功

下载源码包

1
2
wget https://mirrors.aliyun.com/gnu/binutils/binutils-2.43.tar.gz
tar -zxf binutils-2.43.tar.gz

编译安装

1
2
3
4
5
6
cd binutils-2.43/
mkdir build && cd build
mkdir /usr/local/binutils
../configure --prefix=/usr/local/binutils
make -j $(nproc)
make install # 执行安装命令

替换系统工具

1
2
3
4
5
6
# 备份旧工具
mv /usr/bin/ld /usr/bin/ld_back
mv /usr/bin/as /usr/bin/as_back
# 建立软链接指向新工具
ln -s /usr/local/binutils/bin/as /usr/bin/as
ln -s /usr/local/binutils/bin/ld /usr/bin/ld

版本验证

1
2
3
ld --version    # 输出 GNU ld (GNU Binutils) 2.43
ar --version # 输出对应版本
nm --version # 输出对应版本

升级glibc 2.40

安装依赖

1
yum install -y bison

下载源码包

1
2
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.40.tar.gz
tar -zxvf glibc-2.40.tar.gz

编译

1
2
3
cd glibc-2.40/
mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

安装

1
2
make  # 必须单线程构建,耗时较长,20—30分钟。
make install

第一次安装过程中会报错,且无法使用系统命令

恢复

1
2
3
4
sln /lib64/libc-2.17.so /lib64/libc.so.6  
sln /lib64/libdl-2.17.so /lib64/libdl.so.2
sln /lib64/libpthread-2.17.so /lib64/libpthread.so.0
sln /lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2
1
2
3
4
LD_PRELOAD=/lib64/libc-2.40.so sln /usr/local/glibc-2.40/build/libc.so.6                 /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.40.so sln /usr/local/glibc-2.40/build/dlfcn/libdl.so.2 /lib64/libdl.so.2
LD_PRELOAD=/lib64/libc-2.40.so sln /usr/local/glibc-2.40/build/nptl/libpthread.so.0 /lib64/libpthread.so.0
LD_PRELOAD=/lib64/libc-2.40.so sln /usr/local/glibc-2.40/build/elf/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2

此过程如果出现缺少依赖,手动建立软连接

重新安装

1
make install

版本验证

1
2
ldd --version  # 输出glibc 2.40版本信息
strings /lib64/libc.so.6 | grep GLIBC # 确认包含GLIBC_2.40

CentOS 更新gcc+glibc环境

由于centos环境较老,基础环境已经难以跟上主流的第三方库,在此对系统基础环境进行升级并主要记录通过centos源码升级gcc、glibc的过程和踩坑。

环境准备

· 系统: CentOS7

· gcc: 12.4

· glibc: 2.34

升级GCC

源码下载

gcc资源合集:https://ftp.gnu.org/gnu/gcc/

找到需要的版本,下载tar.gz文件,此处以gcc-12.4.0为例

1
2
wget http://ftp.gnu.org/gnu/gcc/gcc-12.4.0/gcc-12.4.0.tar.gz
tar -zxvf gcc-12.4.0.tar.gz

源码编译

1
2
3
4
5
cd gcc-12.4.0
mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make -j 8

make过程时间较长,可能出现报错,例如:

  • cc1:all warnings being treated as errors:由于系统内核版本原因造成的错误,未使用的变量警告被视为错误,导致编译失败。

    解决方案:删除build下文件夹,重新执行../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib获得初始文件,全局搜索-Werror并移除、将相关参数设置为no,并打开MakeFile文件写入:

    1
    2
    CFLAGS = -Wall -Wpointer-arith -Wno-unused
    KBUILD_CFLAGS += -w

    重新执行make操作

  • configure: error: C compiler cannot create executables:可能是系统丢失了文件。

    解决方案:到相同服务器拷贝/usr/lib64/libc_nonshared.a文件至/usr/lib64下确实解决了

  • 找不到ld文件:可能源自先前通过devtoolset安装的gcc环境没有删干净,例如在/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9下缺失ld文件,可将/usr/bin下ld文件复制到/opt/rh/devtoolset-9/root/usr/bin

    如果devtoolset-9已经卸载,需要重新安装:

    yum install devtoolset-9-gcc*

    成功后再卸载:

    yum remove devtoolset-9-gcc*

Read More

yolo系模型的tensorrt加速

前言

trt简介摘自Ultralytics。总而言之就是能极大程度的提高模型速度,正文部分主要记录部署流程和排坑日志。

TensorRT是由NVIDIA 开发,专为高速深度学习推理而设计的SDK,该SDK可针对NVIDIA GPU优化深度学习模型,从而实现更快、更高效的操作。将深度学习模型转换为TensorRT格式可以充分发挥NVIDIA GPU的潜力,非常适合目标检测等实时应用。

TensorRT模型具有一系列关键特性:

  • 精度校准:TensorRT支持精度校准,允许针对特定精度要求对模型进行微调,包括对 INT8 和 FP16 等降低精度格式的支持,这可以进一步提高推理速度,同时保持可接受的精度水平。
  • 层融合:TensorRT优化过程包括层融合,即将神经网络的多个层合并为一个操作。这可以减少计算开销,并通过最大限度地减少内存访问和计算来提高推理速度。

  • 动态Tensor 内存管理:TensorRT在推理过程中有效管理tensor内存使用情况,减少内存开销并优化内存分配。这使得GPU的内存使用效率更高。
  • 自动内核调整:TensorRT应用自动内核调整功能,为模型的每一层选择最优化的GPU内核。这种自适应方法可确保模型充分利用 GPU的计算能力。

Read More

间隙树交并比聚类算法

前文简单介绍过间隙·树·排序算法以及其更改过的可视化过程。但是由于算法本身是对纯文本块进行排序,当遇到较为复杂的图像结构时,由于缺少原始图像信息,存在丢失图片类型数据、无法理解表格等问题。

此算法的跟进版目标在于对排序算法的后续操作提供更为精确的版面恢复,故名称沿用自间隙·树·排序算法(项目地址:https://github.com/hiroi-sora/GapTree_Sort_Algorithm),命名间隙·树·交并比(IoU)聚类算法,以下简称GTIoUC。算法的最终目的与传统OCR或版面恢复不同,旨在将OCR结果在版面分析结果中聚合成包含完整语义的段落,为翻译提供服务。

GTIoUC包含的算法:

GapTree提供的文本块排序算法;

基于YOLO的版面分析算法;

OCR box和 YOLO layoutbox之间的交并比聚类算法

GTIoUC解决的问题:


仅仅版面分析的效果不够精确;

版面分析后内容总是存在缺失;

版面分析获得图像结构后往往不再OCR图像中文字;

OCR结果按行返回,无段落结构,上下文语义存在缺失;

GapTreeIoU_Cluster_Algorithm | 间隙·树·交并比聚类算法

GTIoUC算法的特殊之处:

PPStructure等版面分析算法需要根据版面分析结果做N次截取片段OCR,但是传入OCR模型的det_limit_side_len参数总是固定的,导致OCR经常提取不到相应结果,产生空白页。算法模型层面每轮仅做1次完整的全文OCR和1次Layout,解决OCR空白页的同时一定程度上优化了时间复杂度;

算法的版面分析模型由YOLOV11结合DocLayNet数据集训练得到,精度较早期模型具有较大提升,适用于复杂文档,泛化能力高的同时兼顾了多语种识别;

尽管如此,目前任何版面恢复模型仍旧不具备100%捕获文档信息的能力。此时由于算法的OCR部分和Layout部分是相对独立进行的,最终OCR和Layout的结果将进行IoU聚类,IoU过程中先前Layout缺失的信息将被OCR结果补充、得到段落完整语义,极大程度上提高了版面恢复的准确度。

下面将详细介绍GTIoUC的版面恢复流程。

Read More

关键信息提取(KIE)

环境准备

服务器

· OS: CentOS7.9

· GPU: RTX3090 24G*2

· CUDA: 11.7

· CUDNN: 8.9.2

飞桨

· paddlepaddle: paddlepaddle-gpu==2.4.2(cudatoolkit=11.7,建议conda安装)

1
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge


· paddleocr: 2.9.1

· paddlenlp: 2.5.2

项目依赖

requirements.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# paddlepaddle 2.4.2 注:必须
# conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge

shapely
scikit-image
pyclipper
lmdb
tqdm
numpy
rapidfuzz
opencv-python
opencv-contrib-python
cython
Pillow
pyyaml
requests
albumentations==1.4.10
# to be compatible with albumentations
albucore==0.0.13

sentencepiece
yacs
seqeval
pypandoc
attrdict3
python_docx
paddlenlp==2.5.2
注:bugfix

1.ModuleNotFoundError: No module named 'ppocr.***'

前往官方github主页(https://github.com/PaddlePaddle/PaddleOCR)补齐源码到python环境

e.g.conda 虚拟环境下,需要补齐的源码根目录为:/root/anaconda3/envs/py39_kie/lib/python3.9/site-packages/paddleocr/ppocr

2.ModuleNotFoundError: No module named ‘paddle.fluid’

安装较低版本paddle paddlepaddle2.4.2/2.5.0

3.类型错误:

1
2
3
InvalidArgumentError: The type of data we are trying to retrieve does not match the type of data currently contained in the container.
[Hint: Expected dtype() == paddle::experimental::CppTypeToDataType<T>::Type(), but received dtype():10 != paddle::experimental::CppTypeToDataType<T>::Type():9.] (at /paddle/paddle/phi/core/dense_tensor.cc:143)
[operator < less_equal > error]


官方示例bug,需要添加参数项--use_visual_backbone = False

Read More


Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2026 青域 All Rights Reserved.

UV : | PV :