树莓派4B配置摄像头并实现实时人脸检测

上一篇:树莓派4B远程控制
下一篇:Windows 10安装NCS2环境并进行模型格式转换

目录

一、配置树莓派摄像头
 1.1、usb摄像头配置
  1.1.1、将usb摄像头连接到树莓派
  1.1.2、升级系统
  1.1.3、打开系统配置Camera
  1.1.4、操作摄像头
 1.2、官方摄像头配置
  1.2.1、将官方摄像头连接到树莓派
  1.2.2、配置并检测摄像头
二、调用摄像头实现实时人脸检测
三、参考资料

一、配置树莓派摄像头

1.1、usb摄像头配置

1.1.1、将usb摄像头连接到树莓派

将摄像头的USB口连接到树莓派的任意一个USB口后再开机。一定要先接摄像头再开机,不然树莓派可能无法识别。

树莓派4B配置摄像头并实现实时人脸检测_第1张图片

树莓派4B配置摄像头并实现实时人脸检测_第2张图片

输入输入lsusb或者ls /dev/video*命令:

树莓派4B配置摄像头并实现实时人脸检测_第3张图片

查看是否有ID:05a3:9230 ARC International Camera或者/dev/video0设备,有的话说明树莓派已经检测到我们的摄像头设备,可以进行下一步操作。

1.1.2、升级系统

用如下的命令来更新一下系统:
sudo apt-get update
sudo apt-get upgrade

1.1.3、打开系统配置Camera

确保Camera已打开:

树莓派4B配置摄像头并实现实时人脸检测_第4张图片

1.1.4、操作摄像头

  • 安装mplayer播放器
    sudo apt-get install mplayer -y

树莓派4B配置摄像头并实现实时人脸检测_第5张图片

  • 安装fswebcam视频软件
    sudo apt-get install fswebcam -y

树莓派4B配置摄像头并实现实时人脸检测_第6张图片

  • 查看USB摄像头画面
    sudo mplayer tv://
    确认画面之后需要通过ctrl+c退出,才能进行下一步调用摄像头操作.否则会报如摄像头忙碌的错误。
  • 在/home/pi目录下调用fswebcam生成一张当前摄像头拍摄到的实时照片
    fswebcam -d /dev/video0 --no-banner -r 320x240 -S 10 /home/pi/image.jpg
    其中:
    -d 是配置使用哪个摄像设备
    --no-banner 拍出来照片没水印,不加的话,可能会报字体问题
    -r 后的是图片的宽与高
    -S 跟曝光度设置差不多。从1到10,越来越不刺眼的感觉,如果不设置这个参数或者设置为0的话可能拍出黑照片。
    最后的是待保存的图片路径(如果不加路径/home/pi/的话默认保存在当前目录)。

树莓派4B配置摄像头并实现实时人脸检测_第7张图片

1.2、官方摄像头配置

1.2.1、将官方摄像头连接到树莓派

插入摄像头时需提起挡板,注意连接线蓝色一面需面向网线端口一侧,插入摄像头后按下挡板

树莓派4B配置摄像头并实现实时人脸检测_第8张图片

1.2.2、配置并检测摄像头

sudo nano /etc/modules
在文末加入一行:
bcm2835-v412
#树莓派cpu是博通公司bcm2835型号,加上这一行可以识别摄像头
重启树莓派
输入命令:
vcgencmd get_camera
若输出supported=1 detected=1,则说明检测到了摄像头
raspistill -o image.jpg
调用摄像头拍摄一张图片,命名为image.jpg,存储在当前目录,如果看到摄像头上亮红灯,目录里有照片,则进一步说明摄像头配置正确。
fswebcam 10 test.jpg
延时10s拍摄,产生一张名称为test的图片

二、调用摄像头实现实时人脸检测

  • 配置展示窗口
    export DISPLAY=:0.0
  • 安装python-opencv
    sudo apt-get install python-opencv
  • 树莓派摄像头实时人脸检测
    新建face-detection-camera.py文件,并写入以下内容:
# coding=utf-8
# face-detection-camera.py
import cv2 as cv
import numpy as np

print('开始人脸摄像头实时检测')
# 载入模型文件和权重文件
net = cv.dnn.readNet('face-detection-adas-0001.xml','face-detection-adas-0001.bin')
# Specify target device
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)

# 从摄像头中读取图像帧
cap=cv.VideoCapture(0)
while(1):
    # 获取一帧图像
    ret,frame=cap.read()
    # Prepare input blob and perform an inference
    frame=cv.resize(frame,(480,320),interpolation=cv.INTER_CUBIC)
    blob=cv.dnn.blobFromImage(frame,size=(672,384),ddepth=cv.CV_8U)
    net.setInput(blob)
    out=net.forward()
    
    # 绘制人脸框
    for detection in out.reshape(-1,7):
        confidence=float(detection[2])
        # 获取左上角图片坐标
        xmin=int(detection[3]*frame.shape[1])
        ymin=int(detection[4]*frame.shape[0])
        # 获取右下角图片坐标
        xmax=int(detection[5]*frame.shape[1])
        ymax=int(detection[6]*frame.shape[0])
        if confidence > 0.5:
            cv.rectangle(frame,(xmin,ymin),(xmax,ymax),color=(0,255,0))
    # 展示图像
    cv.imshow('capture',frame)
    if cv.waitKey(1)&0xFF==ord('q'):
        # 每1秒监听一次键盘的动作,按q键结束,并保存图片
        cv.imwrite('out.png',frame)
        print('save one image done!')
        break
# 关闭摄像头及显示窗口
cap.release()
cv.destroyAllWindows()
print('人脸摄像头实时检测完成')

face-detection-camera.py放入face-detection-adas-0001.xml,face-detection-adas-0001.bin同级目录,并执行:
python3 face-detection-camera.py
可以左右移动人脸查看识别情况,界面上会在检测到的人脸画一个绿色的框
按键盘Q键可退出检测,并保存最后一帧图像

三、参考资料

1.树莓派3b+和 intel movidius 神经元计算棒2代 跑yolo v3 tiny
2.树莓派高帧率广角摄像头
3.树莓派官方原装摄像头

你可能感兴趣的:(树莓派,深度学习,神经网络,raspberry,pi)