创建API应用

1. 打开百度智能云

官网地址

https://cloud.baidu.com/
点击产品
在这里插入图片描述

2. 选择人工智能中的人脸识别

在这里插入图片描述
在这里插入图片描述

3. 登入或者注册百度云账号

在这里插入图片描述

4. 创建应用

登入后,点击应用列表,选择创建应用,输入应用名称及应用描述,
在这里插入图片描述
在这里插入图片描述

5. 添加人脸库

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.记录相关KEY

复制下APPID、API Key、Secret Key
在这里插入图片描述

应用创建就完成,接下来就是用代码调用API实现人脸识别

代码调用API实现人脸识别

更改自己创建应用的APPID、API Key、Secret Key,以及创建人脸数据库的用户组,就可以调用API实现人脸识别了

# 会保存拍照后的图片,然后编码为BASE64

from aip import AipFace
import urllib.request
import base64
import time
import cv2

# 百度人脸识别API账号信息
APP_ID = '******' # 应用的APP_ID
API_KEY = '************' # 应用的API_KEY
SECRET_KEY = '********' # 应用的SECRET_KEY

client = AipFace(APP_ID, API_KEY, SECRET_KEY)
IMAGE_TYPE = 'BASE64'
GROUP = '******' # 创建人脸数据库时的用户组名称

# 全局复用摄像头对象(只初始化一次,减少耗时)
cap = cv2.VideoCapture(0)
# 提前设置摄像头分辨率(平衡速度和识别效果)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)


# 优化拍照函数:复用摄像头,减少等待
def getimage():
    # 直接从已初始化的摄像头读取画面,无需重复打开
    ret, frame = cap.read()
    if not ret:
        print("摄像头读取失败")
        return False
    # 保存图片(可选:若无需本地保存,可直接编码为BASE64)
    cv2.imwrite('test.jpg', frame)
    print('拍照完成')
    return True


# 图片格式转换(转为BASE64)
def transimage():
    with open('test.jpg', 'rb') as f:
        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 and name in ['xiaohua', 'xiaoming', 'lisi']:
            print(f"欢迎{name}!")
            return 1
        else:
            print("对不起,我不认识你!")
            return 0
        
    elif result['error_msg'] == 'pic not has face':
        print('检测不到人脸')
        return 0
    
    else:
        print(f"错误:{result['error_code']} {result['error_msg']}")
        return 0


# 主函数:移除不必要的等待
if __name__ == '__main__':
    try:
        while True:
            print('准备开始识别...')
            # 拍照(复用摄像头,无额外等待)
            if not getimage():
                time.sleep(1)  # 失败时短暂等待
                continue
            # 转换格式并识别
            img = transimage()
            res = go_api(img)
            
            if res == 1:
                print("开门")
            else:
                print("关门")
            
            print('稍等1秒进入下一轮识别')  # 缩短间隔为1秒(可按需调整)
            time.sleep(1)
    finally:
        # 程序结束时释放摄像头(重要)
        cap.release()
        cv2.destroyAllWindows()

需要完整项目工程可私聊

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐