没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
26页
本项目以树莓派model B为主板,编写python程序实现USB摄像头自动拍照(如果摄像头前没有人脸会一直拍照下去),试图开门者靠近摄像头并让其对自己正脸拍照,程序拍照后调用opencv与face++的API对照片进行人脸识别并与本地权限人照片(拥有开门权限的有两人)比较,以控制继电器实现电子门锁的开关(如若是拥有权限者试图开门,继电器由长闭一边打到另一边),所有试图开门的记录都存储在树莓派的数据库mysql中,可以在自己编写的安卓客户端中查看所有记录。
资源推荐
资源详情
资源评论
摘要
本项目以树莓派 model B 为主板,编写 python 程序实现 USB 摄像头自动拍
照(如果摄像头前没有人脸会一直拍照下去),试图开门者靠近摄像头并让其对
自己正脸拍照,程序拍照后调用 opencv 与 face++的 API 对照片进行人脸识别并
与本地权限人照片(拥有开门权限的有两人)比较,以控制继电器实现电子门锁
的开关(如若是拥有权限者试图开门,继电器由长闭一边打到另一边),所有试
图开门的记录都存储在树莓派的数据库 mysql 中,可以在自己编写的安卓客户端
中查看所有记录。
关键词:树莓派、USB 摄像头、opencv、face++、数据库 mysql、安卓客户
端
一. 方案选择
树莓派+Python + Opencv + Face++ +数据库 Mysql + 基于 JDBC 的同一局域
网下连接树莓
派数据库的 app
1.树莓派是一款基于 ARM 的微型电脑主板,以 SD/MicroSD 卡为内存硬盘,
卡片主板周围有 1/2/4 个 USB 接口和一个 10/100 以太网接口,可连接键盘、鼠
标和网线,同时拥有视频模拟信号的电视输出接口和 HDMI 高清视频输出接口,
以上部件全部整合在一张仅比信用卡稍大的主板上。
2.考虑到 python 相较其他语言的简洁性,树莓派对 python 语言有很好的支
持(最新版的树莓派操作系统自带 python 环境),而且 face++官网只提供 java
与 python 两种 sdk 包,选取 python 语言编写树莓派上运行的程序。
3. OpenCV 是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、
Windows 和 Mac OS 操作系统上。它轻量级而且高效,同时提供了 Python、Ruby、
MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。选
用 opencv 做人脸识别是较常用和成熟的技术。
4. Face++是北京旷视科技有限公司旗下的新型视觉服务平台,Face++平台
通过提供云端 API、离线 SDK、以及面向用户的自主研发产品形式,将人脸识别
技术广泛应用到互联网及移动应用场景中。Face++的 API 功能更加全面,人脸识
别精度也要高于 Opencv。
5.MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于
Oracle 旗下公司。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化
语言。Mysql 是轻量级的数据库,支持远程连接,为制作客户端提供了方便。
6. JDBC(Java Data Base Connectivity,java 数据库连接)是一种用于执
行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java
语言编写的类和接口组成,可以用 JDBC 实现与树莓派中的 mysql 远程连接。采
取先在 eclipse 上建立 java 工程,调试核心代码,再移植到 android studio 中
的 android 工程中,在 android studio 中写好 app,直接用手机调试(用模拟器
PC 可能会卡),并生成 apk 放在手机上作为客户端。
二.相关硬件
1、树莓派主板:程序运行的平台
2、USB 摄像头:实现图像的采集
3、其他模块:电脑、网线(用于平时调试),360 随身 wifi 模块(用于平时调
试与最终演示)
三.相关软件(下载到树莓派中)
1、Raspbian 系统
Raspbian 系统是基于 Debian 系统的 Raspberry Pi 的硬件优化的免费操作系
统。广义的 Debian 是指一个致力于创建自由操作系统的合作组织及其作品,而
Raspbian 操作系统是一套基本的能使树莓派运行的程序和设备。Raspbian 不仅
仅是一个单纯的操作系统,它包涵了 35000 种适当格式的工具包、预编译软件,
而这些都是能够非常容易地安装在树莓派上的 。
2、抓图软件 fswebcam
实现 USB 摄像头拍照功能
3、Python 图像处理库、python-imaging、python-imaging-tk
4、opencv
Python 的视觉库
5、face++的 Python SDK 包
SDK 包中包括通过网络调用 face++的 API 所必须的一些工具。
四.实践流程
1.树莓派基本操作和必要环境搭建
包括下载好所需系统镜像并烧入 microSD 中、树莓派上网的实现、360 随身
wifi 模块插入树莓派后相关的配置、登陆工具 putty 的下载、vncserver 安装、
下载 sftp 工具用来传输数据。
2.基于 face++的人脸识别与比较并控制继电器开关
(1)用 putty 登录树莓派进入命令行界面,插入 usb 摄像头,输入指令 lsusb
查看是否被树莓派识别(一般不需要,最新系统自动驱动 usb 摄像头)。
(2)用命令行安装 fswebcamsudo
apt-get install fswebcam#安装 fswebcam
sudo fswebcam -d /dev/video0 -r 352x288 /home/pi/0.jpg#拍照尝试一
下
(3)用命令行安装 python 相关库
sudo apt-get install libjpeg8-dev zlib1g-dev libfreetype6-dev#安
装 PIL 依赖包
sudo apt-get install python-imaging#安装 python-imaging
sudo apt-get install python-imaging-tk#安装 python-imaging-tk
(4)进入 face++官网,注册 face++账号,在如下图所示界面下载对应 Python
的 sdk 包到 PC 端,再用文件传输工具传入树莓派中
(5)建立一个新应用,将账号的 API_KEY 和应用的 API_SECRET 写入下载好
的 SDK 中的 apikey.cfg 文件和 call.py 文件中,用命令行运行 call.py 文件,
体验人脸识别,并研究 putty 界面所可能显示的 python 捕获异常的信息,尝试
进行程序的调试。
(6)仔细研究 face++的 API 文档,最终选定 Detect API 与 Compare API(如
下图所示)实现所需功能。
(7)拍摄拥有开门权限者的照片并放入树莓派本地,编写程序完成系统的
核心功能人脸识别与比较(见附录程序 1),并对拍照图片进行处理。(在对比开
门者照片与权限者照片时所用到的是 Compare API 返回值之一的“比对结果置信
度”confidence,前者的 confidence 为 94.795,后者的 confidence 为 56.607,
所以将判断的阀值定为 70。)
(8)将继电器的正、负、in 端分别接树莓派 GPIO 的 5V 引脚、地引脚与 11
引脚,在程序中导入 python 的 GPIO 库,写入简单的 GPIO 引脚高低电平控制程
序,观察继电器的状态。
import RPi.GPIO as GPIO#导入库
GPIO.setmode(GPIO.BOARD) #配置 IO 口的标号方式
GPIO.setup(11, GPIO.OUT)#将 GPIO 的 11 引脚设为输出
GPIO.output(11, 1)# 让 GPIO 的 11 引脚为高电平
GPIO.output(11, 0) # 让 GPIO 的 11 引脚为低电平
3.树莓派数据库建立
用以下指令安装数据库 mysql,在安装过程中
sudo apt-get install mysql-server python-mysqldb
单独建立一个.py 文件用于数据库相关代码的测试,从建立一个数据库出
发,再到插入一条记录,调试无误后,移植进之前总的 python 程序中,实现每
识别一次人脸,与本地权限者照片比较之外,插入一条试图开门者的记录。
由于记录中需要有试图开门这一动作发生的时间,需要获取树莓派当前的
时间,首先需要树莓派每次重启都通过网络将其时间矫正为现实时间,有以下几
个步骤:
运行以下命令,启用 NTP:
sudo timedatectl set-ntp true
然后通过 date 命令来查看当前时间,如果时间不对,使用以下命令修改
本地时区 sudo dpkg-reconfigure tzdata,在“Configuring tzdata”中,依次
选择 Asia、Chongqing。
等树莓派与现实时间同步,通过 python 的 time 模块来获取时间
import time
localtime=time.strftime("%Y-%m-%d %X",time.localtime())
此时已经获取了字符串格式的当前时间 local,同样移植到总的 python
程序中。
4.自动拍照与 opencv
可以写个大循环,在循环开头进行拍照,拍照代码如下
import os
command="sudo fswebcam -d /dev/video0 -r 600*600
/home/pi/python-sdk-master/python-sdk/photo.jpeg"
但不能每次拍完照都与本地权限者照片比较一下,那样调用 face++的 API
过于频繁,一来造成累积的网络延时过大,二来正式 API 应用以调用次数收费
(试用 API 也不能无限次调用,且网络不稳定,容易出问题),因此每次拍完照
都要识别一下照片中有没有人脸,如果有人脸再调用 face++进行人脸比较。但
同样的道理也不能用 face++进行人脸识别,综上考虑,用 opencv 进行识别。
首先用下列命令下载 opencv 库
sudo apt-get install python-opencv
在 GitHub 上 找 到 opencv 软 件 包 到 PC 上 , 在 其 中 找 到
haarcascade_frontalface_alt2.xml 文件放在与总的 python 程序相同目录下,
就可以用如下代码实现基于 opencv 的人脸识别
face_cascade =
cv2.CascadeClassifier('./haarcascade_frontalface_alt2.xml')
img = cv2.imread('photo.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
faces 若返回不为(),则为识别出了人脸。
考虑到降低延时,在最终的总的 python 程序中,去掉了之前用 face++识
别人脸对想要开门者照片处理的部分。
5.将权限者修改为两人,得到最终程序(见附录程序 2)。
最终测试,从自动拍照到识别到驱动继电器,整个过程工作良好。由于用
opencv 识别人脸精度较低,需要摄像头离人脸一段距离并采光良好,但仍会偶
尔发生长时间(高于 6s,小于 12s)无法识别人脸的情况(实际上,这可能更多
是摄像头的缘故,比如用蓝色妖姬 T3200 摄像头,虽然要调焦距,拍照指令也要
在 sudo fswebcam 后加“-S 10”,但基本上没有识别不了人脸的情况)。
6.基于 JDBC 和无线热点的安卓客户端
首先要建立必要的局域网:
无线模块插在树莓派上并已进行配置,手机开热点,树莓派连接该热点,让
PC 和预备下载客户端的手机也连上同一热点。此时 PC 可通过 putty 登陆树莓派
命令行界面。当然也可让树莓派、电脑、手机连上同一 wifi(对于相同 wifi,
无线设备每次被分配的 ip 地址固定)。
然后,必须对树莓派进行配置,开启其数据库 mysql 可供远程访问的权限。
用 sudo nano /etc/mysql/my.cnf 修改/etc/mysql/my.cnf 文件
找到下面这行,并用#注释掉,
bind-address = 127.0.0.1
或者修改为 bind-address = 0.0.0.0
然后登录 mysql,输入下面命令
mysql>grant all privileges on *.* to username@"%" identified by
"password";(username 一般是 root,password 是树莓派 mysql 上 root 用户的
密码)
mysql> FLUSH PRIVILEGES;
安装防火墙 ufw
apt-get installufw
启用 ufw
ufw enable
ufw default deny
剩余25页未读,继续阅读
资源评论
森旺电子
- 粉丝: 7413
- 资源: 304
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用ASP.NET Core和Entity Framework Core来构建一个基本的进销存系统.rar
- 深度学习经典数据集+FER2013面部表情识别+附带使用方法的python代码
- Python中,要实现连接多个相机并识别多个二维码.rar
- 使用FFT算法对一个信号进行分析.rar
- 171cms游戏应用下载系统源码.zip
- 基于jsp+servlet+mysql蛋糕甜品店购物网站源码+数据库(期末大作业).zip
- Java项目:在线蛋糕商城系统(java+jsp+mysql)源码+数据库+期末大作业.zip
- ZapyaClient10_7-1.apk
- 织梦cms站长导航网站源码.zip
- 基于SSM+MySQL的网络投票调查问卷系统源码+数据库(java期末大作业).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功