[PYTHON] J'ai essayé l'API Google Cloud Vision pour la première fois

Vous n'avez jamais utilisé l'API Vison lors du traitement d'image. J'ai trouvé que c'était incroyable, mais je n'ai rien fait à ce sujet.

Pour le moment, j'ai décidé de l'essayer même s'il était léger, alors je l'ai écrit en Python! Cet article a été laissé en mémoire à ce moment-là ~

À propos, la procédure d'enregistrement, etc. se fait en se référant à cette zone ~

Bibliothèque cliente de l'API Vision

Fonctions utilisées

Les fonctions suivantes ont été utilisées cette fois. J'apporte l'explication du fonctionnaire.

** Détection automatique des objets ** L'API Cloud Vision vous permet de découvrir et d'extraire plusieurs objets dans une image à l'aide de la localisation d'objets. La localisation d'objet identifie les objets dans l'image et spécifie LocalizedObjectAnnotation pour chaque objet. Chaque LocalizedObjectAnnotation identifie des informations sur l'objet, l'emplacement de l'objet et la bordure de la zone de l'image où se trouve l'objet. La localisation d'objets identifie à la fois les objets proéminents et moins proéminents dans l'image.

Code source

C'est dur, mais pardonnez-moi s'il vous plaît ... Je voulais également les coordonnées du point de départ et les coordonnées du point final reconnues, donc je les extrait avec une technique approximative. Comment vérifier la clé json Est-ce correct? Je me sens comme ça.


ENDPOINT_URL = 'https://vision.googleapis.com/v1/images:annotate'
API_KEY = 'Clé API'

#mot-clé json
RESPONSES_KEY = 'responses'
LOCALIZED_KEY = 'localizedObjectAnnotations'
BOUNDING_KEY = 'boundingPoly'
NORMALIZED_KEY = 'normalizedVertices'
NAME_KEY = 'name'
X_KEY = 'x'
Y_KEY = 'y'
def get_gcp_info(image):

    image_height, image_width, _ = image.shape
    min_image = image_proc.exc_resize(int(image_width/2), int(image_height/2), image)

    _, enc_image = cv2.imencode(".png ", min_image)
    image_str = enc_image.tostring()
    image_byte = base64.b64encode(image_str).decode("utf-8")

    img_requests = [{
        'image': {'content': image_byte},
        'features': [{
            'type': 'OBJECT_LOCALIZATION',
            'maxResults': 5
        }]
    }]

    response = requests.post(ENDPOINT_URL,
                             data=json.dumps({"requests": img_requests}).encode(),
                             params={'key': API_KEY},
                             headers={'Content-Type': 'application/json'})

    # 'responses'Si la clé existe
    if RESPONSES_KEY in response.json():
        # 'localizedObjectAnnotations'Si la clé existe
        if LOCALIZED_KEY in response.json()[RESPONSES_KEY][0]:
            # 'boundingPoly'Si la clé existe
            if BOUNDING_KEY in response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0]:
                # 'normalizedVertices'Si la clé existe
                if NORMALIZED_KEY in response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][BOUNDING_KEY]:

                    name = response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][NAME_KEY]

                    start_point, end_point = check_recognition_point(
                        response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][BOUNDING_KEY][NORMALIZED_KEY],
                        image_height,
                        image_width
                    )

                    print(name, start_point, end_point)

                    return True, name, start_point, end_point

    print("non", [0, 0], [0, 0])
    #S'il n'y a pas assez d'informations
    return False, "non", [0, 0], [0, 0]

def check_recognition_point(point_list_json, image_height, image_width):
    #X point de départ (%) des coordonnées de reconnaissance
    x_start_rate = point_list_json[0][X_KEY]
    #Point de départ Y (%) des coordonnées de reconnaissance
    y_start_rate = point_list_json[0][Y_KEY]
    #Point final X (%) des coordonnées de reconnaissance
    x_end_rate = point_list_json[2][X_KEY]
    #Point final Y (%) des coordonnées de reconnaissance
    y_end_rate = point_list_json[2][Y_KEY]

    x_start_point = int(image_width * x_start_rate)
    y_start_point = int(image_height * y_start_rate)
    x_end_point = int(image_width * x_end_rate)
    y_end_point = int(image_height * y_end_rate)

    return [x_start_point, y_start_point], [x_end_point, y_end_point]

Le nom de l'objet reconnu est renvoyé dans name et les coordonnées de l'objet reconnu sont renvoyées dans start_point et end_point.

À la fin

J'ai essayé des vêtements et des chaussures, mais j'ai pu le reconnaître correctement! (Bien que le nom soit assez grossier) Il serait intéressant de créer soi-même un modèle utilisant AUTOML.

Recommended Posts

J'ai essayé l'API Google Cloud Vision pour la première fois
J'ai essayé la programmation python pour la première fois.
J'ai essayé Mind Meld pour la première fois
J'ai essayé Python sur Mac pour la première fois.
J'ai essayé python pour la première fois avec heroku
AI Gaming Je l'ai essayé pour la première fois
J'ai essayé "License OCR" avec l'API Google Vision
J'ai essayé "Receipt OCR" avec l'API Google Vision
J'ai essayé d'extraire des caractères des sous-titres (OpenCV: API Google Cloud Vision)
Premier Kaggle (kaggle ①)
Kaguru pour la première fois
Ce que je suis entré dans Python pour la première fois
J'ai essayé le roman Naro API 2
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
Voir python pour la première fois
J'ai essayé l'API du roman Naruro
Démarrez Django pour la première fois
J'ai essayé d'utiliser l'API checkio
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
Jusqu'à ce que vous essayiez l'API Google Cloud Vision (détection d'images dangereuses)
Touchons l'API Vision de Google de Python pour le moment
Utiliser l'API Google Cloud Vision de Python
MongoDB avec Python pour la première fois
J'ai essayé de toucher l'API COTOHA
Essayons Linux pour la première fois
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
Pour la première fois dans Numpy, je vais le mettre à jour de temps en temps
Depuis que je suis libre, l'ingénieur front-end a essayé Python (v3.7.5) pour la première fois
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
Comment utiliser MkDocs pour la première fois
J'ai essayé d'accéder à l'API Qiita depuis le début
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé l'analyse du SRAS avant le virus corona
Comment utiliser l'API Google Cloud Translation
Essayez de publier sur Qiita pour la première fois
Lorsque j'ai essayé d'utiliser l'API Computer Vision de Microsoft, j'ai reconnu le signe Galapagos "Stop"
Retour sur le concours d'apprentissage automatique sur lequel j'ai travaillé pour la première fois
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
Enregistrer une tâche dans cron pour la première fois
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Essayez d'installer Arch Linux pour le moment.
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé de collecter automatiquement des images érotiques de Twitter à l'aide de l'API Cloud Vision de GCP
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
J'ai vérifié le package Python pré-installé dans Google Cloud Dataflow
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
Je veux déplacer le sélénium pour le moment [pour mac]
J'ai essayé Google Sign-In avec Spring Boot + Spring Security REST API
Résumé des points d'achoppement à Django pour la première fois
[Pour ceux qui veulent utiliser TPU] J'ai essayé d'utiliser l'API de détection d'objets Tensorflow 2
J'ai essayé de toucher l'API Qiita
Se présenter à Qiita pour la première fois (test post)