基于树莓派的远程监控+人脸检测
基于树莓派的远程监控+人脸检测
嗯,有一段时间没用写博客了,主要原因还是自己太菜,哈哈哈,没什么值得分享的…
那好,闲话少说,今天要写的这个呢,其实老早之前就做出来了,只是最近刚好又用到,然后觉得挺有意思的,就分享一下
好吧,先来说说首先需要用到的东西:
1.opencv库,笔者用的是opencv-3.4.1安装的话可以照着这个来–>树莓派opencv3.4.1+contrib安装(其他的linux系统也可以)
2.你还需要上一篇文章的知识,hahah ,连接如右—>树莓派远程监控+运动目标检测
好了,那么我现在假设你已经安装好了opencv,并且照着我上一篇的文章走了一遍了,并且没有错误了,嗯…
并且假设你已经对上一篇文章熟悉了,嗯嗯嗯,并且你已经实现了树莓派远程监控与运动目标识别了,好的…接下来就是正题了…
在这里插入代码片
正文
今天的一切都是在:
图中的camera_opencv.py中进行操作的,
首先,还是直接贴代码吧,果然我不适合bb:
import cv2
from base_camera import BaseCamera
import numpy as np
import os
import time
class Camera(BaseCamera):
video_source = 0
@staticmethod
def set_video_source(source):
Camera.video_source = source
@staticmethod
def frames():
camera = cv2.VideoCapture(Camera.video_source)
'''
加载模型
此处的路径需要设置为你自己机器上haarcascade_frontalface_alt2.xml的所在位置
'''
face=cv2.CascadeClassifier(r'C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml')
camera.set(3,160)
camera.set(4,160)
avg = None
def nothing(x):
pass
if not camera.isOpened():
raise RuntimeError('Could not start camera.')
while True:
# read current frame
_, img = camera.read()
frame=cv2.flip(frame,1)
‘’‘
一般摄像头得到的彩色图片都是BGR的图片,其实也没什么,就是直接观看的话稍显鬼畜,可以通过cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)转换为RGB图像,这里直接转换为灰度图 ’‘’
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#BGR转换为灰度图像
faces=face.detectMultiScale(gray,1.3,5)#参数可调,这里只是一个粗略参数,详情百度
for (x,y,w,h) in faces:
cropped=frame[y:y+h,x:x+w]
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2,cv2.LINE_AA)
yield cv2.imencode('.jpg', img)[1].tobytes()
好了,上面就是一个最简单的远程监控+人脸检测代码了,上文利用的是opencv自带的几种人脸检测模型,可能精度会差强人意,但是简单,哈哈哈,其他复杂一点且准确率较高的也有,比如说mtcnn,dlib,以及face_recognition等,识别的准确率都是比较高的,也是可以直接使用的,至于训练自己的数据集的话,有一定的难度,但是也可以训练,或者直接用训练好的模型也可以,要加上远程监控,只需要把camera_opencv.py中相应部分改变即可,笔者这里就不一一赘述了(其实是懒的,哈哈哈哈,本来是打算写的…),好吧,最后祝大家学习生活愉快,如果觉得有帮助的话,还请点个赞。谢谢大家