[PYTHON] Diagnostic Machine Learning x Web App: reconnaissez CAPTCHA avec l'API Cloud Vision

La dernière fois a implémenté un perceptron multicouche en utilisant "Chainer" et a essayé de reconnaître les images CAPTCHA. .. Cette fois, j'essaierai la même chose en utilisant l'API d'analyse d'image de Google "API Cloud Vision".

ordre du jour

  1. Code de mise en œuvre
  2. Essayez-le
  3. Résumé
  4. Références

0. Code de mise en œuvre

Cette fois, j'ai créé une classe d'analyse d'image simple pour la vérification. Comme vous pouvez le voir, il POST simplement la requête au format JSON définie par l'API Cloud Vision.

MyRecognitionImage.py


#!/usr/bin/python
#coding:utf-8
import base64
import json
from requests import Request, Session


#Analysez les images avec l'API Cloud Vision
class RecognizeImage():

    def __init__(self):
        return

    #Analyse de CAPTCHA
    def recognize_captcha(self, str_image_path):
        #Chargement des images CAPTCHA
        bin_captcha = open(str_image_path, 'rb').read()

        #Encoder des images CAPTCHA avec base64
        str_encode_file = base64.b64encode(bin_captcha)

        #Spécifiez l'URL de l'API
        str_url = "https://vision.googleapis.com/v1/images:annotate?key="

        #Clé API obtenue à l'avance
        str_api_key = "XXXXXXXXX"

        # Content-Définir le type sur JSON
        str_headers = {'Content-Type': 'application/json'}

        #Définissez la charge utile JSON conformément aux spécifications de l'API Cloud Vision.
        #Pour extraire le texte de l'image CAPTCHA, le type est "TEXT"_Réglez sur "DETECTION".
        str_json_data = {
            'requests': [
                {
                    'image': {
                        'content': str_encode_file
                    },
                    'features': [
                        {
                            'type': "TEXT_DETECTION",
                            'maxResults': 10
                        }
                    ]
                }
            ]
        }

        #Envoyer une demande
        obj_session = Session()
        obj_request = Request("POST",
                              str_url + str_api_key,
                              data=json.dumps(str_json_data),
                              headers=str_headers
                              )
        obj_prepped = obj_session.prepare_request(obj_request)
        obj_response = obj_session.send(obj_prepped,
                                        verify=True,
                                        timeout=60
                                        )

        #Acquisition des résultats d'analyse
        if obj_response.status_code == 200:
            print obj_response.text
            return obj_response.text
        else:
            return "error"

Les trois points suivants doivent être notés lors de l'utilisation de l'API.

Lorsque le code ci-dessus est exécuté, la requête suivante est POSTÉE.

POST /v1/images:annotate?key=XXXXXXXXX HTTP/1.1
User-Agent: python-requests/2.8.1
Host: vision.googleapis.com
Accept: */*
Content-Type: application/json
Content-Length: 939

{
 "requests":[
  {
   "image":{
    "content": "iVBORw0KGgoAAAANSUhEUgA ・ ・ ・(réduction)・ ・ ・/EV4ihonpXVAAAAAElFTkSuQmCC"
   },
   "features":[
    {
     "type":"TEXT_DETECTION",
     "maxResults":10
    }
   ]
  }
 ]
}

Spécifiez les données d'image encodées en Base64 dans "contenu" et spécifiez le contenu d'analyse que vous souhaitez exécuter dans "type". Puisque nous voulons reconnaître CAPTCHA cette fois, spécifiez l'extraction de texte "TEXT_DETECTION". En plus de l'extraction de texte, l'analyse suivante peut être effectuée.

Par exemple, si vous POSTER une image de la gare de Tokyo, vous pouvez la reconnaître comme "Gare de Tokyo", et si vous POSTEZ une image qui vous convient, vous pouvez la reconnaître comme "heureuse". J'aimerais les essayer à l'avenir.

L'analyse d'image nécessite beaucoup de puissance de la machine, donc c'était un obstacle de taille à travailler en tant que passe-temps. Cependant, n'importe qui peut facilement effectuer une analyse d'image en utilisant cette API. Quelle merveilleuse API!

1. Essayez-le

Utilisons ceci pour reconnaître immédiatement CAPTCHA.

Tout d'abord, à partir de maintenant. captcha0_neg.png

Le texte extrait est envoyé vers "description".

1er résultat d'analyse


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "O l 4.67 9\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 6,
                "y": 1
              },
              {
                "x": 165,
                "y": 1
              },
              {
                "x": 165,
                "y": 35
              },
              {
                "x": 6,
                "y": 35
              }
            ]
          }
        }
      ]
    }
  ]
}

Le résultat est "O l 4,67 9". 0 (zéro) est la lettre supérieure O "O", 1 (ichi) est la lettre inférieure "l", et il y a des points étranges, mais on peut voir qu'ils sont généralement reconnus correctement. On peut dire que le taux de réponse correcte est de 100%.

Vient ensuite le deuxième. captcha1_neg.png

Cela a été décevant lors des validations passées, mais qu'en est-il de l'API Cloud Vision?

Deuxième résultat d'analyse


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "496'0,\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 6,
                "y": 10
              },
              {
                "x": 148,
                "y": 10
              },
              {
                "x": 148,
                "y": 70
              },
              {
                "x": 6,
                "y": 70
              }
            ]
          }
        }
      ]
    }
  ]
}

L'ordre de sortie du texte est légèrement modifié, mais «4», «0», «9» et «6» peuvent être reconnus. La dernière fois, le taux de reconnaissance était de 50%, donc on voit qu'il s'est amélioré.

C'est le dernier. cp3.png

Troisième résultat d'analyse


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "425970\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 5,
                "y": 7
              },
              {
                "x": 97,
                "y": 7
              },
              {
                "x": 97,
                "y": 33
              },
              {
                "x": 5,
                "y": 33
              }
            ]
          }
        }
      ]
    }
  ]
}

bien joué!! Vous pouvez voir que tout peut être reconnu avec précision.

Il est possible d'extraire du texte avec une précision assez élevée, probablement parce qu'il apprend en fonction de l'énorme quantité de données d'image détenues par Google. Cela pourrait être utilisé pour la reconnaissance CAPTCHA.

D'ailleurs, dans le nouveau CAPTCHA "reCAPTCHA" développé par Google, le même animal / chose est sélectionné parmi plusieurs images comme indiqué ci-dessous. Il semble qu'il distingue les humains des robots.

reCAPTCHA.png

Dans cet exemple, il est nécessaire de sélectionner toutes les mêmes images que l'image du haut (chat), donc la bonne réponse est de sélectionner la première en haut à gauche et la deuxième et la troisième en bas à gauche.

En passant, j'ai confirmé que l'API Cloud Vision pouvait être utilisée pour distinguer avec précision les chats et les chiens.

2. Résumé

J'ai essayé de reconnaître CAPTCHA à l'aide de l'API Cloud Vision. Bien qu'il y ait quelques améliorations, les résultats sont suffisants pour être utilisés pour la reconnaissance CAPTCHA.

Il a également été constaté qu'il est possible de percer non seulement de simples CAPTCHA (images numériques, etc.) mais également des images avancées telles que reCAPTCHA. Cette API sera facturée après la période d'essai, mais étant donné que vous pouvez écrire votre propre code ou préparer une machine avec des spécifications élevées, nous pensons que les performances de coût sont élevées.

À l'avenir, après plusieurs vérifications, je souhaiterais l'utiliser pour le moteur de reconnaissance CAPTCHA du robot d'exploration automatique des applications Web.

3. Références

  1. Google Cloud Vision API

c'est tout

Recommended Posts

Diagnostic Machine Learning x Web App: reconnaissez CAPTCHA avec l'API Cloud Vision
Apprentissage automatique x diagnostic d'application Web: Reconnaître CAPTCHA avec perceptron multicouche (édition Chainer)
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Problèmes avec les résultats de sortie avec l'API Cloud Vision de Google
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Créez une application Web typée avec le framework Web de Python «Fast API» et TypeScript / Open API - Pile technique pour les applications Web d'apprentissage automatique
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Déployez des applications Web en temps réel avec Swampdragon x Apache
Flux d'extraction de texte au format PDF avec l'API Cloud Vision
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Apprentissage automatique avec Python! Préparation
API Web avec Python + Falcon
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Essayez le machine learning à la légère avec Kaggle
Comment créer une API de machine learning sans serveur avec AWS Lambda