drholy revised this gist 6 months ago. Go to revision
1 file changed, 1 insertion, 1 deletion
README.md
| @@ -1 +1 @@ | |||
| 1 | - |  | |
| 1 | + |  | |
drholy revised this gist 6 months ago. Go to revision
No changes
drholy revised this gist 6 months ago. Go to revision
1 file changed, 1 insertion
README.md(file created)
| @@ -0,0 +1 @@ | |||
| 1 | + |  | |
drholy revised this gist 6 months ago. Go to revision
1 file changed, 0 insertions, 0 deletions
Схема.png(file created)
Binary file changes are not shown
drholy revised this gist 6 months ago. Go to revision
2 files changed, 0 insertions, 0 deletions
20260420_132953.jpg(file created)
Binary file changes are not shown
20260420_133006.jpg(file created)
Binary file changes are not shown
drholy revised this gist 6 months ago. Go to revision
1 file changed, 2 insertions
info.md
| @@ -1,3 +1,5 @@ | |||
| 1 | + | # Это не протестированный образ | |
| 2 | + | ||
| 1 | 3 | Вот готовый `Dockerfile`. Поскольку официальная поддержка CUDA в пакетах `opencv-python` и `ffmpeg` через `pip`/`dnf` отсутствует, библиотеки собираются из исходников с флагами аппаратного ускорения NVIDIA. | |
| 2 | 4 | ||
| 3 | 5 | ```dockerfile | |
drholy revised this gist 6 months ago. Go to revision
1 file changed, 86 insertions
\321\201\320\261\320\276\321\200\320\272\320\260 harvesters.md" (file created)
| @@ -0,0 +1,86 @@ | |||
| 1 | + | Установка `harvesters` из исходного кода выполняется стандартным для современных Python-пакетов способом. Библиотека написана на чистом Python (использует `ctypes` для взаимодействия с GenTL), поэтому компиляция C/C++ не требуется. | |
| 2 | + | ||
| 3 | + | ### 📦 Требования | |
| 4 | + | - Python **3.7** или выше | |
| 5 | + | - `git` | |
| 6 | + | - `pip` (желательно актуальной версии) | |
| 7 | + | - Рекомендуется использовать виртуальное окружение | |
| 8 | + | ||
| 9 | + | --- | |
| 10 | + | ||
| 11 | + | ### 🛠 Пошаговая инструкция | |
| 12 | + | ||
| 13 | + | #### 1. Клонирование репозитория | |
| 14 | + | ```bash | |
| 15 | + | git clone https://github.com/genicam/harvesters.git | |
| 16 | + | cd harvesters | |
| 17 | + | ``` | |
| 18 | + | ||
| 19 | + | #### 2. Создание и активация виртуального окружения | |
| 20 | + | **Linux / macOS:** | |
| 21 | + | ```bash | |
| 22 | + | python -m venv venv | |
| 23 | + | source venv/bin/activate | |
| 24 | + | ``` | |
| 25 | + | **Windows (CMD):** | |
| 26 | + | ```cmd | |
| 27 | + | python -m venv venv | |
| 28 | + | venv\Scripts\activate.bat | |
| 29 | + | ``` | |
| 30 | + | **Windows (PowerShell):** | |
| 31 | + | ```powershell | |
| 32 | + | python -m venv venv | |
| 33 | + | venv\Scripts\Activate.ps1 | |
| 34 | + | ``` | |
| 35 | + | ||
| 36 | + | #### 3. Обновление инструментов сборки | |
| 37 | + | ```bash | |
| 38 | + | pip install --upgrade pip setuptools wheel build | |
| 39 | + | ``` | |
| 40 | + | ||
| 41 | + | #### 4. Установка из исходников | |
| 42 | + | ```bash | |
| 43 | + | pip install . | |
| 44 | + | ``` | |
| 45 | + | > 💡 Эта команда автоматически разрешит все зависимости (`numpy`, `genicam`-обёртки и др.), указанные в `pyproject.toml`. | |
| 46 | + | ||
| 47 | + | --- | |
| 48 | + | ||
| 49 | + | ### 🧑💻 Режим разработки (editable install) | |
| 50 | + | Если вы планируете вносить правки в код или запускать тесты, установите пакет в режиме разработки: | |
| 51 | + | ```bash | |
| 52 | + | pip install -e .[dev] | |
| 53 | + | ``` | |
| 54 | + | *Если группа `dev` не определена в вашем коммите, используйте просто `pip install -e .`* | |
| 55 | + | ||
| 56 | + | Теперь изменения в исходниках будут сразу доступны без повторной установки. | |
| 57 | + | ||
| 58 | + | --- | |
| 59 | + | ||
| 60 | + | ### ✅ Проверка установки | |
| 61 | + | ```bash | |
| 62 | + | python -c "import harvesters; print(harvesters.__version__)" | |
| 63 | + | ``` | |
| 64 | + | Команда должна вывести номер версии без ошибок. | |
| 65 | + | ||
| 66 | + | --- | |
| 67 | + | ||
| 68 | + | ### ⚠️ Важные нюансы | |
| 69 | + | 1. **GenTL Producer (`.cti` файлы)** | |
| 70 | + | `harvesters` — это только клиентская библиотека. Для работы с камерами вам потребуется **GenTL Producer** от производителя оборудования (Basler, FLIR, Stemmer, OpenCV GenICam и т.д.). Путь к `.cti` файлу указывается при инициализации: | |
| 71 | + | ```python | |
| 72 | + | from harvesters.core import Harvester | |
| 73 | + | h = Harvester() | |
| 74 | + | h.add_file('/path/to/your/producer.cti') | |
| 75 | + | h.update() | |
| 76 | + | ``` | |
| 77 | + | ||
| 78 | + | 2. **Зависимости от ОС** | |
| 79 | + | На некоторых Linux-дистрибутивах может потребоваться установить системные пакеты для `numpy` или `ctypes` (обычно `python3-dev`, `libffi-dev`), но в 95% случаев `pip` справляется самостоятельно. | |
| 80 | + | ||
| 81 | + | 3. **Официальная документация** | |
| 82 | + | - GitHub: https://github.com/genicam/harvesters | |
| 83 | + | - Docs: https://genicam.github.io/harvesters/ | |
| 84 | + | - Примеры использования: папка `samples/` в репозитории | |
| 85 | + | ||
| 86 | + | Если при установке возникнут ошибки (например, конфликт версий `numpy` или проблемы с разрешениями), пришлите вывод консоли — помогу разобраться. | |
drholy revised this gist 6 months ago. Go to revision
1 file changed, 26 insertions, 1 deletion
info.md
| @@ -1,3 +1,6 @@ | |||
| 1 | + | Вот готовый `Dockerfile`. Поскольку официальная поддержка CUDA в пакетах `opencv-python` и `ffmpeg` через `pip`/`dnf` отсутствует, библиотеки собираются из исходников с флагами аппаратного ускорения NVIDIA. | |
| 2 | + | ||
| 3 | + | ```dockerfile | |
| 1 | 4 | FROM registry.red-soft.ru/ubi8/python-311:latest | |
| 2 | 5 | ||
| 3 | 6 | # Переключаемся на root для установки системных пакетов | |
| @@ -92,4 +95,26 @@ ENV PYTHONUNBUFFERED=1 | |||
| 92 | 95 | USER 1001 | |
| 93 | 96 | WORKDIR /app | |
| 94 | 97 | ||
| 95 | - | CMD ["python3.11", "-c", "import cv2; print(f'OpenCV: {cv2.__version__}'); print('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())"] | |
| 98 | + | CMD ["python3.11", "-c", "import cv2; print(f'OpenCV: {cv2.__version__}'); print('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())"] | |
| 99 | + | ``` | |
| 100 | + | ||
| 101 | + | ### 🔧 Как собрать и запустить | |
| 102 | + | ||
| 103 | + | **1. Сборка образа** | |
| 104 | + | ```bash | |
| 105 | + | docker build -t ubi8-python-cv-nvidia . | |
| 106 | + | ``` | |
| 107 | + | ||
| 108 | + | **2. Запуск с доступом к GPU** | |
| 109 | + | Контейнер необходимо запускать с пробросом NVIDIA GPU, иначе `cv2.cuda` и `ffmpeg` не увидят видеокарту: | |
| 110 | + | ```bash | |
| 111 | + | docker run --gpus all --rm ubi8-python-cv-nvidia | |
| 112 | + | ``` | |
| 113 | + | *(Если используется старая версия Docker, вместо `--gpus all` потребуется `--device /dev/nvidia0 --device /dev/nvidiactl --device /dev/nvidia-uvm`)* | |
| 114 | + | ||
| 115 | + | ### 📌 Важные примечания | |
| 116 | + | ||
| 117 | + | 1. **Время сборки и размер образа**: Компиляция OpenCV и FFmpeg из исходников занимает 10–30 минут (зависит от CPU) и значительно увеличивает размер образа. Для продакшена рекомендуется вынести этапы компиляции в отдельный stage или использовать кэширование Docker BuildKit. | |
| 118 | + | 2. **Архитектура GPU**: В `CUDA_ARCH_BIN` указаны коды архитектур от GTX 900 до RTX 40 серии. Если у вас конкретная карта (например, только RTX 3090), ускорьте сборку, оставив только `8.6`. | |
| 119 | + | 3. **Harvesters**: Пакет `harvesters` установлен через `pip`. Для работы с реальными промышленными камерами (GenICam/USB3Vision) вам потребуется скопировать в контейнер `.cti` файлы от производителя камеры и установить их в переменную окружения `GENICAM_GENTL64_PATH`. | |
| 120 | + | 4. **cuDNN**: OpenCV собрана с `OPENCV_DNN_CUDA=ON`. Если нужен полный бэкенд cuDNN для нейросетей, его необходимо скачать вручную с сайта NVIDIA Developer и добавить в образ перед сборкой OpenCV (требуется учетная запись). | |
drholy revised this gist 6 months ago. Go to revision
1 file changed, 95 insertions
info.md(file created)
| @@ -0,0 +1,95 @@ | |||
| 1 | + | FROM registry.red-soft.ru/ubi8/python-311:latest | |
| 2 | + | ||
| 3 | + | # Переключаемся на root для установки системных пакетов | |
| 4 | + | USER root | |
| 5 | + | ||
| 6 | + | # Устанавливаем dnf-plugins-core для управления репозиториями | |
| 7 | + | RUN dnf install -y dnf-plugins-core | |
| 8 | + | ||
| 9 | + | # Включаем репозиторий Codeready Builder (содержит dev-пакеты в UBI) | |
| 10 | + | RUN dnf config-manager --set-enabled ubi-8-codeready-builder | |
| 11 | + | ||
| 12 | + | # Установка зависимостей сборки, инструментов и запрошенных системных библиотек | |
| 13 | + | # Примечание: названия пакетов адаптированы под RHEL 8 / UBI 8: | |
| 14 | + | # libusb-1.0-0 -> libusb1 | |
| 15 | + | # libglib2.0-0 -> glib2 | |
| 16 | + | # libgl1-mesa-glx -> mesa-libGL | |
| 17 | + | # libgomp1 -> libgomp | |
| 18 | + | RUN dnf install -y \ | |
| 19 | + | gcc gcc-c++ make cmake git pkgconfig \ | |
| 20 | + | python3.11-devel \ | |
| 21 | + | libusb1 glib2 mesa-libGL libgomp net-tools \ | |
| 22 | + | nasm yasm wget curl \ | |
| 23 | + | && dnf clean all | |
| 24 | + | ||
| 25 | + | # Добавляем официальный репозиторий NVIDIA CUDA и устанавливаем CUDA Toolkit (12.4) | |
| 26 | + | RUN dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8-repo-latest-1.x86_64.rpm \ | |
| 27 | + | && dnf install -y cuda-toolkit-12-4 \ | |
| 28 | + | && dnf clean all | |
| 29 | + | ||
| 30 | + | ENV PATH=/usr/local/cuda/bin:$PATH | |
| 31 | + | ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH | |
| 32 | + | ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH | |
| 33 | + | ||
| 34 | + | # Установка Python-библиотеки harvesters | |
| 35 | + | RUN pip install --no-cache-dir harvesters | |
| 36 | + | ||
| 37 | + | # ========================================================== | |
| 38 | + | # Сборка FFmpeg с поддержкой NVIDIA (cuvid, nvenc, nvdec) | |
| 39 | + | # ========================================================== | |
| 40 | + | RUN git clone --depth 1 --branch n7.0 https://github.com/FFmpeg/FFmpeg.git /tmp/ffmpeg \ | |
| 41 | + | && cd /tmp/ffmpeg \ | |
| 42 | + | && ./configure \ | |
| 43 | + | --prefix=/usr/local \ | |
| 44 | + | --enable-cuda-nvcc \ | |
| 45 | + | --enable-cuvid \ | |
| 46 | + | --enable-nvenc \ | |
| 47 | + | --enable-nvdec \ | |
| 48 | + | --enable-gpl \ | |
| 49 | + | --enable-nonfree \ | |
| 50 | + | --enable-shared \ | |
| 51 | + | --extra-cflags="-I/usr/local/cuda/include" \ | |
| 52 | + | --extra-ldflags="-L/usr/local/cuda/lib64" \ | |
| 53 | + | && make -j$(nproc) \ | |
| 54 | + | && make install \ | |
| 55 | + | && ldconfig \ | |
| 56 | + | && rm -rf /tmp/ffmpeg | |
| 57 | + | ||
| 58 | + | # ========================================================== | |
| 59 | + | # Сборка OpenCV с поддержкой CUDA | |
| 60 | + | # ========================================================== | |
| 61 | + | RUN git clone --depth 1 --branch 4.9.0 https://github.com/opencv/opencv.git /tmp/opencv \ | |
| 62 | + | && git clone --depth 1 --branch 4.9.0 https://github.com/opencv/opencv_contrib.git /tmp/opencv_contrib \ | |
| 63 | + | && mkdir -p /tmp/opencv/build && cd /tmp/opencv/build \ | |
| 64 | + | && cmake -D CMAKE_BUILD_TYPE=RELEASE \ | |
| 65 | + | -D CMAKE_INSTALL_PREFIX=/usr/local \ | |
| 66 | + | -D PYTHON3_EXECUTABLE=/usr/bin/python3.11 \ | |
| 67 | + | -D WITH_CUDA=ON \ | |
| 68 | + | -D CUDA_ARCH_BIN=5.2,6.0,6.1,7.0,7.5,8.0,8.6,8.9,9.0 \ | |
| 69 | + | -D ENABLE_FAST_MATH=ON \ | |
| 70 | + | -D CUDA_FAST_MATH=ON \ | |
| 71 | + | -D WITH_CUBLAS=ON \ | |
| 72 | + | -D OPENCV_DNN_CUDA=ON \ | |
| 73 | + | -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv_contrib/modules \ | |
| 74 | + | -D BUILD_opencv_python3=ON \ | |
| 75 | + | -D BUILD_TESTS=OFF \ | |
| 76 | + | -D BUILD_PERF_TESTS=OFF \ | |
| 77 | + | -D BUILD_EXAMPLES=OFF \ | |
| 78 | + | .. \ | |
| 79 | + | && make -j$(nproc) \ | |
| 80 | + | && make install \ | |
| 81 | + | && ldconfig \ | |
| 82 | + | && rm -rf /tmp/opencv /tmp/opencv_contrib | |
| 83 | + | ||
| 84 | + | # Очистка инструментов сборки для уменьшения размера образа | |
| 85 | + | RUN dnf remove -y gcc gcc-c++ make cmake nasm yasm wget curl git \ | |
| 86 | + | && dnf clean all \ | |
| 87 | + | && pip cache purge | |
| 88 | + | ||
| 89 | + | ENV PYTHONUNBUFFERED=1 | |
| 90 | + | ||
| 91 | + | # Возврат к стандартному non-root пользователю UBI | |
| 92 | + | USER 1001 | |
| 93 | + | WORKDIR /app | |
| 94 | + | ||
| 95 | + | CMD ["python3.11", "-c", "import cv2; print(f'OpenCV: {cv2.__version__}'); print('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())"] | |
drholy revised this gist 6 months ago. Go to revision
1 file changed, 0 insertions, 0 deletions
No changes