意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

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

来源:恒创科技 编辑:恒创科技编辑部
2022-08-26 13:59:36



tags: MacOS Python Debug问题

环境:

MacOS12.3.1 Apple silicon


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

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\

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

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

cp

最后进行修改, 这一步需要替换包名称:(这里的命令使用的是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还有值的改进的地方…


参考


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


上一篇: 租用美国服务器:潜在的风险与应对策略。 下一篇: Altium Designer 18 速成实战 第五部分 PCB流程化设计常用操作(二十七)泪滴添加与移除