Skip to content

PPOCRLabel Docker VNC解决方案(已实现) #223

@CHR1122

Description

@CHR1122

PPOCRLabel Docker VNC解决方案

硬件

Nvidia显卡

系统及软件

Ubuntu20.04 (其他版本应该也可以)
NVIDIA显卡驱动:宿主机执行 nvidia-smi,右上角支持的最高CUDA版本要大于11.8
Docker内需能正常使用NVIDIA显卡,即执行 nvidia-smi命令,可以正常输出

基础镜像

gezp/ubuntu-desktop:22.04-cu11.8.0

参考:https://github.com/gezp/docker-ubuntu-desktop

容器启动命令

参考链接:gezp/docker-ubuntu-desktop#32 (comment)

docker run -d --restart=on-failure --name LabelWorkspace --gpus all --shm-size=1024m -e USER=ubuntu -e PASSWORD=ubuntu --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -e GID=$(id -g) -e UID=$(id -u) -e REMOTE_DESKTOP=kasmvnc -p 10022:22 -p 14000:4000 -p 15000:5000 -v /label_workspace:/mnt gezp/ubuntu-desktop:22.04-cu11.8.0

注:--cap-add=SYS_PTRACE --security-opt seccomp=unconfined 如果宿主机ubuntu版本低于容器ubuntu版本需添加此参数,不加此参数进入VNC会黑屏;且使用 -v参数挂载时,需使用容器已存在的目录,如 /mnt,不能是 /home/ubuntu/my_data路径

进入容器VNC桌面

内网内的电脑,使用浏览器登录 IP加端口号,如 10.0.32.88:14000,本机直接浏览器登录 127.0.0.1:14000即可,输入用户名(ubuntu)、密码(ubuntu
**注:**推荐谷歌浏览器,主要是谷歌浏览器可以允许VNC内外剪切板共通

后续步骤皆为容器VNC桌面内操作

关于显卡的前置操作

此步骤视情况选择是否进行,如果打开命令行,执行 nvidia-smi,提示错误,则执行以下操作
参考链接:https://cloud.tencent.com/developer/ask/sof/107471663

查看宿主机显卡设备所在的组

ls -l /dev/nvidia*

输出:

crw-rw---- 1 root vglusers 195,   0 12月 25 08:06 /dev/nvidia0
crw-rw---- 1 root vglusers 195, 255 12月 25 08:06 /dev/nvidiactl
crw-rw---- 1 root vglusers 195, 254 12月 25 08:06 /dev/nvidia-modeset
crw-rw-rw- 1 root root     508,   0 12月 25 08:06 /dev/nvidia-uvm
crw-rw-rw- 1 root root     508,   1 12月 25 08:06 /dev/nvidia-uvm-tools

可以看到是属于root组和vglusers组,然后查看容器内显卡所在的组

ls -l /dev/nvidia*

输出:

crw-rw---- 1 root 1002 195,   0 Dec 25 00:06 /dev/nvidia0
crw-rw---- 1 root 1002 195, 255 Dec 25 00:06 /dev/nvidiactl
crw-rw---- 1 root 1002 195, 254 Dec 25 00:06 /dev/nvidia-modeset
crw-rw-rw- 1 root root 508,   0 Dec 25 00:06 /dev/nvidia-uvm

与宿主机的输出一一对应,可以发现,vglusers就是容器内id为1002的组,但是执行

getent group | grep 1002 or getent group | grep vglusers

可以发现,容器内并没有vglusers这个组

那我们就自己手动创建vglusers组:

sudo groupadd -g 1002 vglusers

然后将当前用户加入到该组内:

sudo usermod -aG vglusers $USER

再更新:

newgrp vglusers

现在以非普通非root用户执行 nvidia-smi就可以正常输出了

同时查看

cat /etc/group | grep vglusers

也可以发现当前用户在vglusers组内,容器内执行 ls -l /dev/nvidia*也与宿主机的输出一致

安装PPOCRLabel

安装Miniconda

mkdir ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
source ~/miniconda3/bin/activate
conda init --all

conda换源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
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/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --show channels

创建ppocrlabel环境

conda create -n ppocrlabel python=3.9

激活ppocrlabel环境

conda activate ppocrlabel

安装paddlepaddle-gpu

python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/

安装paddleocr

pip install paddleocr==3.2.0 -i https://pypi.doubanio.com/simple/

安装PyQt5

pip install PyQt5 -i https://pypi.doubanio.com/simple/

源码安装ppocr

git clone https://github.com/PFCCLab/PPOCRLabel.git

后续操作需要在PPOCRLabel文件夹内执行

cd PPOCRLabel

打开 pyproject.toml,在 [project] 下删除以下两行后保存并关闭:
参考链接:#188 (comment)

"pyqt5"
"paddleocr>=3.0.2"

安装 PPOCRLabel 依赖

pip install -e .  -i https://pypi.doubanio.com/simple/

安装paddle[ocr]模块

pip install einops -i https://pypi.doubanio.com/simple/
pip install paddlex[ocr]==3.2.1 -i https://pypi.doubanio.com/simple/

重新安装OpenCV

pip uninstall opencv-contrib-python-headless opencv-python-headless opencv-contrib-python opencv-python
pip install opencv-python-headless==4.10.0.84 opencv-contrib-python-headless==4.10.0.84 -i https://pypi.doubanio.com/simple/

修改PaddleX中对OpenCV包的检查:

参考链接:#188 (comment)
PaddleX依赖的是 opencv-python,非 opencv-python-headless
编辑 /home/ubuntu/miniconda3/envs/ppocrlabel/lib/python3.9/site-packages/paddlex/utils/deps.py
is_dep_available的头部增加:

def is_dep_available(dep, /, check_version=None):
    # Currently for several special deps we check if the import packages exist.
    if "opencv" in dep:   # <------------增加该判断
        return True           # 
    ...

指定Qt路径

export QT_QPA_PLATFORM_PLUGIN_PATH=/home/ubuntu/miniconda3/envs/ppocrlabel/lib/python3.9/site-packages/PyQt5/Qt5/plugins/platforms

安装Qt相关依赖

sudo apt-get update
sudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms0-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev
sudo apt-get install libgl1-mesa-glx libgtk2.0-0
sudo apt install --reinstall qtbase5-dev qtdeclarative5-dev qtmultimedia5-dev

启动PPOCRLabel

python PPOCRLabel.py

最终的Python包版本列表

Package                        Version                         Editable project location
------------------------------ ------------------------------- -------------------------
aistudio-sdk                   0.3.8
annotated-types                0.7.0
anyio                          4.10.0
bce-python-sdk                 0.9.46
cachetools                     6.2.1
certifi                        2025.8.3
chardet                        5.2.0
charset-normalizer             3.4.4
click                          8.1.8
colorlog                       6.10.1
cssselect                      1.3.0
cssutils                       2.11.1
einops                         0.8.1
et_xmlfile                     2.0.0
exceptiongroup                 1.3.0
filelock                       3.19.1
fsspec                         2025.9.0
ftfy                           6.3.1
future                         1.0.0
h11                            0.16.0
hf-xet                         1.1.10
httpcore                       1.0.9
httpx                          0.28.1
huggingface-hub                0.35.3
idna                           3.10
imagesize                      1.4.1
Jinja2                         3.1.6
joblib                         1.5.2
lxml                           6.0.2
MarkupSafe                     3.0.3
modelscope                     1.31.0
more-itertools                 10.8.0
networkx                       3.2.1
numpy                          2.0.2
nvidia-cublas-cu11             11.11.3.6
nvidia-cuda-cupti-cu11         11.8.87
nvidia-cuda-nvrtc-cu11         11.8.89
nvidia-cuda-runtime-cu11       11.8.89
nvidia-cudnn-cu11              8.9.6.50
nvidia-cufft-cu11              10.9.0.58
nvidia-curand-cu11             10.3.0.86
nvidia-cusolver-cu11           11.4.1.48
nvidia-cusparse-cu11           11.7.5.86
nvidia-nccl-cu11               2.19.3
nvidia-nvtx-cu11               11.8.86
opencv-contrib-python-headless 4.10.0.84
opencv-python-headless         4.10.0.84
openpyxl                       3.1.5
opt-einsum                     3.3.0
packaging                      25.0
paddleocr                      3.2.0
paddlepaddle-gpu               3.2.0
paddlex                        3.2.1
pandas                         2.3.3
pillow                         11.3.0
pip                            25.2
PPOCRLabel                     3.1.5.dev1+g04928bf01.d20251023 /home/ubuntu/PPOCRLabel
premailer                      3.10.0
prettytable                    3.16.0
protobuf                       6.32.0
psutil                         7.1.1
py-cpuinfo                     9.0.0
pyclipper                      1.3.0.post6
pycryptodome                   3.23.0
pydantic                       2.12.3
pydantic_core                  2.41.4
pypdfium2                      4.30.0
PyQt5                          5.15.11
PyQt5-Qt5                      5.15.17
PyQt5_sip                      12.17.1
python-dateutil                2.9.0.post0
pytz                           2025.2
PyYAML                         6.0.2
regex                          2025.10.23
requests                       2.32.5
ruamel.yaml                    0.18.16
ruamel.yaml.clib               0.2.14
safetensors                    0.6.2
scikit-learn                   1.6.1
scipy                          1.13.1
setuptools                     80.9.0
shapely                        2.0.7
six                            1.17.0
sniffio                        1.3.1
threadpoolctl                  3.6.0
tiktoken                       0.12.0
tokenizers                     0.22.1
tqdm                           4.67.1
typing_extensions              4.15.0
typing-inspection              0.4.2
tzdata                         2025.2
ujson                          5.11.0
urllib3                        2.5.0
wcwidth                        0.2.14
wheel                          0.45.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions