查看: 6079|回复: 3

【懒兔子玩树莓】SimpleCV中使用Pi Camera和手机摄像头

[复制链接]
  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-7-15 20:54:33 | 显示全部楼层 |阅读模式
    分享到:

    USB摄像头固然方便,但在SimpleCV中其图像采集效率不如树莓自带的CSI接口。因此使用树莓官方的Pi Camera模块也是一个不错的选择。

    Pi Camera特例独行地使用其专有的驱动,与USB的UVC并不兼容。因此,SimpleCV并不能直接识别Pi Camera。解决方案是为Pi Camera安装第三方的UV4L兼容驱动。

    在终端中输入下面命令(注意后面有个横杠):

    1. $ curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -
    复制代码

    然后修改apt-get的源列表文件/etc/apt/sources.list,以便获取驱动软件包。在文件末尾添加如下内容:

    1. deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
    复制代码

    建议先更新apt-get和树莓派的固件,再通过apt-get安装驱动软件:

    1. $ sudo rpi-update
    2. $ sudo apt-get update
    3. $ sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras
    复制代码

    安装完成后重启Pi Camera驱动,就可以使用了。在/dev目录下会生成video0设备文件,这就是我们的Pi Camera摄像头(若树莓派还连接了其他摄像头,video文件的编号可能会发生变化)。

    1. $ sudo service uv4l_raspicam restart
    复制代码

    由于默认开启了preview模式,这时候使用SimpleCV打开摄像头,除了SimpleCV的窗口外还会有一个摄像头窗口占据屏幕。因此还要修改UV4L配置文件/etc/uv4l/uv4l-raspicam.conf,找到如下内容,去掉前面的“#”注释符关闭预览模式:

    1. nopreview = yes
    复制代码

    安装了UV4L驱动后的Pi Camera和一般的USB摄像头使用方法完全相同。

    另外由于这是第三方驱动,可能会与原有的UV4L驱动冲突,导致原有USB摄像头无法使用。这时可以删除/etc/init.d/uv...文件(文件名兔子记不清楚了,反正是和uvl相关的晕,但不是raspicam那个),使其不开机启动,这样就可以同时使用Pi Camera和USB摄像头。


    如果手边没有摄像头,还可以用手机的摄像头来代替。前提是在手机上安装“IP摄像头”软件,这其实就是通过MJPEG编码获取网络摄像头的图像。开启网络摄像头服务器后,使用下面代码调用摄像头。

    1. import SimpleCV as scv
    2. import time

    3. cam = JpegStreamCamera("http://192.168.0.104/video")
    4. display = scv.Display()

    5. while display.isNotDone():
    6.     img = cam.getImage()
    7.     img.save(display)
    复制代码

    如果服务器设有密码,则需要在IP地址前加上用户名密码。

    1. cam = JpegStreamCamera("http://username:password@192.168.0.104/video")
    复制代码

    需要注意的是,本例中的摄像头路径为192.168.0.104/video,而使用不同应用时访问路径可能会变化,如变为192.168.0.104/video.mjpg等。请读者在自己使用的App中查询或设置。


    图 IP摄像头App


    图 手机上启动Cam Server


    当存在多个摄像头时,可以借由摄像头编号识别摄像头,如Camera(0)和Camera(1)等。这里的编号对应了Linux文件系统中的/dev/video0和/dev/video1设备。

    下面的例子演示了如何同时调用两个摄像头(USB摄像头和Pi Camera),并对画面进行拼接。

    1. import SimpleCV as scv
    2. import time

    3. cam0 = scv.Camera(0)
    4. cam1 = scv.Camera(1)

    5. display = scv.Display(resolution = (640, 240))

    6. while display.isNotDone():
    7.     # Resize the images to fit display window
    8.     img0 = cam0.getImage().resize(320, 240)
    9.     img1 = cam1.getImage().resize(320, 240)
    10.     # Combine img1 to the right side of img0
    11.     img_combined = img0.sideBySide(img1, side = "right")   
    12. img_combined.save(display)
    复制代码

    代码中设置显示窗口大小为640x240,并通过resize()函数将单个摄像头的图像缩放到320x240,最后使用sideBySide()函数对图像进行拼接。左侧的画面由USB摄像头获取,右面的画面则来自Pi Camera模块。


    图 多摄像头视频拼接


    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-13 19:58
  • 签到天数: 1818 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-7-15 22:39:22 | 显示全部楼层
    SimpleCV可以用上Pi Camera,好样的!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-7-20 10:41:47 | 显示全部楼层
    SimpleCV可以用上Pi Camera,好样的!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-1-8 19:42
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-9-22 15:48:59 | 显示全部楼层
    不错。。。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 18:08 , Processed in 0.138550 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.