Несколько комментариев здесь ...
Ошибка при попытке запустить OpenCV из моей среды разработки MacOS:
OpenCV: запрещен захватвидео (статус 0), запрос ... OpenCV: камера не удалось правильно инициализировать!Ошибка при открытии видеопотока или файла. Программа завершилась с кодом выхода: 255
Я знаю, что эти слова происходят из библиотеки OpenCV здесь. Сначала я думал, что это проблема OpenCV.Немного больше испытаний, я думаю, что это что-то еще.Как уже отмечалось, проблема безопасности / разрешений MacOS.Но вот беда.
Если я зайду в Mac Apple Icon (Верхний левый угол) -> Системные настройки -> Безопасность и конфиденциальность, я смогу получить много информации.
Проверьте значок камеры.
В моем случае это два приложения, которым требуются дополнительные разрешения для доступа к камере: терминал и виртуальная коробка (не знаю, что происходит с браузером,Facetime?) Замечу, Xcode не попал в этот список.
Когда я нажимаю на Микрофон, я вижу разные приложения в списке, ВКЛЮЧАЯ Xcode.
Как это вообще работает?Я провел много испытаний, в том числе исследовал изменение Info.plist для пакета приложения Xcode (Finder -> Папка приложений -> Xcode -> Rt click, Показать содержимое пакета. Скопируйте Info.plist и сохраните его в другом месте,измените это через XCode, повторно отправьте.) Примечание: не пытайтесь это делать, не сохраняя копию исходного Info.plist.Полный провал.Добавление NSCameraUsageDescription
ключ / значение было полным провалом.Xcode вообще не открывается.Напоминание НЕ теряйте оригинальный Info.plist.
Все это сбивает с толку.Почему Apple позволяет нам получать доступ к камере через терминал, но не в Xcode?Какая там логика?
Я уверен, что хотел бы иметь возможность пошагово выполнять код, чтобы покадрово понимать возможные проблемы проектирования.Это просто не весело.
Итак, пара вещей, которые нужно понять.
Да, вы можете запустить проект OpenCV на MacOS с вашей камерой после успешной компиляции программы в исполняемый файл Unix.Вы должны убедиться, что разрешения для Терминала установлены в разделе «Безопасность и конфиденциальность» для каждой фотографии выше.Очевидно, вы строите исполняемый файл в своем инструменте разработки (в моем случае Xcode), а затем открываете исполняемый файл из папки проектов Build / Debug.Приложение открывается в окне терминала и работает отлично, как отмечает SSteve.
Если вы действительно хотите выполнить отладку видео / камеры, у вас есть возможность предварительно записать видео, а затем открыть это видео в своей среде разработки.В этот момент вы можете использовать отладчик.Как вы, ребята, делаете покадровый анализ?Это единственный известный мне способ, который по крайней мере частично сработает.
(редактировать обновление 22.05.19 ...) Вау.Я только что понял .. вы можете подключить отладчик к работающему (терминальному) процессу.Вы можете полностью выполнять покадровую отладку, используя камеру (до тех пор, пока программа компилируется в функциональный исполняемый файл). Теперь это довольно круто и дает мне 98% функциональности.Для этого запустите исполняемый файл терминала, затем перейдите в Xcode -> Debug -> Attach to Process.Выберите работающее приложение, добавьте точки останова в исходный код и выполните отладку / пошаговое выполнение.Работает хорошо.
Я начинаю свой проект OpenCV с:
int main(int argc, char** argv){
// Parse command line arguments
CommandLineParser parser(argc,argv,keys);
// Create a VideoCapture object & open the input file
VideoCapture cap;
if (parser.has("video")){
cap.open(parser.get<String>("video"));
}
else
cap.open(0);
...
Это обходная работа, но лучше, чем ничего.(Конечно, если бы Apple включила камеру в эмулятор iOS, это могло бы стать еще одним способом решения этой проблемы, вздох.) Очевидно, многое зависит от того, куда вы идете с вашим проектом.В конечном счете, мне нужен мой, чтобы работать на iPad;Подтвердить на MacOS, затем обернуть код в Swift и т.д ...
Для справки, я использую macOS Mojave, 10.14.4, MacBook 2.7GHz i7
PS. Приведенные выше настройки безопасности не отображают Chrome с доступом к камере. Кажется странным Я только что проверил камеру на этом сайте ... в Chrome, и он запрашивает разрешение и работает точно так, как ожидалось. Не ясно, что здесь происходит.
PS2. Я единственный, кто подал сообщение об ошибке по этому вопросу? Ссылка включена для вашего удобства. Благодарю.