首先配置树莓派摄像头模块
插入摄像头排线
sudo raspi-config
进入配置
选中Interfacing Options ,进入并使能camera
可参考这里
如果是USB摄像头
可以参考一下
然后就可以操作摄像头了
拍照指令
raspistill -o keychain.jpg -t 2000
2000ms后 拍一张照,存在当前目录,名字叫keychain.jpg
想要用摄像头模块拍一段视频的话,可以从命令行运行 raspivid 工具。下面这句命令会按照默认配置(长度5秒,分辨率1920x1080,比特率 17Mbps)拍摄一段视频。
raspivid -o mykeychain.h264
如果你想改变拍摄时长,只要通过 “-t” 选项来设置你想要的长度就行了(单位是毫秒)。
raspivid -o mykeychain.h264 -t 10000
其它操作可以参考这里
安装opencv
sudo apt-get install python-opencv
安装后可以输入以下代码验证安装
python -c 'import cv2; print dir(cv2)'
会出现许多库
为opencv配置摄像头
opencv无法识别树莓派原装摄像头则输入
sudo nano /etc/modules
添加一行:
bcm2835-v4l2
参考这里
识别人脸
代码可参考这里
可以识别并框住人脸,如果摄像头打不开请按2来
先下载训练好的人脸特征文件haarcascade_frontalface_default.xml(普通人脸特征)
可以到https://github.com/opencv/opencv/tree/master/data/haarcascades找到并下载
下载方式可以参考在github上下载单个文件
将下载的haarcascade_frontalface_default.xml文件与程序放在同一目录
下面是代码 在用命令行运行python时后面须加参数0,例如
python test_camer.py 0
0为python程序的第二个参数
> #-*- coding: utf-8 -*- import cv2 import sys import time from PIL import Image
>
> def CatchUsbVideo(window_name, camera_idx):
> cv2.namedWindow(window_name)
> #视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头
> cap = cv2.VideoCapture(camera_idx)
> #告诉OpenCV使用人脸识别分类器 保存在程序目录
> classfier = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
> #识别出人脸后要画的边框的颜色,RGB格式
> color = (0, 255, 0)
> while cap.isOpened():
> ok, frame = cap.read() #读取一帧数据
> if not ok:
> break
> #将当前帧转换成灰度图像
> grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
> #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
> faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
> if len(faceRects) > 0: #大于0则检测到人脸
> for faceRect in faceRects: #单独框出每一张人脸
> x, y, w, h = faceRect
> cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
> #显示图像
> cv2.imshow(window_name, frame)
> c = cv2.waitKey(10)#按q退出
> if c & 0xFF == ord('q'):
> break
> #释放摄像头并销毁所有窗口
> cap.release()
> cv2.destroyAllWindows() if __name__ == '__main__':
> if len(sys.argv) != 2:
> print("Usage:%s camera_id\r\n" % (sys.argv[0]))
> else:
> CatchUsbVideo("识别人脸区域", int(sys.argv[1]))
使用此程序缺点就是帧率太低
faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
参数解释,可参考opencv人脸检测–detectMultiScale函数
最后如果运行程序却看不到窗口或者窗口闪退,是因为树莓派自带摄像头需要设置一下
sudo nano /etc/modules-load.d/rpi-camera.conf 打开摄像头配置文件。
在最后添加一行bcm2835-v4l2,保存重启,至此opencv就可以读取树莓派自带的摄像头了。
参考这里树莓派3B+使用Opencv读取自带摄像头