今天摄像头到货,忍不住赶紧试试效果,如下图板子上白色字体所示:Raspberry Pi Camera Rev1.3版本。
摄像头连接
如下图,在树莓派板子上,白色字体显示Camera字样的插槽,首先需要将插槽的黑长条往上轻轻拔起,注意不是拔出来!
然后把树莓派摄像头白色线路插入,然后把拔起来的黑色长条再压入原位,起固定作用,如下图:
我这个亚克力壳子还留了个孔,让排线露出来,设计感人!
系统设置
接下来开机启动树莓派并登陆,做一下摄像头使用前的准备工作。
# vcgencmd 树莓派专有命令用来对硬件做各种检测,如下检查摄像头信息
$ vcgencmd get_camera
# 返回0,说明没有检测到摄像头信息
supported=0 detected=0
树莓派默认将摄像头通信关闭,此时需要开启:
# 运行命令行配置
$ sudo raspi-config
依次选择 "Interfacing Options" -> " Camera",确定后重启树莓派。
此时再次执行以下命令,可以得到摄像头信息了!
$ vcgencmd get_camera
supported=1 detected=1
raspistill命令行测试拍照
树莓派自带raspistill可以用来进行摄像头拍照功能,如下命令:
$ raspistill -v -o test.jpg
# 还有其他命令可以多试试,比如水平垂直翻转, 详细选项参考
$ raspistill -ifx pastel -hf -vf -o test.jpg
因为没有用显示器,焦距不好把握。。效果如下图:
raspivid命令测试录像
执行以下命令录制5s的视频:
# 生成h264格式
$ raspivid -o testvideo.h264 -t 5000
# 转出mp4格式
$ sudo apt-get install gpac
$ MP4Box -add testvideo.h264 testvideo.mp4
python实现拍照和录像功能
python主要依赖picamera模块,此模块在树莓派系统已经有了,直接import即可。以下代码与命令行功能类似:
import
目标检测
说完摄像头的基本操作,我们来看看如何使用摄像头实现目标检测(Object Dection)。在前面章节(part-3 )我讲过使用TensorFlow Lite实现图像分类,大家先参考那一篇文章安装python和TensorFlow lite环境,本章是在那一章的基础之上。
我们使用了官网的 COCO SSD MobileNet v1 模型来入门,目前支持80种物体的识别,我已经都放到我的仓库中的coco_detect目录,包括模型和标签两个文件,然后执行以下命令,进行摄像头目标检测:
$ python3 detect_picamera.py --model coco_detect/detect.tflite --labels coco_detect/labelmap.txt
看起来效果并不是太好,一直抱着sandwich和banana不放。。。后期决定自己定制训练集。
总结
我在梳理实验过程时候,发现最多的问题还是在网速上,github代码下载不了、pip install失败等等,这些问题非常常见。所谓龟速压倒英雄好汉,热情全因这些鸡毛蒜皮的小事破坏。因此大家一定要有心理准备,以下是我的一些处理办法:
- github下载不了:用gitee克隆github库再进行下载
- pip install下载不了:使用-i指定国内镜像下载,也别搞什么pip.conf了,麻烦不说而且不生效
- pip install失败:缺少相应类库,使用apt-get install解决
- python脚本运行报错:缺少相应类库,使用apt-get install解决
python库编译和运行都是依赖操作系统提供的类库的,出现此类问题,都可以google一下查找哪些类库报错,然后apt-get install进行安装即可。
参考链接:
https://www.raspberrypi.org/documentation/configuration/camera.md
https://www.dummies.com/computers/raspberry-pi/test-raspberry-pi-camera-module/
https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/raspberry_pi