旷视face++WebAPI接口调用

本文介绍如何使用旷视Face++的WebAPI实现从人脸检测到人脸识别的全过程,包括人脸检测、创建人脸集合、添加人脸标识及人脸搜索等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前阵子试用旷视face++,调用的是WebAPI,因为官方给出的代码示例太过复杂,所以进行了一下改写,主要实现了人脸检测到人脸识别的功能。

1.人脸识别detect-API

我这里调用opencv的库来获取本机上的摄像头。

    def detect_face( key,secret):
    '''
    key,secret:face++控制台上自己注册
    '''
    	#人脸检测api的url
        http_url = "https://api-cn.faceplusplus.com/facepp/v3/detect"
        #return_attributes是要返回的具体属性,我的是头部姿势,模糊,人眼状态,脸部质量,嘴部状态,人眼角度
        data = {"api_key": key, "api_secret": secret,
                'return_attributes': 'headpose,blur,eyestatus,facequality,mouthstatus,eyegaze'}
        try:
        	#获取本机摄像头,一般情况下是0,有多个摄像头也有可能是其他数字
            cap = cv2.VideoCapture(0)
        except Exception as e:
            print(e,"获取摄像头画面出错")
            return
        post_num=0
        while True:
            ret, frame = cap.read()
            # 写入摄像头捕捉的画面
            cv2.imwrite("./imgResource/segment.jpg", frame)

            files = {"image_file": open('./imgResource/segment.jpg', "rb")}

            # 发送请求
            response = requests.post(http_url, data=data, files=files)
            da = json.loads(response.text)
            if da['faces']:
                if pic_standard(da) == 1:
                    # 裁剪,获取脸部图片
                    face_token=da['faces'][0]['face_token']
                    face_rectangle = da['faces'][0]['face_rectangle']
                    img = cv2.imread(filepath1, 1)
                    y1 = face_rectangle['top'] + face_rectangle['height']
                    y0 = face_rectangle['top']
                    x0 = face_rectangle['left']
                    x1 = face_rectangle['width'] + face_rectangle['left']
                    dst = img[y0:y1, x0:x1]
                    cv2.imwrite("./imgResource/details.jpg", dst)
                    cv2.imshow("capture", dst)
                    # 图像采集成功
                    return face_token
                else:
                    print(pic_standard(da))
            if cv2.waitKey(25) == 27:  # 返回键码,esc键退出
                        break


        cv2.destroyAllWindows()

2.Faceset create API

创建一个人脸的集合 FaceSet,用于存储人脸标识 face_token。一个 FaceSet 能够存储10000个 face_token。

试用API Key可以创建1000个FaceSet,正式API Key可以创建10000个FaceSet。

    def create_faceset(key,secret,outer_id):
        '''
        创建一个人脸的集合 FaceSet,用于存储人脸标识 face_token。一个 FaceSet 能够存储10000个 face_token。
        '''

        http_url = "https://api-cn.faceplusplus.com/facepp/v3/faceset/create"
        data = {"api_key": key, "api_secret": secret,
                'outer_id': str(outer_id)}
        # 发送请求
        response = requests.post(http_url, data=data)
        da = json.loads(response.text)

        
        return da

3.Faceset Addface API

为一个已经创建的 FaceSet 添加人脸标识 face_token。一个 FaceSet 最多存储1,000个 face_token。

    def add_faceToset(self,face_token):
        '''
        为一个已经创建的 FaceSet 添加人脸标识 face_token。一个 FaceSet 最多存储1,000个 face_token。
        :return:
        '''

        http_url = "https://api-cn.faceplusplus.com/facepp/v3/faceset/addface"
        data = {"api_key": key, "api_secret": secret,
                'outer_id': str(outer_id),"face_tokens":face_token}
        # 发送请求
        response = requests.post(http_url, data=data, files=files)
        da = json.loads(response.text)
     
        return  da

4.人脸识别Search API

在一个已有的 FaceSet 中找出与目标人脸最相似的一张或多张人脸,返回置信度和不同误识率下的阈值。
支持传入图片或 face_token 进行人脸搜索。使用图片进行搜索时会选取图片中检测到人脸尺寸最大的一个人脸。

    def search_face(face_token,num_id):
        '''
        在一个已有的 FaceSet 中找出与目标人脸最相似的一张或多张人脸,返回置信度和不同误识率下的阈值。
        这个例子是循环所有的Faceset,寻找目标
        param face_token:
        num_id:face_token的总数
        '''
        http_url = "https://api-cn.faceplusplus.com/facepp/v3/search"
        num_outer = num_id // 10000 + 1
        for i in range(1,num_outer+1):
            data = {"api_key": key, "api_secret": secret,
                    'outer_id':i,"face_token":face_token}
            # 发送请求
            response = requests.post(http_url, data=data)
            da = json.loads(response.text)

            if 'results' in da:
                return da['results']
            else:
            	return "未检测到人脸"

总结

face++的试用版可以用来测试效果,如需实际部署可以再联系旷视商务定制服务。我测试的效果还是可以的,离线的sdk官网只提供了人脸关键点和身份证信息,其他如想试用也需要申请。但是效果和web api的效果是一样的,只不过可能因为网络等因素会慢一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值