2
votes

Comment envoyer une requête d'API Rest (API de Google Vision) avec Python?

Je suppose que ma question est relativement simple et naïve, mais je suis nouveau dans l'utilisation des API REST, je serais donc reconnaissant pour toute aide ou indice.

J'essaie d'envoyer une requête avec urllib (ou un autre Python bibliothèque que je n'ai pas besoin d'installer). D'après leur guide , le format est:

https://vision.googleapis.com/v1/images:{
  "requests":[
    {
      "image":{
        "content":"/9j/7QBEUGhvdG9eYxxxzj/Coa6Bax//Z"
      },
      "features":[
        {
          "type":"LABEL_DETECTION",
          "maxResults":1
        }
      ]
    }
  ]
}?key=my_api_key


2 commentaires

De quoi avez-vous besoin? Avez-vous besoin d'un logiciel pour tester cette URL lors de l'envoi de la demande?


Je ne suis pas sûr de comprendre votre question. Je veux faire des appels API avec l'urllib de Python. Je souhaite utiliser l'API pour stocker et traiter les sorties.


3 Réponses :


2
votes

Si vous devez envoyer Request Body avec l'URL, vous pouvez utiliser CURL . Pour tester les API REST, il existe un célèbre logiciel appelé POSTMAN . En utilisant cela, vous pouvez envoyer des requêtes et recevoir la réponse.

CURL,

{
  "requests":[
    {
      "image":{
        "content":"/9j/7QBEUGhvdG9...image contents...eYxxxzj/Coa6Bax//Z"
      },
      "features":[
        {
          "type":"LABEL_DETECTION",
          "maxResults":1
        }
      ]
    }
  ]
}

En utilisant POSTMAN, vous pouvez lui donner ces valeurs et obtenir des résultats.

Donnez l'URL,

POST

Choisissez la MÉTHODE HTTP comme,

https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY

Et ajoutez le CORPS DE DEMANDE sous le brut et choisissez JSON(application/json),

curl -v -H "Content-Type: application/json" -X POST \
     -d '{"image":{"content":"/9j/7QBEUGhvdG9...image contents...eYxxxzj/Coa6Bax//Z"}, "features":[{"type":"LABEL_DETECTION","maxResults":1}]}' https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY


2 commentaires

Puis-je faire cette demande avec une simple demande d'URL dans le navigateur ou je dois utiliser POSTMAN?


Utilisez le facteur. C'est un logiciel léger. Sinon, vous pouvez utiliser Firefox . Lisez la deuxième réponse. stackoverflow.com/questions/4797534/...



1
votes

Cela fonctionne pour moi:

import base64
import requests
import json

URL = "https://vision.googleapis.com/v1/images:annotate?key=YOUR_TOKEN"

#image to base64, which is a long long text
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read())

#make api call
def image_request(image_path):
    data = {
            "requests":[
                        {
                        "image":{
                            "content":encode_image(image_path)
                                },
                        "features":[
                                    {
                                    "type":"LABEL_DETECTION", #other options: LABEL_DETECTION FACE_DETECTION LOGO_DETECTION CROP_HINTS WEB_DETECTION
                                    "maxResults": 10
                                    }
                                   ]
                        }
                    ]
}
    r = requests.post(URL, json = data)
    return r.text


#arg = path of image
def main(argv):
    api_answer = json.loads(image_request(argv[1]))
    try:
        rows = api_answer['responses'][0]['labelAnnotations']
    except:
        print(file_to_proccess)
        print(api_answer)
    data = []
    for item in rows:
        data.append([item['mid'], item['description'], item['score'], item['topicality']])

    # save somewhere the data list...

if __name__ == "__main__":
    main(sys.argv)


0 commentaires

0
votes

cela a été testé et fonctionne parfaitement

            import base64
            import requests
            import json

            url = "https://vision.googleapis.com/v1/images:annotate"

            querystring = {"key":".........."}
            headers = {
                    'Content-Type': "application/json",
                    }
            def encode_image(image_path):
                with open(image_path, "rb") as image_file:
                    return base64.b64encode(image_file.read())

            def image_request(image_path):

                payload = '{  \"requests\":[    {      \"image\":{        \"content\":\"'+encode_image(image_path).decode('utf-8')+'"      },      \"features\":[        {          \"type\":\"TEXT_DETECTION\" }      ]    }  ]}'
                response = requests.request("POST", url, data=payload, headers=headers, params=querystring)

                return response.text


0 commentaires