Last active 5 months ago

20260420_132953.jpg Raw
20260420_132953.jpg
20260420_133006.jpg Raw
20260420_133006.jpg
README.md Raw

info.md Raw

Это не протестированный образ

Вот готовый Dockerfile. Поскольку официальная поддержка CUDA в пакетах opencv-python и ffmpeg через pip/dnf отсутствует, библиотеки собираются из исходников с флагами аппаратного ускорения NVIDIA.

FROM registry.red-soft.ru/ubi8/python-311:latest

# Переключаемся на root для установки системных пакетов
USER root

# Устанавливаем dnf-plugins-core для управления репозиториями
RUN dnf install -y dnf-plugins-core

# Включаем репозиторий Codeready Builder (содержит dev-пакеты в UBI)
RUN dnf config-manager --set-enabled ubi-8-codeready-builder

# Установка зависимостей сборки, инструментов и запрошенных системных библиотек
# Примечание: названия пакетов адаптированы под RHEL 8 / UBI 8:
# libusb-1.0-0 -> libusb1
# libglib2.0-0 -> glib2
# libgl1-mesa-glx -> mesa-libGL
# libgomp1 -> libgomp
RUN dnf install -y \
    gcc gcc-c++ make cmake git pkgconfig \
    python3.11-devel \
    libusb1 glib2 mesa-libGL libgomp net-tools \
    nasm yasm wget curl \
    && dnf clean all

# Добавляем официальный репозиторий NVIDIA CUDA и устанавливаем CUDA Toolkit (12.4)
RUN dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8-repo-latest-1.x86_64.rpm \
    && dnf install -y cuda-toolkit-12-4 \
    && dnf clean all

ENV PATH=/usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

# Установка Python-библиотеки harvesters
RUN pip install --no-cache-dir harvesters

# ==========================================================
# Сборка FFmpeg с поддержкой NVIDIA (cuvid, nvenc, nvdec)
# ==========================================================
RUN git clone --depth 1 --branch n7.0 https://github.com/FFmpeg/FFmpeg.git /tmp/ffmpeg \
    && cd /tmp/ffmpeg \
    && ./configure \
        --prefix=/usr/local \
        --enable-cuda-nvcc \
        --enable-cuvid \
        --enable-nvenc \
        --enable-nvdec \
        --enable-gpl \
        --enable-nonfree \
        --enable-shared \
        --extra-cflags="-I/usr/local/cuda/include" \
        --extra-ldflags="-L/usr/local/cuda/lib64" \
    && make -j$(nproc) \
    && make install \
    && ldconfig \
    && rm -rf /tmp/ffmpeg

# ==========================================================
# Сборка OpenCV с поддержкой CUDA
# ==========================================================
RUN git clone --depth 1 --branch 4.9.0 https://github.com/opencv/opencv.git /tmp/opencv \
    && git clone --depth 1 --branch 4.9.0 https://github.com/opencv/opencv_contrib.git /tmp/opencv_contrib \
    && mkdir -p /tmp/opencv/build && cd /tmp/opencv/build \
    && cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D PYTHON3_EXECUTABLE=/usr/bin/python3.11 \
        -D WITH_CUDA=ON \
        -D CUDA_ARCH_BIN=5.2,6.0,6.1,7.0,7.5,8.0,8.6,8.9,9.0 \
        -D ENABLE_FAST_MATH=ON \
        -D CUDA_FAST_MATH=ON \
        -D WITH_CUBLAS=ON \
        -D OPENCV_DNN_CUDA=ON \
        -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv_contrib/modules \
        -D BUILD_opencv_python3=ON \
        -D BUILD_TESTS=OFF \
        -D BUILD_PERF_TESTS=OFF \
        -D BUILD_EXAMPLES=OFF \
        .. \
    && make -j$(nproc) \
    && make install \
    && ldconfig \
    && rm -rf /tmp/opencv /tmp/opencv_contrib

# Очистка инструментов сборки для уменьшения размера образа
RUN dnf remove -y gcc gcc-c++ make cmake nasm yasm wget curl git \
    && dnf clean all \
    && pip cache purge

ENV PYTHONUNBUFFERED=1

# Возврат к стандартному non-root пользователю UBI
USER 1001
WORKDIR /app

CMD ["python3.11", "-c", "import cv2; print(f'OpenCV: {cv2.__version__}'); print('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())"]

🔧 Как собрать и запустить

1. Сборка образа

docker build -t ubi8-python-cv-nvidia .

2. Запуск с доступом к GPU Контейнер необходимо запускать с пробросом NVIDIA GPU, иначе cv2.cuda и ffmpeg не увидят видеокарту:

docker run --gpus all --rm ubi8-python-cv-nvidia

(Если используется старая версия Docker, вместо --gpus all потребуется --device /dev/nvidia0 --device /dev/nvidiactl --device /dev/nvidia-uvm)

📌 Важные примечания

  1. Время сборки и размер образа: Компиляция OpenCV и FFmpeg из исходников занимает 10–30 минут (зависит от CPU) и значительно увеличивает размер образа. Для продакшена рекомендуется вынести этапы компиляции в отдельный stage или использовать кэширование Docker BuildKit.
  2. Архитектура GPU: В CUDA_ARCH_BIN указаны коды архитектур от GTX 900 до RTX 40 серии. Если у вас конкретная карта (например, только RTX 3090), ускорьте сборку, оставив только 8.6.
  3. Harvesters: Пакет harvesters установлен через pip. Для работы с реальными промышленными камерами (GenICam/USB3Vision) вам потребуется скопировать в контейнер .cti файлы от производителя камеры и установить их в переменную окружения GENICAM_GENTL64_PATH.
  4. cuDNN: OpenCV собрана с OPENCV_DNN_CUDA=ON. Если нужен полный бэкенд cuDNN для нейросетей, его необходимо скачать вручную с сайта NVIDIA Developer и добавить в образ перед сборкой OpenCV (требуется учетная запись).
redos9-python-311.tar Raw
This file can't be rendered. View the full file.
Схема.png Raw
Схема.png
сборка harvesters.md Raw

Установка harvesters из исходного кода выполняется стандартным для современных Python-пакетов способом. Библиотека написана на чистом Python (использует ctypes для взаимодействия с GenTL), поэтому компиляция C/C++ не требуется.

📦 Требования

  • Python 3.7 или выше
  • git
  • pip (желательно актуальной версии)
  • Рекомендуется использовать виртуальное окружение

🛠 Пошаговая инструкция

1. Клонирование репозитория

git clone https://github.com/genicam/harvesters.git
cd harvesters

2. Создание и активация виртуального окружения

Linux / macOS:

python -m venv venv
source venv/bin/activate

Windows (CMD):

python -m venv venv
venv\Scripts\activate.bat

Windows (PowerShell):

python -m venv venv
venv\Scripts\Activate.ps1

3. Обновление инструментов сборки

pip install --upgrade pip setuptools wheel build

4. Установка из исходников

pip install .

💡 Эта команда автоматически разрешит все зависимости (numpy, genicam-обёртки и др.), указанные в pyproject.toml.


🧑‍💻 Режим разработки (editable install)

Если вы планируете вносить правки в код или запускать тесты, установите пакет в режиме разработки:

pip install -e .[dev]

Если группа dev не определена в вашем коммите, используйте просто pip install -e .

Теперь изменения в исходниках будут сразу доступны без повторной установки.


✅ Проверка установки

python -c "import harvesters; print(harvesters.__version__)"

Команда должна вывести номер версии без ошибок.


⚠️ Важные нюансы

  1. GenTL Producer (.cti файлы)
    harvesters — это только клиентская библиотека. Для работы с камерами вам потребуется GenTL Producer от производителя оборудования (Basler, FLIR, Stemmer, OpenCV GenICam и т.д.). Путь к .cti файлу указывается при инициализации:

    from harvesters.core import Harvester
    h = Harvester()
    h.add_file('/path/to/your/producer.cti')
    h.update()
    
  2. Зависимости от ОС
    На некоторых Linux-дистрибутивах может потребоваться установить системные пакеты для numpy или ctypes (обычно python3-dev, libffi-dev), но в 95% случаев pip справляется самостоятельно.

  3. Официальная документация

Если при установке возникнут ошибки (например, конфликт версий numpy или проблемы с разрешениями), пришлите вывод консоли — помогу разобраться.