博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树莓派上实现人脸识别
阅读量:2492 次
发布时间:2019-05-11

本文共 4226 字,大约阅读时间需要 14 分钟。

 

之前成功实现了一次,但是最近项目新买了个树莓派。本以为5分钟就能搞定,结果弄了一上午。所以写个博客记录下,帮助大家也帮助自己。

我实现人脸识别主要是参考 JireRen的方案,给一个链接:

我直接使用demo4的代码,但是需要做一些小改变。因为我现在还没有装小云台,只是简单的把树莓派和picamera连接在了一起。就是这样:

树莓派照片

(感谢@ 店铺的东西,很好用)

我没有小云台和马达,所以删掉了demo4中所有关于云台的代码:

### Imports ################################################################### from picamera.array import PiRGBArrayfrom picamera import PiCamerafrom functools import partial import multiprocessing as mpimport cv2import osimport time  ### Setup ##################################################################### os.putenv( 'SDL_FBDEV', '/dev/fb0' ) resX = 320resY = 240 cx = resX / 2cy = resY / 2 # os.system( "echo 0=150 > /dev/servoblaster" )# os.system( "echo 1=150 > /dev/servoblaster" ) xdeg = 150ydeg = 150  # Setup the cameracamera = PiCamera()camera.resolution = ( resX, resY )camera.framerate = 60	 # Use this as our outputrawCapture = PiRGBArray( camera, size=( resX, resY ) ) # The face cascade file to be usedface_cascade = cv2.CascadeClassifier('/usr/share/opencv/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 )

首先需要安装python-opencv、opencv、picamera驱动:

sudo apt-get updatesudo apt-get upgradesudo apt-get install libopencv-dev python-opencvsudo apt-get install python-opencvsudo apt-get install python-pip sudo apt-get install python-dev sudo pip install picamera

这里安装opencv参考了:

然后需要修改代码中lbpcascades文件路径。我们在linux中查找lbpcascades文件

sudo find / -iname  '*lbpcascad*'

 这里使用了模糊查询,就是前后加个  *  。

结果如下:

sss

所以把路径替换了就可以了!

来张截图:

face

 

你可能感兴趣的文章
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>