100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 毕业设计 树莓派人脸识别系统(Python)

毕业设计 树莓派人脸识别系统(Python)

时间:2018-09-02 12:28:30

相关推荐

毕业设计 树莓派人脸识别系统(Python)

文章目录

0 项目说明1 简介2 运行要求3 安装要求4 项目源码5 最后

0 项目说明

基于树莓派的人脸识别系统(Python)

提示:适合用于课程设计或毕业设计,工作量达标,源码开放

1 简介

使用OpenCV for Python图像识别库,运行在树莓派RASPBIAN JESSIE Linux系统平台上,搭配树莓派官方摄像头模块。

2 运行要求

OpenCV 2.4.9 for PythonPython 2.7v4l2PyQt4

3 安装要求

sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig unzip

1、启用v4l2

sudo nano /etc/modules# 增加一行记录bcm2835-v4l2# 重启后可以找到/dev/video0# 编译v4l2-utilapt-get install autoconf gettext libtool libjpeg8 libjpeg8-devgit clone git:///v4l-utils.gitcd v4l-utils/sudo ./bootstrap.sh./configuremakesudo make install

2、编译OpenCV 2.4.9

wget https://jaist./project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zipunzip opencv-2.4.9.zipcd opencv-2.4.9/cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF# 要使OpenCV开启对v4l2的支持 cmake之后要有以下输出# V4L/V4L2:Using libv4l (ver 1.13.0)sudo makesudo make install

3、安装PyQt4

sudo apt-get install python-qt4

4、运行

python main.py

4 项目源码

# -*- coding: utf-8 -*-'''@author: imhey_000'''import serialimport structfrom PyQt4.QtCore import QThreadfrom ctypes import *from time import sleep#基本应答信息定义ACK_SUCCESS = 0x00ACK_FAIL = 0x01ACK_FULL = 0x04ACK_NO_USER = 0x05ACK_TIMEOUT = 0x08ACK_GO_OUT = 0x0F#用户信息定义ACK_ALL_USER = 0x00ACK_GUEST_USER = 0x01ACK_NORMAL_USER = 0x02ACK_MASTER_USER = 0x03#设置容量 MAX = 1000USER_MAX_CNT = 40#命令定义CMD_HEAD = 0xF5CMD_TAIL = 0xF5CMD_ADD_1 = 0x01CMD_ADD_2 = 0x02CMD_ADD_3 = 0x03CMD_MATCH = 0x0CCMD_DEL = 0x04CMD_DEL_ALL= 0x05CMD_USER_CNT = 0x09CMD_COM_LEV= 0x28CMD_LP_MODE= 0x2CCMD_TIMEOUT= 0x2ECMD_FINGER_DETECTED = 0x14 class FingerPrint(object):gTxBuf = NonegRsBuf = Nonedevice = Noneresource = ''rate = 0def __init__(self, resource='/dev/ttyAMA0', rate=19200):self.gTxBuf = (c_ubyte * 9)()self.gTxBuf[0] = 0x00self.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x00self.gTxBuf[4] = 0x00self.gTxBuf[5] = 0x00self.gTxBuf[6] = 0x00self.gTxBuf[7] = 0x00self.gTxBuf[8] = 0x00self.gRsBuf = (c_ubyte * 9)()self.baudRate = rateself.resource = resourceself.device = serial.Serial(resource, baudrate=rate)def packTxData(self):data = struct.pack('BBBBBBBBB', self.gTxBuf[0],self.gTxBuf[1],self.gTxBuf[2],self.gTxBuf[3],self.gTxBuf[4],self.gTxBuf[5],self.gTxBuf[6],self.gTxBuf[7],self.gTxBuf[8])return datadef packRsData(self):data = struct.pack('BBBBBBBB', self.gRsBuf[0],self.gRsBuf[1],self.gRsBuf[2],self.gRsBuf[3],self.gRsBuf[4],self.gRsBuf[5],self.gRsBuf[6],self.gRsBuf[7])return datadef unpackRsData(self):out = struct.unpack('BBBBBBBB', self.gRsBuf)return outdef txAndRsCmd(self, sCnt, rCnt, delay):checkSum = 0self.device = serial.Serial(self.resource, self.baudRate, timeout=delay)data = self.packTxData()self.device.write(struct.pack('B', CMD_HEAD))for i in range(0, sCnt):self.device.write(data[i])#self.unpackData(data)checkSum ^= self.gTxBuf[i]self.device.write(struct.pack('B', checkSum))self.device.write(struct.pack('B', CMD_TAIL))self.gRsBuf = self.device.read(8)print 'gRsBuf len:', len(self.gRsBuf)if len(self.gRsBuf) != rCnt:print 'time out'return ACK_TIMEOUTif self.gRsBuf[0] != struct.pack('B', CMD_HEAD):print 'fail type error1'return ACK_FAILif self.gRsBuf[rCnt - 1] != struct.pack('B', CMD_TAIL):print 'fail type error2'return ACK_FAILif self.gRsBuf[1] != struct.pack('B', self.gTxBuf[0]):print 'fail type error3'return ACK_FAIL#debugreponse = self.unpackRsData()for i in range(0, 8):print hex(reponse[i])checkSum = 0for i in range(1, (len(self.gRsBuf) - 1)):checkSum ^= struct.unpack('B', self.gRsBuf[i])[0]print struct.pack('B', checkSum)if checkSum != 0:print 'checksum error'return ACK_FAILprint 'success'return ACK_SUCCESSdef addUser(self, userCode):userCount = self.getUserCount()if userCount >= USER_MAX_CNT:return ACK_FAILprint 'add 1'self.gTxBuf[0] = CMD_ADD_1self.gTxBuf[1] = 0x00self.gTxBuf[2] = userCodeself.gTxBuf[3] = 0x03self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 200)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:print 'add 2'self.gTxBuf[0] = CMD_ADD_2result = self.txAndRsCmd(5, 8, 200)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:print 'add 3'self.gTxBuf[0] = CMD_ADD_3result = self.txAndRsCmd(5, 8, 200)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:print 'add success'return ACK_SUCCESSelse:return ACK_FAILelse:return ACK_FAILelse:return ACK_FAILdef clearAllUser(self):self.gTxBuf[0] = CMD_DEL_ALLself.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x00self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 50)print result#print struct.unpack('B', result)[0]#if result == ACK_SUCCESS and self.gRsBuf[4] == ACK_SUCCESS:if result == 0x00 and struct.unpack('B', self.gRsBuf[4])[0] == 0x00:print 'user all clear'Nonedef isMasterUser(self, userID):if userID == 1 or userID == 2 or userID == 3:return Trueelse:return Falsedef verifyUser(self):self.gTxBuf[0] = CMD_MATCHself.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x00self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 150)print hex(result)if result != ACK_TIMEOUT:if result == ACK_SUCCESS and self.isMasterUser(struct.unpack('B', self.gRsBuf[4])[0]):print 'verify success'return ACK_SUCCESSelif struct.unpack('B', self.gRsBuf[4])[0] == ACK_NO_USER:print 'no user'return ACK_NO_USERelse:print 'verify fail'return ACK_GO_OUTelse:return ACK_TIMEOUTdef getUserCount(self):self.gTxBuf[0] = CMD_USER_CNTself.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x00self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 10)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:print 'user count: ',struct.unpack('B', self.gRsBuf[3])[0]return struct.unpack('B', self.gRsBuf[3])[0]else:return 0xFFdef getCompareLevel(self):self.gTxBuf[0] = CMD_COM_LEVself.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x01self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 10)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:print 'compare level: ',struct.unpack('B', self.gRsBuf[3])[0]return struct.unpack('B', self.gRsBuf[3])[0]else:return 0xFFdef setCompareLevel(self, tmp):self.gTxBuf[0] = CMD_COM_LEVself.gTxBuf[1] = 0x00self.gTxBuf[2] = tmpself.gTxBuf[3] = 0x00self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 10)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:return struct.unpack('B', self.gRsBuf[3])[0]else:return 0xFFdef getTimeOut(self):self.gTxBuf[0] = CMD_TIMEOUTself.gTxBuf[1] = 0x00self.gTxBuf[2] = 0x00self.gTxBuf[3] = 0x01self.gTxBuf[4] = 0x00result = self.txAndRsCmd(5, 8, 10)if result == ACK_SUCCESS and struct.unpack('B', self.gRsBuf[4])[0] == ACK_SUCCESS:return struct.unpack('B', self.gRsBuf[3])[0]else:return 0xFFclass FingerPrintThread(QThread):runFunction= 1ADD_USER = 0VERIFY= 1CLEAR_ALL_USER = 2SET_COM_LEV= 3GET_COM_LEV= 4GET_TIME_OUT = 5GET_USER_CNT = 6callBack = Noneresource = ''rate = 0def __init__(self, resource='/dev/ttyAMA0', rate=19200):super(FingerPrintThread, self).__init__()self.resource = resourceself.rate = rateself.fingerPrint = FingerPrint(resource=self.resource, rate=self.rate)self.result = Nonedef setFunction(self, runFunction):self.runFunction = runFunctiondef run(self):if self.runFunction == self.ADD_USER:self.result = self.fingerPrint.addUser(self.userCode)elif self.runFunction == self.VERIFY:self.result = self.fingerPrint.verifyUser()elif self.runFunction == self.CLEAR_ALL_USER:self.result = self.fingerPrint.clearAllUser()elif self.runFunction == self.SET_COM_LEV:self.result = self.fingerPrint.setCompareLevel(self.tmp)elif self.runFunction == self.GET_COM_LEV:self.result = self.fingerPrint.getCompareLevel()elif self.runFunction == self.GET_TIME_OUT:self.result = self.fingerPrint.getTimeOut()elif self.runFunction == self.GET_USER_CNT:self.result = self.fingerPrint.getUserCount()

5 最后

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。