树莓派-人脸识别资料收集

使用树莓派进行简易人脸识别:http://blog.csdn.net/jireren/article/details/52167791#comments

Imports

from picamera.array import PiRGBArray
from picamera import PiCamera
from functools import partial

import multiprocessing as mp
import cv2
import os
import time

Setup

os.putenv( ‘SDL_FBDEV’, ‘/dev/fb0’ )

resX = 320
resY = 240

cx = resX / 2
cy = resY / 2

os.system( “echo 0=150 > /dev/servoblaster” )
os.system( “echo 1=150 > /dev/servoblaster” )

xdeg = 150
ydeg = 150

Setup the camera

camera = PiCamera()
camera.resolution = ( resX, resY )
camera.framerate = 60

Use this as our output

rawCapture = PiRGBArray( camera, size=( resX, resY ) )

The face cascade file to be used

face_cascade = cv2.CascadeClassifier(‘/home/pi/opencv-2.4.9/data/lbpcascades/lbpcascade_frontalface.xml’)

t_start = time.time()
fps = 0

Helper Functions

def get_faces( img ):

gray = cv2.cvtColor( img, cv2.COLOR_BGR2GRAY )
faces = face_cascade.detectMultiScale( gray )

return faces, img

def draw_frame( img, faces ):

global xdeg
global ydeg
global fps
global time_t

# Draw a rectangle around every face
for ( x, y, w, h ) in faces:

    cv2.rectangle( img, ( x, y ),( x + w, y + h ), ( 200, 255, 0 ), 2 )
    cv2.putText(img, "Face No." + str( len( faces ) ), ( x, y ), cv2.FONT_HERSHEY_SIMPLEX, 0.5, ( 0, 0, 255 ), 2 )

    tx = x + w/2
    ty = y + h/2

    if   ( cx - tx > 15 and xdeg <= 190 ):
        xdeg += 1
        os.system( "echo 0=" + str( xdeg ) + " > /dev/servoblaster" )
    elif ( cx - tx < -15 and xdeg >= 110 ):
        xdeg -= 1
        os.system( "echo 0=" + str( xdeg ) + " > /dev/servoblaster" )

    if   ( cy - ty > 15 and ydeg >= 110 ):
        ydeg -= 1
        os.system( "echo 1=" + str( ydeg ) + " > /dev/servoblaster" )
    elif ( cy - ty < -15 and ydeg <= 190 ):
        ydeg += 1
        os.system( "echo 1=" + str( ydeg ) + " > /dev/servoblaster" )

# Calculate and show the FPS
fps = fps + 1
sfps = fps / (time.time() - t_start)
cv2.putText(img, "FPS : " + str( int( sfps ) ), ( 10, 10 ), cv2.FONT_HERSHEY_SIMPLEX, 0.5, ( 0, 0, 255 ), 2 ) 

cv2.imshow( "Frame", img )
cv2.waitKey( 1 )

Main

if name == ‘main‘:

pool = mp.Pool( processes=4 )
fcount = 0

camera.capture( rawCapture, format="bgr" )  

r1 = pool.apply_async( get_faces, [ rawCapture.array ] )    
r2 = pool.apply_async( get_faces, [ rawCapture.array ] )    
r3 = pool.apply_async( get_faces, [ rawCapture.array ] )    
r4 = pool.apply_async( get_faces, [ rawCapture.array ] )    

f1, i1 = r1.get()
f2, i2 = r2.get()
f3, i3 = r3.get()
f4, i4 = r4.get()

rawCapture.truncate( 0 )    

for frame in camera.capture_continuous( rawCapture, format="bgr", use_video_port=True ):
    image = frame.array

    if   fcount == 1:
        r1 = pool.apply_async( get_faces, [ image ] )
        f2, i2 = r2.get()
        draw_frame( i2, f2 )

    elif fcount == 2:
        r2 = pool.apply_async( get_faces, [ image ] )
        f3, i3 = r3.get()
        draw_frame( i3, f3 )

    elif fcount == 3:
        r3 = pool.apply_async( get_faces, [ image ] )
        f4, i4 = r4.get()
        draw_frame( i4, f4 )

    elif fcount == 4:
        r4 = pool.apply_async( get_faces, [ image ] )
        f1, i1 = r1.get()
        draw_frame( i1, f1 )

        fcount = 0

    fcount += 1

    rawCapture.truncate( 0 )

上述程序用到的相关库:
1)python基础:http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_beginner_tutorial.html#one_figure_entry_python
2)picamera库: http://picamera.readthedocs.io/en/release-1.12/api_array.html
3)Python 多进程 multiprocessing.Pool类详解:http://blog.csdn.net/seetheworld518/article/details/49639651
4)htop 使用:http://www.open-open.com/lib/view/open1417612210323.html

(未完)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树莓派是一款小型而强大的单板计算机,可以被用于多种应用,包括人脸识别。而OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一个在计算机视觉领域广泛使用的开源库。通过在树莓派上使用OpenCV,我们可以进行人脸识别的开发。 首先,我们需要确保树莓派上安装了OpenCV。可以通过在终端中运行相应的安装命令来完成安装。安装完成后,我们可以使用OpenCV提供的功能进行人脸识别的开发。 在树莓派上使用OpenCV进行人脸识别的一般步骤如下: 1. 导入OpenCV库并加载人脸识别模型:在代码中导入OpenCV库,并加载已训练好的人脸识别模型,如Haar特征分类器模型。 2. 打开摄像头或加载图像:通过OpenCV的摄像头模块打开树莓派摄像头进行实时人脸识别,或加载一张图像进行静态人脸识别。 3. 对图像进行灰度化处理:将彩色图像转换为灰度图像,以便于后续的人脸检测和识别。 4. 使用人脸检测器检测人脸:利用OpenCV提供的人脸检测器对灰度图像进行人脸检测,获取人脸的位置信息。 5. 对检测到的人脸进行人脸识别:基于已训练好的人脸识别模型,对检测到的人脸图像进行特征提取和匹配,以识别人脸。 6. 标记和显示识别结果:在图像上标记出检测到的人脸区域,并显示出识别的结果。 通过上述步骤,我们可以在树莓派上实现基于OpenCV的人脸识别树莓派的低功耗和便携性,以及OpenCV的强大功能,使得它们成为一个理想的组合,可用于各种需要人脸识别的应用,如安全系统、门禁系统等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值