精华内容
下载资源
问答
  • 在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口...

    在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口数据给Arduino的HC-05模块,让Arduino控制舵机开门。

    准备

    设备材料
    • 树莓派3b

    • Arduino UNO R3

    • HC-05

    • 舵机SG90

    • 杜邦线若干

    连接图

    d619738b98dcf85f092f5dde1d4dfd67.png

    一、树莓派发送的蓝牙串口数据

    树莓派自带蓝牙功能,我们可以调用系统指令发送蓝牙信号, 创建一个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()

    二、Arduino连接方式

    2.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,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。

    2.2 Arduino与舵机模块的连接

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

    黄色:DATA

    舵机SG90===Arduino

    • DATA<==>D9

    • VCC<==>5v

    + GND<==>GND

    三、Arduino控制代码

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

    #include

    Servo myservo;

    int pos = 0;

    void setup()

    {

    Serial.begin(9600);

    myservo.attach(9);

    myservo.write(0);

    delay(10000);

    }

    void loop()

    {

    while(Serial.available()) //读取HC-05接收到的字符串

    { 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();

    break;

    default:servo_init();

    }

    }

    }

    void servo_init() //舵机初始化

    {

    myservo.write(0);

    delay(1000);

    }

    void open_the_door() //舵机开门

    {

    for (pos = 0; pos <= 180; pos += 1) {

    myservo.write(pos);

    delay(5);

    }

    }

    void close_the_door() //舵机关门

    {

    for (pos = 180; pos >= 0; pos -= 1) {

    myservo.write(pos);

    delay(5);

    }

    }

    四、树莓派控制代码

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

    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 == 'yusheng_01':

    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)

    if name == "tanwenjie":

    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 -1

    else:

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

    return 0

    #主函数

    if __name__ == '__main__':

    while True:

    print('准备')

    servo_init()

    if True:

    getimage()#拍照

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

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

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

    bt_open()

    print("欢迎你,门已开")

    elif(res == -1):

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

    bt_close()

    else:

    print("关门")

    bt_close()

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

    time.sleep(3)

    总结

    至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门,智能门禁系统就做好啦!

    展开全文
  • 树莓派人脸识别树莓派人脸识别
  • 2020-3-16 之前舵机开门关门逻辑有点混乱,不合乎常理,现对树莓派人脸识别代码进行修改,以及Arduino控制代码有所调整;在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境...

    2020-3-16 之前舵机开门关门逻辑有点混乱,不合乎常理,现对树莓派人脸识别代码进行修改,以及Arduino控制代码有所调整;


    在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口数据给Arduino的HC-05模块,让Arduino控制舵机开门。

    准备

    设备材料

    • 树莓派3b
    • Arduino UNO R3
    • HC-05
    • 舵机SG90(或者MG995)
    • 杜邦线若干

    连接图

    3ba4790c351a4634711161a78ff655b5.png

    一、树莓派端配置

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

    1.1安装树莓派蓝牙模块pybluez

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

    sudo apt-get install libbluetooth-dev  //安装蓝牙开发库python3 -m pip install pybluez    //安装pybluez

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

    打开树莓派桌面端,点击蓝牙图标后点击add device

    54aed16f18e982391e59824d765dcdbb.png

    选择HC-05模块,配对密码是1234;

    540e81217f880ead9ea177897014f8b3.png

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

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

    创建一个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()  

    二、Arduino连接方式

    2.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,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。

    2.2 Arduino与舵机模块的连接

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

    黄色:DATA

    舵机SG90===Arduino

    • DATA<==>D9
    • VCC<==>5v
    • GND<==>GND

    三、Arduino控制代码

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

    #include Servo myservo;  void setup() {  mySerial.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);}

    四、树莓派控制代码

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

    # 2020-3-16修正版本from aip import AipFacefrom picamera import PiCameraimport urllib.requestimport RPi.GPIO as GPIOimport base64import timeimport bluetoothfrom 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)+'')        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重新配对一下,再运行一下就好了。

    最后

    至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门,智能门禁系统就做好啦!


    有遇到什么问题,可以直接私信我^-^


    展开全文
  • 2020-3-16 之前舵机开门关门逻辑有点混乱,不太合乎常理,现对树莓派人脸识别代码进行修改,以及对Arduino控制代码有所调整;在上一篇文章中小雨:树莓派调用百度人脸识别API实现人脸识别​zhuanlan.zhihu.com我们...

    271f2f441fe67827ceb162837947a3a9.png

    2020-3-16 之前舵机开门关门逻辑有点混乱,不太合乎常理,现对树莓派人脸识别代码进行修改,以及对Arduino控制代码有所调整;


    在上一篇文章中

    小雨:树莓派调用百度人脸识别API实现人脸识别zhuanlan.zhihu.com
    9771ae27940f1b4840d63b562c0d4051.png

    我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口数据给Arduino的HC-05模块,让Arduino控制舵机开门。

    准备

    设备材料

    • 树莓派3b
    • Arduino UNO R3
    • HC-05
    • 舵机SG90(或者MG995)
    • 杜邦线若干

    连接图

    443acfc09cbee0f1e4eee1380ed8a376.png

    一、树莓派端配置

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

    1.1 安装树莓派蓝牙模块pybluez

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

        sudo apt-get install libbluetooth-dev  //安装蓝牙开发库
        python3 -m pip install pybluez    //安装pybluez

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

    打开树莓派桌面端,点击蓝牙图标后点击add device

    e4f442da1c38f9d0a98e8780eb519404.png

    选择HC-05模块,配对密码是1234;

    92391f650631a3bb0047bfc069b6a27a.png

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

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

    创建一个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()

    二、Arduino连接方式

    2.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,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。

    2.2 Arduino与舵机模块的连接

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

    黄色:DATA

    舵机SG90===Arduino

    • DATA<==>D9
    • VCC<==>5v
    • GND<==>GND

    三、Arduino控制代码

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

        #include <Servo.h>
        Servo myservo; 
    
        void setup() {
          mySerial.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);
        }
    
    
    

    四、树莓派控制代码

    按照上一篇文章,我们的树莓派已经准备妥当了,在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重新配对一下,再运行一下就好了。

    最后

    至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门,智能门禁系统就做好啦!


    我还拍了一个演示效果的视频

    afad4283ee356c59170a25ddf1aafc4d.png
    家庭环境监测演示视频_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
    4c78de1cb4ec38b2d702039f45619318.png

    配套视频教程:

    树莓派人脸识别门禁系统快速上手系列教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
    85adc78b08875ad90b17744d6d49045a.png

    全部代码开源在GitHub上:

    源码GitHub地址github.com

    382701d8234d2609749f66905d7e1873.png

    点个赞再走?

    展开全文
  • 在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口...

    2020-3-16 之前舵机开门关门逻辑有点混乱,不合乎常理,现对树莓派人脸识别代码进行修改,以及Arduino控制代码有所调整;


    在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际应用一下,我们想树莓派人脸识别成功后,发送蓝牙串口数据给Arduino的HC-05模块,让Arduino控制舵机开门。
    ###准备
    #####设备材料

    • 树莓派3b
    • Arduino UNO R3
    • HC-05
    • 舵机SG90(或者MG995)
    • 杜邦线若干
      #####连接图
      连接图.png

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

    1.1安装树莓派蓝牙模块pybluez

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

    sudo apt-get install libbluetooth-dev  //安装蓝牙开发库
    python3 -m pip install pybluez    //安装pybluez
    
    1.2 将树莓派手动连接至HC-05

    打开树莓派桌面端,点击蓝牙图标后点击add device
    图片.png
    选择HC-05模块,配对密码是1234;
    图片.png

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

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

    创建一个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()  	
    

    ###二、Arduino连接方式
    #####2.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,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。
    #####2.2 Arduino与舵机模块的连接
    SG90 舵机导线三种颜色,含义分别是:
    棕色:GND
    红色:VCC
    黄色:DATA

    舵机SG90===Arduino

    • DATA<==>D9
    • VCC<==>5v
    • GND<==>GND

    ###三、Arduino控制代码
    创建工程烧录到Arduino开发板中即可

    #include <Servo.h>
    Servo myservo;  
    
    void setup() {
      mySerial.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);
    }
    

    ###四、树莓派控制代码
    按照上一篇文章,我们的树莓派已经准备妥当了,在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重新配对一下,再运行一下就好了。
    ###最后
    至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门,智能门禁系统就做好啦!


    我还拍了一个演示效果的视频
    效果

    视频演示效果传送门
    视频教程传送门
    源码GitHub地址
    更多内容欢迎关注我的gongzhong号:xiaoxiaoyu1926


    展开全文
  • 树莓派人脸识别

    千次阅读 2017-01-31 15:22:44
    网上很多人脸识别教程并没有haarcascades的xml文件,现在给出这个文件和人脸识别的python代码,可惜树莓派计算速度有点慢具体多慢自己试试就知道了别忘了在代码中修改xml文件路径
  • 树莓派人脸识别代码

    2018-04-22 20:50:12
    树莓派python人脸识别代码,通过树莓派命令行运行.py程序,从而识别出图片中的人脸并用框框出来
  • pi-detector, 基于 AWS Rekognition和 Pi Timolo的树莓派 人脸识别 引脚检测器基于 AWS Rekognition和 pi timolo的树莓派 人脸识别描述pi检测器与 pi timolo 一起使用,利用 AWS Rekognition来搜索生成的图像的运动...
  • 前言树莓派配置OpenCV,配置起来有点繁琐且耗时,调用百度智能云的人脸识别API是一个很好的解决方案接上摄像头的树莓派.png一、申请AppID、API Key和Secret Key1.1 创建应用在百度智能云人脸识别项目中创建应用,...
  • 配件准备:树莓派摄像头(USB或CSI)step1:在终端上运行如下代码,出现下面的界面sudo raspi-config然后按步骤选择Advanced Options:再选择Expand Filesystem :Raspberry PI “Expand Filesystem”菜单允许我们利用...
  • 树莓派搭载usb摄像头,进行人脸识别 详细的记录https://blog.csdn.net/singular_man/article/details/88890939
  • 树莓派3B × 1 面包板 × 1 12伏直流电动门 × 1 双通道5V继电器模块 × 1 直流电源适配器 × 1 12V 5A开关电源任何高于3A应该工作。必须是12V。 × 1 网络摄像头网络摄像头保证工作。 × 1 通用键盘和鼠标任何键盘...
  • # import the necessary packagesimport argparseimport datetimeimport imutilsimport timeimport cv2# construct the argument parser and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-v...
  • 基于树莓派人脸识别智能门禁

    千次阅读 2019-06-29 19:01:11
    基于树莓派人脸识别智能门锁采用树莓派开发板模块,电源模块,红外传感器感应模块,树莓派专用摄像头模块和扬声器以及12v电磁锁驱动模块,实现在线人脸识别控制 二、硬件材料: 树莓派3B(Raspberry Pi3 Model B...
  • 本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实现:一、人脸识别API的注册于人脸库管理1.1创建应用在百度智能云人脸识别项目中创建应用,1.2下载SDK创建完毕后,下载SDK文档,...
  • 一、 介绍通过将人脸收集,进行训练,将要分析的面部的捕获部分作为参数,并将返回其可能的所有者,指示其ID以及识别器对此匹配的信任程度实现人脸识别。二、实现步骤一、人脸收集首先,创建用于开发项目的目录,...
  • 2.上传人脸识别SDK文件到树莓派里 3.进入SDK目录 4.安装百度ai模块 sudo pip install baidu-aip 5 .安装已下载的SDK sudo python3 setup.py install python控制树莓派GPIO 树莓派控制代码 from aip import
  • 树莓派系统安装 标准版安装 标准系统安装步骤参见: http://www.ruanyifeng.com/blog/2017/06/raspberry-pi-tutorial.html   注: 安装系统后的sandisk可见大小就变了,想要恢复原样的话,请操作如下   1....
  • 包含XML文件
  • 一直闲置着,倒不如用它做一个简易监控,如果检测到人脸后,就拍照上传到指定地方,或发消息提醒。本内容来源于“基于树莓派的魔镜”,感兴趣的童鞋可以点击“阅读原文”观看演示视频和教程。先看效果吧:准备材料:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 720
精华内容 288
关键字:

树莓派人脸识别