精华内容
下载资源
问答
  • 前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善。本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实现:...

    前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善。

    本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实现:7226e251a1b15f7d0c41e657d1692068.png

    一、人脸识别API的注册于人脸库管理

    1.1创建应用

    在百度智能云人脸识别项目中创建应用,7adf12a0544d3c1118ae0f0a4a81337b.png

    1.2下载SDK

    创建完毕后,下载SDK文档,因为是在树莓派中运行,所以选中python HTTP SDK下载到本地。8db99778753475b5903448f53a8f9f46.png

    1.3 记录AppID

    查看应用详情,记录下AppID、API Key和Secret Key,在后面的代码中会用到。61a0be3d5a38c42f66c23a339dd5abf2.png

    1.4 在人脸库管理中添加人脸数据

    在人脸库管理中新建用户组,再从用户组中新建人脸id和照片;e5df6760bdd12b135e1640f2b35e027c.pngc5c29315d1a4cf53ca8cc111b92ab36e.png

    二、树莓派本地环境搭建

    2.1 sdk传输至树莓派上

    把下载好的SDK压缩包解压,可以通过ftp或者smb的方式, 如何使用smb,请见我的另一篇文章树莓派安装Samba服务把文件传输到到树莓派你想放的目录下,然后cd进入该目录;

    2.2 安装pip以及setuptools

    如果你的树莓派以及安装好了这两款软件,直接跳至2.3,如果还没,可以按一下步骤安装这两款重要的软件;

    2.2.1 安装setuptools

    到官网(https://pypi.org/project/setuptools/) a)下载 setuptools 安装包

    wget https://files.pythonhosted.org/packages/37/1b/b25507861991beeade31473868463dad0e58b1978c209de27384ae541b0b/setuptools-40.6.3.zip

    b)解压缩

    unzip setuptools-40.6.3.zip

    c)安装

    cd setuptools-40.6.3

    sudo python setup.py build

    sudo python setup.py install

    2.2.2 安装pip

    a)下载 到官网(https://pypi.org/project/pip/)下载pip安装包

    wget https://files.pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz

    2)解压

    tar zxvf pip-18.0.tar.gz

    3)安装

    cd ../pip-18.0/

    sudo python3 setup.py install

    2.3 安装人脸识别SDK

    当你的树莓派装好pip以及setuptools之后,进入到树莓派的SDK目录下,执行一下命令:

    sudo pip install baidu-aip //安装百度AI模块

    显示如下界面百度AI模块就成功了:a75586cfe523d0ee35aabd47a6c91e1a.png再继续安装当前的API,

    sudo python3 setup.py install

    2.4 测试人脸识别是否成功

    以上我们就把树莓派的人脸识别基础环境配置好了,现在我们测试一下系统是否能够正常运行 可以直接在sdk文件夹aip-python-sdk-2.2.15里创建一个测试文件test.py,

    from aip import AipFace

    from picamera import PiCamera

    import urllib.request

    import RPi.GPIO as GPIO

    import base64

    import time

    #百度人脸识别API账号信息

    APP_ID = '18333248'

    API_KEY = 'HrfpWmTASGVQTGQ2UQO29IGY'

    SECRET_KEY ='7x8m9vuKWH5XeVV8GeLkly8OkqUpzfPz'

    client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云

    #图像编码方式

    IMAGE_TYPE='BASE64'

    camera = PiCamera()#定义一个摄像头对象

    #用户组

    GROUP = 'yusheng01'

    #照相函数

    def getimage():

    camera.resolution = (1024,768)#摄像界面为1024*768

    camera.start_preview()#开始摄像

    time.sleep(2)

    camera.capture('faceimage.jpg')#拍照并保存

    time.sleep(2)

    #对图片的格式进行转换

    def transimage():

    f = open('faceimage.jpg','rb')

    img = base64.b64encode(f.read())

    return img

    #上传到百度api进行人脸检测

    def go_api(image):

    result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸

    if result['error_msg'] == 'SUCCESS':#如果成功了

    name = result['result']['user_list'][0]['user_id']#获取名字

    score = result['result']['user_list'][0]['score']#获取相似度

    if score > 80:#如果相似度大于80

    if name == 'yusheng_02':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == 'xiaoming':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == "xiaoyu":

    print("欢迎%s !" % name)

    else:

    print("对不起,我不认识你!")

    name = 'Unknow'

    return 0

    curren_time = time.asctime(time.localtime(time.time()))#获取当前时间

    #将人员出入的记录保存到Log.txt中

    f = open('Log.txt','a')

    f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')

    f.close()

    return 1

    if result['error_msg'] == 'pic not has face':

    print('检测不到人脸')

    time.sleep(2)

    return 0

    else:

    print(result['error_code']+' ' + result['error_code'])

    return 0

    #主函数

    if __name__ == '__main__':

    while True:

    print('准备')

    if True:

    getimage()#拍照

    img = transimage()#转换照片格式

    res = go_api(img)#将转换了格式的图片上传到百度云

    if(res == 1):#是人脸库中的人

    print("开门")

    else:

    print("关门")

    print('稍等三秒进入下一个')

    time.sleep(3)

    当你把py文件保存到树莓派中,ddbd8c3801411ffdd017276845548678.png可直接通过Tonny打开它,而且可以直接运行该程序,ba5033c7fd48d2585c4a0427c447792b.png通过控制台打印输出,我们模拟了真实情况,已经可以知道现在树莓派的人脸识别已经能正常工作了。

    三、Arduino蓝牙舵机控制程序

    3.1 硬件准备
    • 树莓派3b

    • Arduino UNO R3

    • HC-05

    • 舵机SG90

    • 杜邦线若干

    6013283118ddde6cab14e0209347ec71.png

    3.2 连接图

    3c5f73eba743bbd04ca51983f5231f09.png

    3.3 树莓派端配置

    树莓派自带蓝牙功能,我们可以调用系统指令发送蓝牙信号,

    3.3.1 安装树莓派蓝牙模块pybluez

    安装完成后再继续下一步操作;若想让树莓派使用bluetooth,必须给树莓派安装pybluez模块

    sudo apt-get install libbluetooth-dev //安装蓝牙开发库

    python3 -m pip install pybluez //安装pybluez

    3.3.2 将树莓派手动连接至HC-05

    打开树莓派桌面端,点击蓝牙图标后点击add device,鼠标在选择模块的时候,后面会有该模块的蓝牙地址,我们需要把它记下来,后面的蓝牙控制代码中需要用到。7a8950764b147e5701127e52d1c7085b.png选择HC-05模块,配对密码是1234;9c0b091eedb9952202eab834dcb7a720.png

    配对成功后,后面程序就可以直接运行了

    3.4 定义树莓派蓝牙控制功能

    创建一个bluetooth_test.py文件,分别定义初始化指令、开门指令、关门指令,分别发送字符串’1‘,’2’,‘3’;

    import bluetooth

    def servo_init():#初始化指令

    bd_addr = "20:16:08:08:39:75" #arduino连接的蓝牙模块的地址

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port)) #创建连接

    sock.send("1") #发送数据

    sock.close() #关闭连接

    def bt_open():#开门指令

    bd_addr = "20:16:08:08:39:75"

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port))

    sock.send("2")

    sock.close()

    def bt_close():#关门指令

    bd_addr = "20:16:08:08:39:75"

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port))

    sock.send("3")

    sock.close()

    3.5 Arduino连接方式
    3.5.1 Arduino与HC-05蓝牙模块的连接

     由于我们用的是Arduino UNO R3没有蓝牙模块,要接收蓝牙数据,可以通过外接HC-05蓝牙模块解决。


    HC-05===Arduino

    • RXD<==>TX

    • TXD<==>RX

    • VCC<==>5v

    • GND<==>GND

    注意:HC-05的vcc一定要接5v,如果接3.3v,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。

    3.5.2 Arduino与舵机模块的连接

    SG90 舵机导线三种颜色,含义分别是:

    棕色:GND

     红色:VCC

    黄色:DATA

    舵机与Arduino的连接方式:

    舵机SG90===Arduino

    • DATA<==>D9

    • VCC<==>5v

    • GND<==>GND

    3.6 Arduino控制代码

    创建工程烧录到Arduino开发板中即可

    #include

    Servo myservo;

    void setup() {

    Serial.begin(9600); //监听软串口

    myservo.attach(9); //舵机控制

    myservo.write(0);

    // delay(10000);

    }

    void loop() {

    while(Serial.available())

    {

    char c;

    c = Serial.read(); //读取串口数据

    Serial.println(c);

    switch(c)

    {

    case '1':servo_init();

    break;

    case '2':open_the_door();

    break;

    case '3':close_the_door();

    }

    }

    }

    void open_the_door() //舵机开门

    {

    myservo.write(170);

    }

    void close_the_door() //舵机关门

    {

    myservo.write(0);

    }

    void servo_init() //舵机初始化

    {

    myservo.write(10);

    }

    3.7 树莓派控制代码

    我们的树莓派已经准备妥当了,在test.py的基础上,我们再修改一下:

    # 2020-3-16修正版本

    from aip import AipFace

    from picamera import PiCamera

    import urllib.request

    import RPi.GPIO as GPIO

    import base64

    import time

    import bluetooth

    from bluetooth_test import bt_open,servo_init,bt_close

    #百度人脸识别API账号信息

    APP_ID = '18332624'

    API_KEY = '2QoqxCzAsZGT9k5CMeaIlPBs'

    SECRET_KEY ='9wOlqd4sPvLc7ZKtLxMlBVkcikXHZ4rz'

    client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云

    #图像编码方式

    IMAGE_TYPE='BASE64'

    camera = PiCamera()#定义一个摄像头对象

    #用户组

    GROUP = 'yusheng01'

    #照相函数

    def getimage():

    camera.resolution = (1024,768)#摄像界面为1024*768

    camera.start_preview()#开始摄像

    time.sleep(2)

    camera.capture('faceimage.jpg')#拍照并保存

    time.sleep(2)

    #对图片的格式进行转换

    def transimage():

    f = open('faceimage.jpg','rb')

    img = base64.b64encode(f.read())

    return img

    #上传到百度api进行人脸检测

    def go_api(image):

    result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸

    if result['error_msg'] == 'SUCCESS':#如果成功了

    name = result['result']['user_list'][0]['user_id']#获取名字

    score = result['result']['user_list'][0]['score']#获取相似度

    if score > 80:#如果相似度大于80

    if name == 'yin_danli':

    print("欢迎%s !" % name)

    time.sleep(1)

    if name == 'danli':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == "yusheng_02":

    print("欢迎%s !" % name)

    time.sleep(3)

    else:

    print("对不起,我不认识你!")

    name = 'Unknow'

    return 0

    curren_time = time.asctime(time.localtime(time.time()))#获取当前时间

    #将人员出入的记录保存到Log.txt中

    f = open('Log.txt','a')

    f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')

    f.close()

    return 1

    if result['error_msg'] == 'pic not has face':

    print('检测不到人脸')

    time.sleep(3)

    return -1

    else:

    print(result['error_code']+' ' + result['error_code'])

    return 0

    #主函数

    if __name__ == '__main__':

    servo_init() #舵机复位,初始化一次就够了

    while True:

    print('准备开始,请面向摄像头 ^_^')

    if True:

    getimage()#拍照

    img = transimage() #转换照片格式

    res = go_api(img) #将转换了格式的图片上传到百度云

    if(res == 1): #是人脸库中的人

    bt_open()

    print("欢迎回家,门已打开")

    elif(res == -1):

    print("我没有看见你,我要关门了")

    time.sleep(3)

    bt_close()

    else:

    print("关门")

    bt_close()

    time.sleep(3)

    print('好了')

    time.sleep(5)


    注意:

    运行程序后,如果报错


    bluetooth.btcommon.BluetoothError: [Errno 112] Host is down

    你则需要回到桌面端,将树莓派与HC-05重新配对一下,再运行一下就好了。至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门。至此 ,智能门禁系统就做好啦!


    配套视频教程:

    8017de512256c0cd924344ca6ca89850.png

    d17ca0c410249baed32acc0c76ecec7f.png

    d63e4e0d22e214ded802f3d909bf816d.png

    ec9a1fc38861a5ffc012877164511055.gif

    展开全文
  • 项目中使用的硬件与软件树莓派3B×1面包板×112伏直流电动门×1双通道5V继电器模块×1直流电源适配器×112V 5A开关电源任何高于3A应该工作。必须是12V。×1网络摄像头网络摄像头保证工作。×1通用键盘和鼠标任何键盘...


    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    项目中使用的硬件与软件

    树莓派3B×1
    面包板×1
    12伏直流电动门×1
    双通道5V继电器模块×1
    直流电源适配器×1
    12V 5A开关电源任何高于3A应该工作。必须是12V。×1
    网络摄像头网络摄像头保证工作。×1
    通用键盘和鼠标任何键盘和鼠标都可以。×1
    通用扬声器由于面部识别门使用音频反馈,因此可以将一对扬声器连接到Raspberry Pi。×1
    Microsoft Visual Studio 2017

    微软Azure

    Microsoft Windows 10 IoT核心

    家庭安全系统是制造商日益增长的项目领域。自建系统不仅比庞大的专业安装便宜,而且还可以完全控制和定制,以满足您的需求。随着微软的Oxford项目的推出,面部识别应用程序现在比以往更容易被制造商所接受。这个项目利用树莓派,基本的网络摄像头和互联网连接来创建一个通过面部识别自动解锁的门。如果门口的访客被识别,门就会解锁!

    1. 根据这些说明设置PC和Raspberry Pi 3 。

    2. 接下来,按下图所示连接门铃和电源继电器。功率继电器将用于锁定和解锁门。

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    3. 现在将相同的电源继电器连接到锁上,或电动门打开,如下所示。

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    3/3

    4. 将USB摄像头,键盘和鼠标插入Raspberry Pi 3。

    软件设置

    1. 使用命令提示符导航到您想要项目的文件夹:

    2. 下载项目:

    git clone https://github.com/ms-iot/Facial-Recognition-Door.git

    3. 使用Visual Studio 2017 ,在刚下载的FacialRecognitionDoor文件夹中打开FacialRecognitionDoor.sln解决方案文件。

    4. 在右侧面板的“FacialRecognitionDoor”项目下,导航到Constants.cs文件。你应该在顶部看到一个名为“一般常量”的部分。你需要做的第一件事就是输入你的牛津API密钥。按照这里的说明获取您的钥匙。

    5. 用你的新密钥替换OXFORD_KEY_HERE:

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    6. 仅用于MINNOWBOARD MAX:将DisableLiveCameraFeed变量从true 切换到false:

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    7. 在Visual Studio的顶部菜单上,如果您使用的是Raspberry Pi,请选择Debug和ARM。如果您正在使用MBM,请选择“调试”和“x86”。

    9.按遥控器。在“远程连接”对话框中,您需要输入远程机器IP地址,并使用“通用(未加密协议)”进行认证模式。

    使用WindowsIoTCoreWatcher查找您的IP地址。

    有关如何在Windows IoT设备上部署应用程序的更多信息,请参阅此文档。

    10. 你现在可以运行代码!按绿色的“播放”箭头按遥控器按钮。

    软件使用

    当你第一次运行项目时,这是你应该看到的屏幕。在MBM上,您可以在软件设置的第6步中将DisableLiveCameraFeed变量设置为false,而不是看到相机图标,您将看到相机正在看到的实时信息。

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    点击“加号”图标。

    有三个按钮位于底部的应用程序栏。第一个是“加号”图标。这用于将新用户添加到“白名单”。白名单上的任何用户本质上都标记为“朋友”,并允许用他们的脸部解锁门。现在尝试按“加号”按钮。你应该看到这个屏幕:

    树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    将您自己或朋友放在网络摄像机前面,然后按下“捕获ID照片”按钮。你应该看到你的新拍摄的自拍.

    如果您对照片满意,请输入照片中的人物名称,然后按确认。如果没有,只要按取消,然后拍另一张照片。

    按确认后,您将被发送回主页面,但您现在将在“白名单访问者”部分下看到一位用户:

    点击页面左上角那个用户的图片,导航到用户的个人资料页面:

    在此页面上,您可以使用加号图标来添加更多照片。这将改善面部识别门的整体准确性。您也可以按下垃圾箱图标以删除此用户。完成后,按主页图标。

    你现在准备打开门!将注册用户放置在网络摄像头的前面,然后按虚拟门图标(位于之前使用的加号图标旁边)或您连线的物理“门铃”按钮。您应该听到音频反馈,通知您门已经解锁!

    现在,当未登记的用户在门前时,尝试按下门铃按钮。您应该听到音频反馈,通知您门检测到一个陌生人,不会解锁!

    未翻译的原文地址:

    https://microsoft.hackster.io/en-US/windows-iot/windows-iot-facial-recognition-door-e087ce?ref=channel&ref_id=4087_trending___&offset=6树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

    打包源码下载路径:点击下载

    展开全文
  • 基于树莓派人脸识别门禁系统设计与实现_马帅.caj
  • 基于树莓派人脸识别门禁系统

    万次阅读 多人点赞 2019-05-05 09:38:44
    某宝准备一块相对性能好的树莓派,我自己用的是树莓派3B+。 购置一个配套电源 购置一个SD卡,因为你需要安装系统、配置环境。这里特别强调配置环境是一个让人特别头大的事情。如果你想无压力的话你可以购买64G,...

    这是近期以来完成的第二个项目,第一个项目是基于STM32的智能窗帘控制系统(语音控制、温湿度控制、蓝牙APP控制、光敏控制)第一个项目也会在后续进行一个赘述。

    1. 前期准备:

    某宝准备一块相对性能好的树莓派,我自己用的是树莓派3B+。

    购置一个配套电源

    购置一个SD卡,因为你需要安装系统、配置环境。这里特别强调配置环境是一个让人特别头大的事情。如果你想无压力的话你可以购买64G,如果性价比的话你可以购置32G内存卡,因为树莓派是真的好玩,你完成这个项目后还可以继续玩其他的。

     

    2. 安装系统

    系统我安装的是Linux系统,这里我就不赘述了,因为网上教程一大堆。也简单

     

    3. 安装环境

    这里的话如果不是调用百度API接口实现人脸识别的话,这部分可以省略。如果是用OpenCV自己去做的话我建议你还是看看。因为就仅仅这一步安装环境我头痛了一个礼拜才安装完毕。具体安装细节请看这篇博客

    https://blog.csdn.net/qq_36588941/article/details/89839527

     

    4. 注册百度云

    由于树莓派的性能限制,我也考虑过尝试过做树莓派的视频流检测人脸,但是最终结果太不理想。最终考虑还是用树莓派摄像头拍摄一张照片然后进行人脸识别。用拍照进行识别也可以用OpenCV去做,但是我最终还是考虑用开源的人脸识别SDK来进行人脸的识别和检测,对比了国内几家的SDK(阿里云、腾讯云、Face++等等),同样注册了阿里云的应用,直接收费,Face++给了限定的测试次数,所以选择了百度AI,个人觉得百度人脸识别的效果要好一点,特别是并发数要比其他的好很多。下面介绍下百度云注册和SDK的使用方法:

    1、注册百度云(http://ai.baidu.com/

     

    创建应用

     

    获取密钥,AppID、API Key和Secret key,这三个后面的程序需要用到。

     

     

    查看相应语言的开发文档,我用的是Python语言。

     

     

    5. 上传人脸库

     

    6. 人脸识别程序

    百度云注册完成、下载完成SDK后我们就开始写程序,程序的思路很简单,通过树莓派按键中断拍摄一张照片,然后通过SDK来检测照片里面的人是谁,如果这个人在人脸库里面,打开继电器进行开门,如果不在人脸库就关门。同时我还添加了语音播报的功能,而且还能将开门信息推送到微信上,这样就可以试试的看到有谁来开门了。

    '''
    通过摄像头拍一张照片,然后识别出人是谁,进而控制门禁系统
    @author: 蓝色鲜橙多
    @date:2019年4月22日
    '''
    
    from aip import AipFace
    from picamera import PiCamera
    import urllib.request
    import RPi.GPIO as GPIO
    import base64
    import time
    import pyttsx3
    import pygame
    import cv2
    
    #百度人脸识别API账号信息
    APP_ID = '14940942'
    API_KEY = 'oj0h7ccivwL4GDbm2S5PjDV8'
    SECRET_KEY = 'flj13WxsEO4RplskdMqM3gFNTMNQeed4 '
    client = AipFace(APP_ID, API_KEY, SECRET_KEY)
    #图像编码方式
    IMAGE_TYPE='BASE64'
    #用户组信息
    GROUP = 'hua'
    camera = PiCamera()
    pygame.mixer.init()
    
    GPIO.setwarnings(False)
    
    GPIO_IN_PIN22  = 22    # 按键控制
    GPIO_OUT_PIN17 = 17    # 识别不通过 亮红灯
    GPIO_OUT_PIN4  = 4     # 识别通过   打开继电器
    GPIO_OUT_PIN24 = 24    # 识别通过   亮绿灯
    GPIO_OUT_PIN18 = 18    # 工作指示灯灯
    
    ledStatus = True
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(GPIO_IN_PIN22,GPIO.IN,pull_up_down=GPIO.PUD_UP)
    GPIO.setup(GPIO_OUT_PIN17,GPIO.OUT)
    GPIO.setup(GPIO_OUT_PIN4,GPIO.OUT)
    GPIO.setup(GPIO_OUT_PIN18,GPIO.OUT)
    GPIO.setup(GPIO_OUT_PIN24,GPIO.OUT)
    
    #定义一个摄像头对象
    def getimage():
        camera.resolution = (1024,768)
        camera.start_preview()
        time.sleep(2)
        camera.capture('faceimage.jpg')
        '''pygame.mixer.music.load('./voice/start.mp3')
        pygame.mixer.music.play()
        time.sleep(2)'''
    
    #对图片的格式进行转换
    def transimage():
        f = open('faceimage.jpg','rb')
        img = base64.b64encode(f.read())
        return img
    
    #播放声音
    def playvioce(name):
        pygame.mixer.music.load('./voice/' +name)
        pygame.mixer.music.play()
        
    
    #发送信息到微信上  
    def sendmsg(name,main):
        url = "https://sc.ftqq.com/SCU36412T61050df84b51badbd34dd7abb92d19af5bfb6b6fef05b.send?"
        urllib.request.urlopen(url + "text="+name+"&desp="+main)
    #上传到百度api进行人脸检测
    def go_api(image):
        result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP)
        if result['error_msg'] == 'SUCCESS':
            name = result['result']['user_list'][0]['user_id']
            score = result['result']['user_list'][0]['score']
            if score > 95:
                print("Welcome %s !" % name)
                if name == 'hua_1':
                    sendmsg("hua_1",name)
                    playvioce('zouminghua.mp3')
                    #time.sleep(4)
                '''if name == 'hua':
                    sendmsg("hua",name)'''
                if name == 'an_cheng':
                    sendmsg("an_cheng",name)
                    playvioce('xianancheng.mp3')
                    #time.sleep(4)
            else:
                print("Sorry...I don't know you !")
                name = 'Unknow'
                sendmsg("BadGay",name)
                playvioce('cuowushibie.mp3')
                #time.sleep(4)
                return 0
            curren_time = time.asctime(time.localtime(time.time()))
            f = open('Log.txt','a')
            f.write("Person: " + name + "     " + "Time:" + str(curren_time)+'\n')
            f.close()
            return 1
        if result['error_msg'] == 'pic not has face':
            print('There is no face in image!')
            playvioce('noface.mp3')
            #time.sleep(4)
            return 0
        else:
            print(result['error_code']+' ' + result['error_code'])
            return 0
        
    # 识别处理函数
    def manage():
        getimage()
        img = transimage()
        res = go_api(img)
        if(res == 1):
            GPIO.output(GPIO_OUT_PIN24,GPIO.HIGH)
            time.sleep(1)
            GPIO.output(GPIO_OUT_PIN24,GPIO.LOW)
            
            GPIO.output(GPIO_OUT_PIN4,GPIO.HIGH)
            time.sleep(2)
            GPIO.output(GPIO_OUT_PIN4,GPIO.LOW)
                            
        else:
            GPIO.output(GPIO_OUT_PIN17,GPIO.HIGH)
            time.sleep(1)
            GPIO.output(GPIO_OUT_PIN17,GPIO.LOW)
            print('waite 3 seconds to do next')
           
    # 按键中断函数
    def my_callback(channel):
        global ledStatus
        ledStatus = not ledStatus
        if ledStatus:
            #while True:
            manage()
                #if ledStatus == 0:
                    #break          
        else:
            pass
        pass
    
    
    # 给22引脚添加一个事件函数,触发条件是:捕获到GPIO.FALLING(下降沿)
    GPIO.add_event_detect(GPIO_IN_PIN22,GPIO.FALLING, callback = my_callback,
                          bouncetime = 150)
    
    if __name__ == '__main__':
        while True:
            try:
                GPIO.output(GPIO_OUT_PIN18,GPIO.HIGH)
                print("I'm working...")
                time.sleep(5)
                pass
            except: 
                GPIO.output(GPIO_OUT_PIN18,GPIO.LOW)
                GPIO.output(GPIO_OUT_PIN4,GPIO.LOW)
                break
                pass
            pass
        '''KeyboardInterrupt'''
    
                
                    
                    
                    
                    
                    

    7. 下面是实物照片

    这是测试时候的照片

    这是封装后的照片

    这里拍照用的picamera,是专门为树莓派定制的摄像头,淘宝可以买到。播放音乐我用的pygame的播放音乐模块,MP3文件是我自己录的音,推送微信用的是一个很好的工具server酱(http://sc.ftqq.com/3.version

    树莓派无线连接:https://blog.csdn.net/qq_36588941/article/details/89792201

    查看连接手机热点的树莓派IP地址:https://blog.csdn.net/qq_36588941/article/details/89611625

    树莓派调节音量:https://blog.csdn.net/qq_36588941/article/details/89608587

    树莓派3B+开机自启动Python程序:https://blog.csdn.net/qq_36588941/article/details/89604748

    参考:https://www.cnblogs.com/zutterhao/p/9075513.html

     

    展开全文
  • 基于树莓派人脸识别智能门禁

    千次阅读 多人点赞 2019-06-29 19:01:11
    基于树莓派人脸识别智能门锁采用树莓派开发板模块,电源模块,红外传感器感应模块,树莓派专用摄像头模块和扬声器以及12v电磁锁驱动模块,实现在线人脸识别控制 二、硬件材料: 树莓派3B(Raspberry Pi3 Model B...

    一、功能:

    • 基于树莓派的人脸识别智能门锁采用树莓派开发板模块,电源模块,红外传感器感应模块,树莓派专用摄像头模块和扬声器以及12v电磁锁驱动模块,实现在线人脸识别控制

    二、硬件材料:

    • 树莓派3B(Raspberry Pi3 Model B) 显示器或电脑,SD卡(安装树莓派官方系统),读卡器,树莓派摄像头,12v电磁锁,5v继电器,红外发射接收测距传感器,扬声器,面包板 杜邦线

    三、软件:

    • 树莓派官方Linux系统,face++ 云服务平台,python软件 python语言 浏览器

    四、实现方法:

    • 采用红外传感器感应获取外部动态,摄像头采集信息 本地终端利用API接口向face++云服务平台发送请求并对人脸分析计算给出数值返回本地处理同时将获取的图片发送到指定个人微信中,方便监视,树莓派通过GPIO引脚输入输出控制外围硬件设备实现。

    五、步骤:

    • 安装系统:1、下载官方Linux系统镜像;2、下载安装工具win32diskimager;3、运行Win32DiskImager、在软件中选择系统镜像(img文件)、然后device(设备)下选择TF卡盘符;4、连接显示器、也可远程桌面控制、给树莓派供电至系统完全装好。
    • 连接树莓派专用摄像头
    • 电器正负极连接树莓派引脚正负极(见尾页树莓派引脚图)、s接口接树莓派GPIO(16) 继电器com与12v电源随便 一根相接,no接口连接电磁锁、另一条线直接接电磁锁接口另一线;
    • 在这里插入图片描述
    • 红外传感器正负极接树莓派正负极,输出接口(out)接GPIO(12)。
    • 注册申请face++获得key与secret

    六、python代码

    import requests
    from json import JSONDecoder
    import time
    import RPi.GPIO as GPIO
    import picamera
    import pygame
    
    #------------------------------------
    
    
    GPIO.cleanup()
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(16,GPIO.OUT)
    GPIO.setup(12,GPIO.IN)
    
    
    
    faceID0 = "./photo/photo.jpeg"    #拍照图片文件路径
    
    faceID1 = "./photo/faceid1.jpeg"  #对比图片文件路径
    #faceID2 = "./photo/faceid2.jpeg"
    
    
    
    
    def 语音播报1():
        pygame.mixer.init()
        pygame.mixer.music.load('/home/pi/ai-renlian/voice/photo.mp3')  #语音播报MP3文件路径
        pygame.mixer.music.play()
        time.sleep(3)
    
    
    def 语音播报2():
        pygame.mixer.init()
        pygame.mixer.music.load('/home/pi/ai-renlian/voice/success.mp3')  #语音播报MP3文件路径
        pygame.mixer.music.play()
        time.sleep(3)
    
    
    def 语音播报3():
        pygame.mixer.init()
        pygame.mixer.music.load('/home/pi/ai-renlian/voice/fail.mp3')   #语音播报MP3文件路径
        pygame.mixer.music.play()
        time.sleep(3)
    
    
    
    
    
    def 红外感应():
        res = GPIO.input(12)
        return res
       
    
    
    def 摄像头():
         with picamera.PiCamera() as camera:
             
            #camera.start_recording("/home/pi/ai-renlian/摄像.h264")
            #camera.wait_recording(5184000)
            #camera.stop_recording()
            #camera.stop_preview()
            
            camera.resolution = (1200, 1000)
            camera.start_preview()
            time.sleep(1)
    
            camera.capture('./photo/photo.jpeg')  #设置拍摄的照片保存的路径
    
    
    
    def 人脸数据(photo,faceid1):
        compare_url = "https://api-cn.faceplusplus.com/facepp/v3/compare"   #face++申请
        key = "5Ut_EUtu3dG8Q60UBQdj8_LICgc4KByR"    #face++申请
        secret = "cWXtsKOMx62m8zHUx810MG-0oGoOnhSO"    #face++申请
        data = {"api_key": key, "api_secret": secret}
    
        files = {"image_file1": open(faceID0, "rb"), "image_file2": open(faceID1, "rb")}
    
        response = requests.post(compare_url, data=data, files=files)
        req_con = response.content.decode('utf-8')
        req_dict = JSONDecoder().decode(req_con)
    #-------------------------------异常处理-----------------------------------
        try:        
            confidence = req_dict['confidence']   #置信度,越高说明越像
        except:
            return 0
        return confidence
    #--------------------------------------------------------------------------
    
    
    def 门锁():
        GPIO.output(16,GPIO.HIGH)
        time.sleep(3)
        GPIO.output(16,GPIO.LOW)
        time.sleep(0.5)
    
    
    def run():
    
        while True:
            sensorRes = 红外感应()#传感器返回数值
            if sensorRes ==0:
                语音播报1()
                摄像头()
                #confidence =  [facePP(faceID0,faceID1),facePP(faceID0,faceID2),facePP(faceID0,faceID3)]
                confidence =  人脸数据(faceID0,faceID1)#人脸对比相似值
                #for i in confidence:
       
                if confidence>=90:    
                    语音播报2()
                    门锁()
                else:
                    语音播报3()
    run()
    
    

    七、运行调试

    • 手指接近红外避障传感器模块,语音提示“你好 欢迎光临,请对准摄像头”
    • 摄像头红灯亮一会儿关闭说明照片获取成功
    • 语音提示“识别成功门已打开”
    • 继电器发生“铁”的一声,12v电磁锁打开。
    展开全文
  • 玩转树莓派2017-07-17 18:59毕业论文基于微型计算机的人脸识别门禁系统设计1. 课题意义及目标随科技的不断发展,安全性的要求也不断提高,IC卡等传统身份识别工具已不能满足社会需求。所以从通用性、安全性、成熟性...
  • 基于树莓派人脸识别门禁系统(python+OpenCV+PyQt)

    千次阅读 多人点赞 2019-08-20 16:29:15
    硬件:树莓派3B+ 镜像系统:2019-04-08-raspbian-stretch-full.img 软件:python2.7+OpenCV3.4.0+PyQt5 HDMI显示屏:10.1寸、分辨率1280*800 注:本来搭建OpenCV环境和PyQt5的时候是按照python3.5来的,开发到...
  • 树莓派实现人脸识别打卡门禁系统的构建背景功能硬件效果源码摄像头测试代码录入信息人脸识别结论 背景 源于实习公司的人脸识别打卡系统,完成之前的项目后正好没有事情干,于是想到了这个,公司的这个打卡系统操作...
  • 目前的门禁识别系统主要有IC卡识别、指纹识别、密码锁等,人脸识别门禁尚未普及,一方面时由于其售价高昂另一方面则是其研发成本高。当前正值5G发展元年,高速数据通信促使了分布式计算以及云计算的大范围普及,使得...
  • 基于python的人脸识别门禁系统,实现对人脸的录入与识别功能 ,毕业设计 附论文 可移植树莓派
  • 使用树莓派和arduino组合形成的人脸识别门禁系统源码,两者用usb连接,舵机采用SG90,内含演示视频

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

树莓派人脸识别门禁系统