栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MacOS中使用sublime运行cv2视频捕获打不开摄像头的解决方案

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MacOS中使用sublime运行cv2视频捕获打不开摄像头的解决方案


tags: MacOS Python Debug 问题

环境:

MacOS12.3.1 Apple silicon

Python3.9.10 opencv 4.5.5

sublime text 4

在我使用下面的代码打开摄像头时候, 通过终端(iTerm2)可以完美调用摄像头, 但是通过sublime就不行

import cv2

cap = cv2.VideoCapture(0)
while(1):
    # get a frame
    ret, frame = cap.read()
    # show a frame
    cv2.imshow("capture", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

通过对macOS的了解, 我的想法是这个问题主要是因为sublime没有摄像头的权限, 于是就无法打开了.

解决

由于系统偏好设置里面并没有选择摄像头权限的那个菜单, 这时候就只能选择另一种方案, 这里参考了一位大佬的文章1, 其实这里主要是通过修改Mac自身的TCC安全数据库来完成的, 但是这样做其实并不好2, 应该先对数据库进行一个备份之后再进行修改比较好(这里可以类比在Windows中修改注册表).

具体方案如下, 先查询需要添加权限的app的包名, 这里用到的命令是:

❯ defaults read /Applications/Sublime Text.app/Contents/Info.plist CFBundleIdentifier

com.sublimetext.4

得到的包名为com.sublimetext.4, 这时候先备份一下数据库, 通过

❯ cd ~/Library/Application Support/com.apple.TCC/

❯ cp TCC.db TCC.db.bak

最后进行修改, 这一步需要替换包名称:(这里的命令使用的是macOS11.X的, 12.X也可以用.)

/usr/bin/sqlite3 ~/Library/Application Support/com.apple.TCC/TCC.db "REPLACE INTO access VALUES('kTCCServiceCamera','com.sublimetext.4',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1608354323);"
举一反三

对于终端, 由于其已经被赋予了权限, 这里当然直接使用就可, 但是对于像vscode和sublime这样的编辑器, 其调用摄像头的时候不会自己调用系统的权限对话框, 但是jetbrains系列产品就会调用系统对话框, 这也说明这两个轻量级IDE还有值的改进的地方…

参考
  1. macOS:给 app 添加摄像头权限_afatgoat的博客-CSDN博客_mac 摄像头权限; ↩︎

  2. VSCode 终端不允许/请求访问媒体设备的权限 ·问题 #95062 ·微软/vscode (github.com); ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号