树莓派+arduino+串口屏+百度api人脸识别


树莓派+arduino+串口屏+百度api人脸识别

升级版本

人脸识别升级版


人脸识别升级版


这次对上一次的代码进行了优化,并且完成了树莓派与arduino的串口通信(包括USB串口通信)和GPIO的串口通信。最近比较忙再一个原因就是…懒,本来还录制了调试的视频,总之效果还是可以的。

其实树莓派的语音识别也已经做好了,知识没时间总结,准备做一个语音对讲,语音控制硬件。。。


百度云后台
不行,今天不适合写博客,内心极度不稳定,可能最近太忙了,就这样吧,把代码拷贝进来,等哪天好好总结总结!


代码都存储在我的GitHub里
我的树莓派也只能通过它和外机通讯…我的远程连接一直失败,暂且只能用显示屏来调试。
GitHub地址


from picamera import PiCamera
import time
import RPi.GPIO
import requests
import base64
import sys
import serial
import os

def getaccess_token():
## 获取access_token

    host='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=4fVKa7AqDYNApi6Lz8Z2ZeMv&client_secret=gRVy9GcRRGCMiU2GgT20IbbaMu7QfA8P'

    header_1 = {'Content-Type':'application/json; charset=UTF-8'}

    request=requests.post(host,headers =header_1)

    access_token=request.json()['access_token']
    print(access_token)
    return access_token


def take_picture():
 #拍摄当前图片   
    camera.start_preview()

    time.sleep(0.5)

    camera.capture('image.jpg')

    camera.stop_preview()
def open_pic():
#打开工程拍摄的图片并转换成字符串
    f = open('image.jpg', 'rb')

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

    return img

def search (img,access_token):
##    人脸搜索白度api_v3以后就叫做“人脸搜索”了
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search"
    params = {"image":img,"image_type":"BASE64","group_id_list":"wenzheng","quality_control":"LOW","liveness_control":"NORMAL"}
    request_url = request_url + "?access_token=" + access_token
    ##发送数据利用requests.post()的方法--比较简单
    response = requests.post(request_url, data=params)
    ##输出json数据
    output = response.json()
    return output
def chuli (output):
    print(output)
    print(type(output)) ##输出数据类型为-字典
    if output['error_msg'] == 'SUCCESS':
        ##判断是否成功
        ##找到字典里的result-以及内层字典里的user_list
        user_list= output['result']['user_list']
        print(user_list)
        ##输出数据类型,发现其为列表
        print(type(user_list))
        ##利用列表的检索方式找到列表里的人脸检测分数-score
        score = user_list[0]['score']
        print(score)
        ##串口发送
        ser.write(str(score).encode()) 
        #panduan(score)
        user = user_list[0]['user_info']
        time.sleep(1)
        print(user)
        ser.write(user.encode())
    else:
        print(output['error_msg'])
        print(type(output['error_msg']))
        ser.write(output['error_msg'].encode())
"""
反馈的数据:利用他来解析
可知此次的人脸对比分数为:93分
{'error_code': 0, 'error_msg': 'SUCCESS', 'timestamp': 1528009295, 'log_id': 3173075542, 'cached': 0,
'result': {'face_token': '7fd111f61fb07e034577b277c7caca3f',
'user_list': [{'user_id': 'wenzheng', 'user_info': 'pengwenzheng', 'score': 93.49373626709, 'group_id': 'wenzheng'}]}}
"""
def panduan(score): 
    if score > 80:
        #print(type(score))
        ser.write(str(score).encode())          
    else :
        ser.write(b'2')
def led():
## led
    RPi.GPIO.output(18, True)
if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyS0',115200,timeout=1)
    ser.close()
    ser.open()
    print("串口已开启")
    camera = PiCamera()
    count=0
    access_token=getaccess_token()
    while True :
        take_picture()
        img=open_pic()
        output = search(img,access_token)
        chuli(output)
        count=count+1
        print(count)
        #加入自动重启命令,防止程序运行时间过长死机
        if count == 2000 :
            os.system('sudo reboot')
            count = 0
  • 2
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值