Я наконец смог решить эту проблему, следуя цепочке рекомендаций через Stackoverflow и GitHub.Это была болезненная ошибка, которая сожгла мой день, пытаясь заставить мой код работать снова, хотя он работал нормально до MacOS Mojave.
Решение
Поместите Info.plist
файл с полем NSCameraUsageDescription
, как предложил в каталоге Products / Build вашей цели (щелкните правой кнопкой мыши Product на левой панели в проекте Xcode и нажмите «Показать в Finder»).
- Автоматизируйте этот процесс копирования / вставки
Info.plist
в каталог Build (следуя этому предложению ), добавив его в список Copy Files
в Build Phases
вашего«Target» и изменение «Destination» на «Product Directory» и Subpath на «.»запросите разрешение на доступ к камере, и после получения разрешения двоичный файл будет добавлен в список приложений, которым разрешен доступ к камере, доступных в System Preferences > Privacy > Camera
. - К вашему сведению: чтобы принудительно очистить этот список, введите
tccutil reset Camera
в Terminal
- . Возможно, вам придется запустить цель несколько раз, прежде чем вам будет предложено разрешение/ Доступ к камере.
Проблема
Создание объекта cv::VideoCapture(0)
для доступа к видеопотоку с камеры приводит к следующей ошибке, даже если код был запущеннормально в версии MacOS до Mojave
OpenCV: не авторизован для захвата видео (статус 0), запрос ...
OpenCV: камера не смогла правильно инициализироваться!
Причина
MacOS Mojave усилил защиту конфиденциальности, которая теперь требует, чтобы приложения явно запрашивали и запрашивали разрешение у доступа к камере, как объяснено здесь .
Предложения, которые не работали
Ниже предложений, приведенных в различных Stackoverflow posts , не удалось принудительно заставить встроенный двоичный файл запрашивать разрешение наполучить доступ к камере: - добавив Info.plist
в каталог проекта - установить путь к Info.plist
в Build Settings > Packaging > Info.plist File
или - выбрать его в General > Identity > Choose Info.plist File...
вашей цели
Предложения, которые могли бы помочь
Как указано в opencv
закрытом выпуске GitHub , в libopencv
около апреля 1919 года были внесены некоторые изменения, которые моглитакже возможно облегчило использование доступного Info.plist
в каталоге сборки, чтобы запросить у пользователя разрешение на доступ к камере.Поэтому я также обновил свой opencv
до последней стабильной версии 4.1.0
, используя brew upgrade
.
PS Я использую MacOS Mojave 10.14.5
, Xcode 10.2.1
и OpenCV 4.1.0