【DigiKey“智造万物,快乐不停”创意大赛】基于树莓派的智能考勤机+人脸识别和显示
[复制链接]
###############################################################
上一个贴子上最后遇到了人脸识别不准的问题,针对这个问题,经过排查发现是目标样本太少的缘故,之前在抓拍图片的时候,xiao_zhang文件夹只保存了4张图片,所以在人脸搜集的时候多保存一些抓拍到人脸的图片。这里保存50张图片。
然后再次进行训练和人脸识别,输入脚本命令:
python3 face_train.py
训练完以后开始进行识别,输入脚本命令
python3 face_recogn.py
此时再去识别,可以看到识别成功率已经大大提高了。
################################################
当人脸识别完以后需要在显示屏上显示出来,翻找半天,找到一个0.96寸IIC接口的OLED显示屏,于是就用这个显示识别到的人脸信息。
首先,先查找树莓派的40pin引脚的接口信息,所以输入命令:
pinout
可以看到,终端显示的引脚信息,再结合已经有的引脚图,找到IIC的引脚好,这里使用的是IIC0,
所以接线:
OLED屏 树莓派
VDD——>3.3V
GND——>GND
SDA——>SDA.1
SCK——>SCK.1
接好线以后,我们打开树莓派对IIC的支持,输入命令:
sudo raspi-config
然后选择:
打开IIC的支持以后,需要查看一下树莓派是否识别到OLED设备,输入命令:
sudo i2cdetect -y 1
可以发现,树莓派已经可以识别到IIC接口的OLED屏了,
但是这里有个问题,从引脚图看,树莓派引脚有两个IIC接口,一个是IIC0(SDA.0,SCL.0),另一个是IIC1(SDA.1,SCL.1)。不知道为何,连接SDA.0和SCL.0时树莓派检测不到IIC器件,但是连接SDA,1和SCL.1时就可以,这个问题回头再好好研究一下。
#####################
当树莓派可以检测到IIC接口屏幕时,这里先安装一个GPIO库,方便后续开发,键入命令:
sudo apt-get install wiringpi
可以看到当前系统已经自带了wiringpi库,所以查看一下GPIO库的版本,输入:
gpio –v
可以看到
先测试一个GPIO输出高低电平,使用一个LED灯,输出高低电平叫LED亮灭。
新建文件夹 led_test,键入命令:
mkdir led_test
cd led_test
然后新建 led_test.c,键入命令
vim led_test.c
输入以下代码:
#include <stdio.h>
#include <wiringPi.h>
int main(void)
{
int LED = 0;
wiringPiSetup();
pinMode(LED, OUTPUT); // 在wiringPi编号格式中,GPIO0编号为0
printf("LED is blinking...\r\n");
while(1)
{
printf("LED:%d is on \r\n", LED);
digitalWrite(LED, HIGH);delay(1000);
printf("LED:%d is off \r\n", LED);
digitalWrite(LED, LOW);delay(1000);
}
return 0;
}
这段代码叫树莓派GPIO.0输出高低电平使led亮灭。
然后编译这段代码,键入命令
gcc -o led_test led_test.c –lwiringPi
使用命令 ls ,可以看到多个一个可执行文件led_test
使用命令,运行上述代码
./led_test
可以看到终端输出,
到此树莓派GPIO基本操作结束,下面来对IIC接口屏幕进行操作。
############################
安装Adafruit-SSD1306 库,使用命令:
sudo pip3 install Adafruit-SSD1306
安装成功,
切换路径到Downloads
cd
cd Dowmloads
然后开始下载Adafruit-SSD1306库的示例代码,使用命令:
使用ls ,可以看到下载完毕
然后进行安装,使用命令:
cd Adafruit_Python_SSD1306/
sudo python3 setup.py install
可以看到,
使用命令ls查看当前文件夹内容,然后切换到例程文件夹
ls
cd examples/
先随便找个示例运行一下,键入命令:
sudo python3 stats.py
提示缺少'Adafruit_BBIO'库,所以安装一下,使用命令
sudo pip3 install Adafruit_BBIO
再次运行stats.py,
python3 stats.py
可以看到OLED屏显示的IP、CPU负载、内存使用量、硬盘使用量等信息。
感觉有点不太对,显示的文字有变形,所以查看源码,
vim stats.py
发现
库使用的是128*32的器件,所以把128*32屏蔽掉,打开128*64的
然后重新运行:
python3 stats.py
此时运行正常。
如果出现下图,则说明OLED和树莓派接线有问题,检查接线。
至此,OLED显示的基础工作以及完成,后面就是修改人脸识别代码,在屏幕上显示相关信息。
#################################################
接下来就是将人脸识别的结果使用oled屏显示出来,首先将face_recogn.py复制一份命名为face_recogn1.py,然后将stats,py 的OLED初始化文件复制到face_recogn1.py中,同时导入OLED的库:
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import ImageDraw
from PIL import ImageFont
然后在人脸识别结果中加入以下代码:
draw.rectangle((0,0,width,height),outline = 0,fill = 0)##清屏
disp.display()··##更新OLED数据
draw.text((0, top),str(id_), font=font, fill=255)
draw.text((0,top+16),str(name),font=font,fill=255)
disp.image(image1)
disp.display()
当人脸识别完成以后,在OLED的第一行显示人脸ID,第二行显示检测到的人脸名称。输入命令:
python3 face_recogn1.py
可以看到终端显示:
OLED屏显示为:
放上范迪赛的照片
此时OELD屏显示:
###############
至此,人脸识别和显示的基础功能进行完毕,后续内容将继续更新,不过可能会搁置一段时间,哈哈。
代码和训练的照片见附件。
|