效果
一键拍照效果 (访问密码:2468)
暂未补充说明,稍后会添加文字说明
多摄像头一键同步拍摄
最近有朋友咨询如何实现多摄像头一键同步拍照功能的方案问题,帮着实现了一下,包括Python和C++两个版本,实现思路和大家分享一下~
功能需求
- 在电脑上实现单/多个摄像头(UVC协议)的拍摄和保存照片功能
- 多个相机拍摄时能够实现一键同时拍摄保存图像
- 当然越便宜越好啦!!!
具体方案
以下NumCam表示相机个数
1. 上位机+下位机
组成:
上位机:电脑MasterPc+软件(OrderExe负责发布拍摄指令)
下位机:[相机Cam_i+树莓派Pi_i] * NumCam,树莓派上的接收指令和拍照保存软件PhotoExe
大致的实现方式:
- 在局域网下固定MasterPC和每个树莓派的ip,在MasterPC上设置拍摄图片的保存路径(SavePath),将该路径挂载在每个树莓派上
- 连接相机和树莓派,在树莓派上运行PhotoExe
- 在MasterPC上通过OrderExe发布指令,树莓派执行指令保存图像到挂载的路径
有的专家说到需要搭建数据库,吓坏我了,一件小小功能复杂化了。大可不必,真要搞得话一些数据同步软件也可以搞定,比如说坚果云,打call!
特点:
- 成本,成本,最重要的还是成本!
- 太复杂了,当然也得看具体应用环境哈哈
只有上位机
组成:
相机+电脑+USB-Hub
(目前淘宝上卖的Hub最多可以支持20个USB口的扩展)
实现方式:
- 相机n个一组连接在hub上,hub连接在电脑上
- 电脑上只有一个软件,可以同时打开摄像头,并拍摄保存
特点:
- 简单,可以在本地直接看到保存的图像
- 便宜,便宜,还是便宜!投入少,摄像头可以先搞两三个测试验证一下,能行就能行,不能行也就可以调整方案,设备可以复用不会浪费!
推荐及实现细节
当然是推荐第二种,成本低,即使行不通还可以调整方案为第一种或者其他方案,设备都不会浪费!
说到实现细节的话:
- 用到OpenCV视觉库
- 首先实现单相机的打开关闭,图像的显示和保存,这个其实是很简单的,在网上都可以搜索到的,不多赘述
- 在2的基础上结合多线程,但是需要注意的是,一键拍摄时需要确保N个相机确实保存了N张图像,不会少保存
- 另外如果对拍摄相机的顺序有要求,比如我想打开第3、4、5个相机同步拍摄,但是在程序中OpenCV中无法知道那么多相机中哪几个是编号345的相机,可能打开编号567的相机。所以需要绑定相机的VID和相机的编号,这一点在购买相机时要和店老板沟通好!
具体效果
忘了保存一些实现的过程和结果的照片了,但是这个功能是保熟的!
软件下载链接
这里实现了Python和C++两种,具体:
Python版
- 实现单/多相机的一键拍照功能
- 支持多平台,Win/Mac/Linux
- 没有实现相机编号和VID的绑定,不过这个绑定在Linux和Mac上实现比较简单
- 需要安装有Python,直接通过终端运行
- 多相机模式时,需要在代码中修改相机编号来实现
C++版
- 实现单/多相机的一键拍照功能
- 暂时支持Win
- 实现相机编号和VID的绑定
- exe格式,可以直接双击运行
- 单/多相机模式中,想要修改相机编号时,无需修改代码,在config.yaml中修改即可
链接
或者闲鱼
感谢
实现过程中也参考了很多道友的分享,感谢
- HelloWorld博主的分享
- babybin博主的分享
- 机器鱼博主的分享