Не удается получить доступ к камере с OpenCV на Mac Mojave - PullRequest
0 голосов
/ 31 января 2019

Я попытался запустить какой-то базовый код из OpenCV, который открывает веб-камеру.Мне удалось запустить этот код до того, как я обновил Mac Macjave, но после этого я получаю эту ошибку при сборке и запуске.

`[access] This app has crashed because it attempted to access privacy- 
 sensitive data without a usage description.  The app's Info.plist must 
 contain an NSCameraUsageDescription key with a string value explaining 
 to the user how the app uses this data.`

Я выполнил шаги для других сообщений и создал Info.plist в проекте.(тот же каталог, что и main.cpp), однако он говорит, что имеет проблему с анализом содержимого в Info.plist.

Info.plist:

   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSCameraUsageDescription</key>
    <string>uses camera to see vision targets</string>
</dict>

Как я могу решить эту проблему и прочитать Info.plist?

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Я наконец смог решить эту проблему, следуя цепочке рекомендаций через 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

0 голосов
/ 31 января 2019

Вам не хватает закрывающего тега </plist>.Просто добавьте это как последнюю строку файла, и он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...