«невозможно открыть камеру по индексу», используя cv.videocapture(0)

Я получил:

[ ПРЕДУПРЕЖДЕНИЕ: [email protected]] global /tmp/pip-wheel-5v2wouk5/opencv-contrib-python_f04c010cf0414c5a81144576b45aa287/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can' t открыть камеру по индексу

при развертывании контейнера Docker на Raspberry Pi 4B (Debian). Вторая строка — это источник предупреждения:

def __init__(self, path, queueSize=3):
    self.stream = cv2.VideoCapture(path) #<--- here the warning pops up. path == 0 here.
    print("path: ", path)
    print("self.stream of cv2.VideoCapture(path) ", self.stream)

    self.stopped = False
    self.Q = Queue(maxsize=queueSize)

Контейнер Docker развертывается на устройстве путем его первой сборки в Visual Studio, а затем его отправки в реестр контейнеров Azure следующим образом:

docker build --rm -f "c:"my_path"\arm32v7.Dockerfile" -t "my_crname".azurecr.io/cameracapture:0.2.11-arm32v7 "c:... ; if ($?) { docker push "my_crname".azurecr.io/cameracapture:0.2.11-arm32v7 } if ($?) { docker build --rm -f "c:"my_path"\arm32v7.Dockerfile" -t "my_crname".azurecr.io/ imageclassifierservice:0.2.17-arm32v7 "c:"my_path"" } if ($?) { docker push "my_crname".azurecr.io/imageclassifierservice:0.2.17-arm32v7 }

после этого он «развертывается на одном устройстве» в Visual Studio через файл конфигурации (deployment.json).

У Docker есть разрешения на доступ к встроенной камере модуля камеры 3, установленной в /dev/video0:

sudo nano /etc/udev/rules.d/99-camera.rules
SUBSYSTEM= = "vchiq",MODE = "0666"

Я попробовал изменить 0 на -1 и 1 в cv2.VideoCapture(path). Я снова подключил камеру, перезагрузился и обновил Raspberry Pi. Я попробовал включить/отключить устаревшую камеру с помощью sudo raspi-config. sudo ls/dev grep | video показывает video0.

Как решить эту проблему?

Вы не показываете, как вы запустили докер.

Mark Setchell 16.09.2023 22:15

Спасибо, что дал мне знать. Я обновил свой вопрос соответственно.

Jacob Vermeule 18.09.2023 08:20

@JacobVermeule - это приложение/код, работающий локально с преобразованием в докер?

Sampath 19.09.2023 08:28

@Sampath спасибо за ответ! Мне удалось заставить его работать, изменив код на cap = cv2.VideoCapture(index, cv2.CAP_V4L). Я уже видел это решение на stackoverflow.com/questions/66440070/…, но после исследования этой функции я подумал, что это только работало для устройств на базе Windows, но, видимо, работает и для устройств на базе Linux. В любом случае спасибо за помощь.

Jacob Vermeule 19.09.2023 08:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось заставить его работать, изменив код на

cap = cv2.VideoCapture(индекс, cv2.CAP_V4L)

Я видел это решение уже по адресу:

Камера Raspberry Pi и OpenCV: невозможно открыть камеру по индексу

но после изучения этой функции я подумал, что это работает только для устройств на базе Windows, но, видимо, это работает и для устройств на базе Linux.

Другие вопросы по теме