给树莓派加装摄像头

这有啥难的?USB 摄像头插上去,全文完。

呵呵,后续装 Open CV 简直要命……

板载摄像头的安装

Well, I mean ... This one:

树莓派摄像头

所以…… 第一次玩硬件的我就一脸蒙逼地霸王硬上弓…… 拿着拍线就开始硬怼。结果发现,插槽其实是有个小扣子的,可以扣开,把拍线「放进去」,然后把扣子扣上。

差点把排线插坏了啊!

树莓派摄像头安装效果

呐,这就是插好后的效果。

USB 摄像头的安装

略……

啥?

如何安 OpenCV

本以为是个比较简单的事情的……

首先,我使用的是「RASPBIAN STRETCH WITH DESKTOP」,打包时间为 2018-04-18。之所以需要「With Desktop」是因为想用摄像头啊…… 不然它旁边的那个多么轻巧。

然后,使用

sudo apt update; 
sudo apt upgrade -y;

把一切升级到最新的。

下面是安装 OpenCV。由于是要做开发,所以能安的包都直接安了,并没有考虑「最小安装」这个事儿:

sudo apt install libopencv-dev -y;
sudo apt install libatlas-base-dev -y;
sudo apt install libjasper-dev -y;
sudo apt install qt4-dev -y;

尤其是后面三个包,如果不安的话 Python import cv2 的时候会报错。

下面是 Python 的接口。

我们可以用 apt 来搞:

sudo apt install python-opencv -y;

也可以用 pip 来搞:

sudo pip3 install opencv-python

但是我发现,如果用 pip3 装的话,再用 pip2 装会提示已经装过了,但是只有 Python3 可以调用 cv,Python2 不行。反正我只用 Python3,那么一切顺利了。

最后再装一个 opencv-contrib-python,我也不知道干啥的,如果不装的话,会报 No module named 'cv2.face'之类的错误。

sudo pip install opencv-contrib-python

测试代码

测试 USB Camera:

import numpy as np
import cv2

cap = cv2.VideoCapture(0) # 使用第 0 号摄像头

while(True):
    ret, frame = cap.read()

    cv2.imshow('frame', frame)

    k = cv2.waitKey(30) & 0xff
    if k == 27:  # press 'ESC' to quit
        break

cap.release()
cv2.destroyAllWindows()

似乎是一切顺利吧。

测试摄像头板子

OpenCV 可不把板子上的摄像头当成 Video 设备,也就是说 ls /dev/video* 什么都没有,也就是说,OpenCV 找不到版子上的摄像头。

所以呢,Python 有一个叫做 picamera 的库,可以完成调用板子上摄像头的事儿:

from picamera import PiCamera
from time import sleep

camera = PiCamera()
camera.start_preview()
sleep(10)
camera.stop_preview()

需要注意的是,上面的效果只能通过 hdmi 来输出。即使你是用 SSH 登录的,也需要接上 HDMI 来看效果。

后记

一开始不知道板子上的摄像头和 USB 摄像头的区别,更不知道 OpenCV 不认识板子上的摄像头…… 纠结了大半个晚上。

而且,OpenCV 里面出了一大堆错误,以前都没有见到过。就比如,libjasper 是个啥……

最后,opencv-contrib-python 这个包会经常丢……不知道为啥。只要--force-reinstall 一下就好了。

现在好了~继续搞 YOLO 去了~

留下评论