ubuntu 下 如何与usb设备摄像头通信

qq_278667286 2017-11-12 05:22:39
某宝上双目摄像头


window ubuntu 都能自动识别。
打开摄像头默认左摄像头的图像。
windows使用CHUSEI 3D Webcam可以实现调用左右 红蓝双目图像。
测试


经测试,chusei 3d webcam软件的left、right 、红蓝、双目按钮点击是给usb设备下发了命令。

A_W c376 0001
A_W c376 0002
A_W c376 0003
A_W c376 0004
似乎是往某个寄存器(c376)里写了不同的数值(1234),触发摄像头传相应的图像。

软件配置文件如下
;Device address:
;Format: X_Y ADDR DATA
;X(Source): Sw=SENSOR Word Sb=SENSOR BYTE,E=EEPROM,A=ASIC Md=MCUdata Mc=MCUcode O=OTP
;Y(R/W): R=READ,W=WRITE
A_W c376 0004

如果能写个程序,实现chusei 3d webcam按钮的动作,那么这个双目还是有点利用价值的,特别是ros中的应用。
不知ubuntu 如何与usb摄像头通信。

本人小白,
希望大神指点一二
...全文
13055 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartlifuchang 2020-03-26
  • 打赏
  • 举报
回复
您好,我也是这种摄像头,想请教一下您,我已经用那个软件chuise 3d 调好了摄像头但是用Python调用摄像头只能有一个画面,应该怎么解决问题?
wb197 2019-08-12
  • 打赏
  • 举报
回复
我用的这款https://item.jd.com/50082528786.html#crumb-wrap

无需装驱动,我在ubuntu16.04下用的python代码:


import cv2
import time
import camConfigs

#双目摄像头支持的分辨率
#MJPEG:
#640*240@60FPS
#1280*480@60FPS

camWidth = 1280
camHeight = 480

AUTO = False # 自动拍照,或手动按s键拍照
INTERVAL = 2 # 自动拍照间隔

cv2.namedWindow("stereo")
cv2.moveWindow("stereo", 400, 200)
stereo_cam = cv2.VideoCapture(1) # 笔记本原配一个usb cam,不可插拔,再接这个双目摄像头id就+1了
stereo_cam.set(cv2.CAP_PROP_FRAME_WIDTH,camWidth) # width
stereo_cam.set(cv2.CAP_PROP_FRAME_HEIGHT,camHeight) # height

counter = 0
utc = time.time()
folder = "./snapshot/" # 拍照文件目录

def shot(pos, frame):

global counter
path = folder + pos + "_" + str(counter) + ".jpg"
cv2.imwrite(path, frame)

print("snapshot saved into: " + path)

while True:
height = camHeight
ret, stereo_frame = stereo_cam.read()
assert ret

width = camWidth

leftFrame = stereo_frame[0:height,0:width/2]
rightFrame = stereo_frame[0:height,width/2:width]

cv2.imshow("stereo", stereo_frame)
cv2.imshow("left", leftFrame)
cv2.imshow("right", rightFrame)

now = time.time()
if AUTO and now - utc >= INTERVAL:
shot("stereoCam", stereo_frame)
counter += 1
utc = now

key = cv2.waitKey(1)
if key == ord("q"):
break
elif key == ord("s"):
shot("stereoCam", stereo_frame)
shot("left", leftFrame)
shot("right", rightFrame)
counter += 1

stereo_cam.release()
cv2.destroyWindow("stereo")
qq_278667286 2019-06-11
  • 打赏
  • 举报
回复
谢谢各位的帮助和探讨!
linux使用此双目依赖uvcdynctrl所以安装之

sudo apt install uvcdynctrl



uvcdynctrl命令写成shell脚本来实现四个模式的切换


uvcdynctrl -d /dev/video0 -S 6:8 '(LE)0x50ff'
uvcdynctrl -d /dev/video0 -S 6:15 '(LE)0x00f6'
uvcdynctrl -d /dev/video0 -S 6:8 '(LE)0x2500'
uvcdynctrl -d /dev/video0 -S 6:8 '(LE)0x5ffe'
uvcdynctrl -d /dev/video0 -S 6:15 '(LE)0x0003'
uvcdynctrl -d /dev/video0 -S 6:15 '(LE)0x0002'
uvcdynctrl -d /dev/video0 -S 6:15 '(LE)0x0012'
uvcdynctrl -d /dev/video0 -S 6:15 '(LE)0x0004'
uvcdynctrl -d /dev/video0 -S 6:8 '(LE)0x76c3'
uvcdynctrl -d /dev/video0 -S 6:10 '(LE)0x0400'
最后一行中用0x0100,0x0200,0x0300,0x0400指令分别可以切换到左单目,右单目,红蓝模式,双目模式。


python是这样的
cam_id=1
cam_mode_dict={
'LEFT_EYE_MODE':1,
'RIGHT_EYE_MODE':2,
'RED_BLUE_MODE':3,
'BINOCULAR_MODE':4,
}
cam_mode=cam_mode_dict['BINOCULAR_MODE']
command_list=[
"uvcdynctrl -d /dev/video{cam_id} -S 6:8 '(LE)0x50ff'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:15 '(LE)0x50f6'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:8 '(LE)0x2500'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:8 '(LE)0x5ffe'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:15 '(LE)0x0003'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:15 '(LE)0x0002'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:15 '(LE)0x0012'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:15 '(LE)0x0004'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:8 '(LE)0x76c3'",
"uvcdynctrl -d /dev/video{cam_id} -S 6:10 '(LE)0x0{cam_mode}00'",

]

for command in command_list:
subprocess.Popen(shlex.split(command.format(cam_id=cam_id,cam_mode=cam_mode)))

总结记录
https://blog.csdn.net/qq_38288618/article/details/91474026
JT同学 2019-06-04
  • 打赏
  • 举报
回复
一般都是有支持的驱动的,插上摄像头就能用,想读取摄像头数据就需要编写应用程序,可以参考:https://blog.csdn.net/weixin_42462202/article/details/88957514
黄地主 2019-03-01
  • 打赏
  • 举报
回复
想知道淘宝上的那个人是怎么实现用OPENCV显示出两个摄像头的画面的
qq_40745500 2018-09-01
  • 打赏
  • 举报
回复
最近我也搞过同样的双目摄像头,在某宝买家评论里看到有人在Windows上用opencv编程实现了左右镜头画面同时显示,看样子也是发指令4给摄像头,但看不到具体代码。不过我在Ubuntu16.04下用opencv + libusb无法做到,因为调用libusb的libusb_detach_kernel_driver方法后,摄像头所对应的设备文件/dev/video1消失了。只好再花170大元买另一种双目摄像头,不用设置就能输出双目画面。
qq_278667286 2018-01-12
  • 打赏
  • 举报
回复
引用 3 楼 caii123的回复:
正在玩这个,这个用的uvc免驱,不过特殊功能用了专门的index和interface,网上有些关于这个的资料,你可以用bus hound抓包看软件是怎么控制摄像头的,然后模拟这个控制过程。 楼主有那个chusei 3D webcam能麻烦给我发一份吗? 289548146@qq.com
已发12345678
caii123 2018-01-04
  • 打赏
  • 举报
回复
正在玩这个,这个用的uvc免驱,不过特殊功能用了专门的index和interface,网上有些关于这个的资料,你可以用bus hound抓包看软件是怎么控制摄像头的,然后模拟这个控制过程。 楼主有那个chusei 3D webcam能麻烦给我发一份吗? 289548146@qq.com
常书 2017-11-15
  • 打赏
  • 举报
回复
建议找原厂支持,自己研究比较费劲 你可以到DEV下看看有没多出来tty结点,可能会USB转串口通信,如果是这样好操作些,往这个串口发命令
Hello Worm 2017-11-14
  • 打赏
  • 举报
回复
你可以查询一下V4L2规范,这个规范定义了如何采集,设置,控制视频类设备,常见如摄像头,广播Tuner大多采用此规范。可以从网上找一些例程试试看。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧