Python appelle l'API Baidu pour la comparaison des visages

1. À propos de l'auteur

Bai Xiaohua, femme, School of Electronic Information, Xi'an Polytechnic University, étudiante diplômée de la promotion 2021
Direction de recherche : traitement d'image, détection de cible
Email : [email protected]

Wu Yanzi , femme, École d'information électronique, Université polytechnique de Xi'an, étudiante diplômée 2021, Groupe
de recherche sur l'intelligence artificielle de Zhang Hongwei Direction de la recherche : Reconnaissance de formes et intelligence artificielle
Courriel : [email protected]

2. Introduction aux connaissances Base64

2.1 Qu'est-ce que Bsae64

Base64 est l'une des méthodes de codage les plus courantes pour la transmission de bytecodes 8 bits sur Internet. Base64 est une méthode de représentation de données binaires basée sur 64 caractères imprimables.
Que sont les "caractères imprimables" ? Pourquoi l'utiliser pour transmettre un bytecode 8 bits ?
Tout d'abord, avant de répondre à ces deux questions, il est nécessaire de réfléchir à quel moment Base64 doit être utilisé. Base64 est généralement utilisé pour transmettre des données binaires sous le protocole HTTP. Le protocole HTTP étant un protocole texte, les données binaires doivent être converties en données de caractères pour transmettre des données binaires sous le protocole HTTP. La conversion directe n'est cependant pas possible, car les transmissions réseau ne peuvent transmettre que des caractères imprimables. La plage de valeurs du code ASCII est [0, 127], où [32, 126] sont des caractères imprimables et les autres sont des caractères non imprimables. C'est-à-dire que la transmission réseau ne peut transmettre que ces 95 caractères, et les caractères qui ne sont pas dans cette plage ne peuvent pas être transmis. Alors, comment d'autres caractères peuvent-ils être transmis ? Une façon consiste à utiliser Base64.

2.1 Principe d'encodage Bsae64

L'idée de l'encodage Base64 est d'utiliser 64 caractères ASCII de base pour ré-encoder les données.
1. Divisez les données à encoder en tableaux d'octets, prenez 3 octets en groupe, organisez les données 24 bits en séquence, puis divisez les données 24 bits en 4 groupes, c'est-à-dire 6 bits dans chaque groupe ;
2 Ensuite, dans Le bit le plus élevé de chaque groupe est rempli de deux 0 pour constituer un octet, de sorte qu'un groupe de données de 3 octets est réencodé en 4 octets ;
3. Lorsque le nombre d'octets des données à encoder n'est pas un entier multiple de 3, c'est-à-dire que le dernier groupe n'est pas suffisant pour 3 octets lors du regroupement. A ce moment, 1 à 2 0 octets sont remplis dans le dernier groupe, et 1 à 2 = signes sont ajoutés à la se termine une fois l'encodage final terminé. .
Cette expérience utilise principalement Base64 pour encoder l'image du visage, puis compare les fichiers encodés pour compléter la comparaison de similarité.

3. Procédure expérimentale

3.1 Processus expérimental

1. Enregistrez d'abord un compte Baidu
2. Plate-forme Baidu AI https://ai.baidu.com/, recherchez Capacités ouvertes> Détection des visages et des humains> Comparaison des visages> Utiliser maintenant> Créer une application
insérez la description de l'image ici

, cliquez sur Créer pour obtenir la clé API et la clé secrète
insérez la description de l'image ici
3. Installez les bibliothèques requises : pip install baidu-aip

3.2 Code expérimental

from urllib import request
import requests
import json
import base64

def gettoken():
    ak = '******' #获取到的API Key
    sk = '******' #获取到的Secret Key
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+ak+'&client_secret='+sk
    my_request = request.Request(host)
    my_request.add_header('Content-Type', 'application/json; charset=UTF-8')
    response = request.urlopen(my_request)
    content = response.read() #获得请求结果
    content = bytes.decode(content)#结果转化为字符
    content = eval(content[:-1])#转化为字典
    return content['access_token']
#图片转码
def to_base64(file_name1,file_name2):
    with open(file_name1,'rb')as f1:
        base64_data1 = base64.b64encode(f1.read())
        image_1 = str(base64_data1,'utf-8')
    with open(file_name2,'rb')as f2:
        base64_data2 = base64.b64encode(f2.read())
        image_2 = str(base64_data2,'utf-8')
        return image_1,image_2

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
image_1, image_2 = to_base64('1.jpg','3.jpg')
params = json.dumps(
[{
    
    "image": image_1, "image_type": "BASE64", "face_type": "LIVE", "quality_control": "LOW"},
{
    
    "image": image_2, "image_type": "BASE64", "face_type": "CERT", "quality_control": "LOW"}]).encode(encoding='UTF8')

access_token = gettoken()
request_url = request_url + "?access_token=" + access_token
my_request = request.Request(url=request_url,data = params)
my_request.add_header('Content-Type','json')
#urlencode处理需提交的数据
response = request.urlopen(my_request)
null =0
content = response.read()
content = bytes.decode(content)
content = eval(content)
result = content['result']
score = result['score']
print('相似度:',score)

3.3 Résultats en cours d'exécution

La similarité de visage 0 ~ 100 est sortie (la similarité dans cette expérience est 91.96734319)
insérez la description de l'image ici

3.4 Analyse du problème

insérez la description de l'image ici
Description du problème rencontré : Le résultat en cours d'exécution signale une erreur indiquant KeyError : 'result'

Raison de l'erreur : grâce au débogage, il est constaté que le code d'erreur : 18 s'affiche dans le résultat, et l'erreur correspondante est Limite de requête Open api qps atteinte. Vérifiez le code d'erreur (lien) dans le document de reconnaissance de texte et constatez que la raison est la suivante : le nombre de QPS dépasse le quota, la limite de simultanéité du quota gratuit est de 2 QPS et la limite de simultanéité est de 10 QPS après l'activation du paiement à l'utilisation. ou achetez le package times, si vous avez besoin de plus de simultanéité , vous pouvez choisir d'acheter le package de superposition QPS ; pour les API qui ne prennent pas en charge la facturation, vous pouvez soumettre un ordre de travail sur la console pour demander une augmentation de limite. C'est-à-dire que nous n'avons pas de crédit gratuit pour appeler l'interface, donc l'identification n'a aucun résultat.
Solution : après avoir terminé l'authentification personnelle, Baidu Smart Cloud peut recevoir des ressources gratuites, alors obtenez des ressources sous l'application créée, attendez environ une demi-heure pour revenir, puis exécutez le code pour terminer l'identification.

faire référence à

L'API Baidu réalise la comparaison des visages Qu'est -
ce que Base64 ?

Je suppose que tu aimes

Origine blog.csdn.net/m0_37758063/article/details/123645068
conseillé
Classement