Header Ads Widget

Ticker

6/recent/ticker-posts

Digitalice sus notas con la API de Microsoft Computer Vision


 ¿Cuántos de ustedes tienen montones de notas (de papel) por ahí que nunca llegaron a transcribir? ¿Le gustaría poder buscar y ordenar sus notas como lo hace con los archivos de su computadora? Buenas noticias. Los servicios cognitivos de Microsoft , específicamente su API Computer Vision , le permiten a uno hacer precisamente eso. Con inteligencia artificial y aprendizaje automático, puede almacenar sus notas como texto en solo unas pocas líneas de código.

La API proporciona modelos y servicios previamente entrenados para categorizar y etiquetar datos visuales como fotos y texto . En este tutorial, crearemos un servicio en Python que puede leer el texto de notas escritas a mano. Puede usarlo para digitalizar sus listas de compras, notas adhesivas, recordatorios y más.

Cuando termine, tendrá un programa Python que puede analizar cada una de sus notas escritas a mano y escupir un archivo de texto asociado con los datos transcritos. Para una mayor eficiencia, puede configurar esto para que se ejecute en un horario para que traduzca sus notas automáticamente.

Empecemos.

Obtenga una clave de API y dependencias

Para comenzar a compilar con la API de Microsoft Computer Vision , necesitará una clave. Vaya a su sitio web y seleccione 'Prueba' para obtener una cuenta de prueba gratuita durante 30 días. Después de iniciar sesión con su cuenta de Microsoft y aceptar los Términos de servicio, obtendrá un punto final de API personalizado y dos claves de API . Toma nota de estos, los necesitaremos.

También necesitará Python instalado. Si tiene un sistema Mac OSX, ya debería estar allí. Si tiene Windows o Linux, tómese este tiempo para instalar Python. Usaremos Python 3.6.x para este tutorial.

Estas son las bibliotecas de Python que necesitará importar en su archivo (deben ser parte de la oferta principal de Python, excepto requests, que puede instalar ejecutándolas pip install requests):

import http.client, urllib.request, urllib.parse, urllib.error, base64, requests, time, json  

Obtener muestras de imágenes

Si tiene imágenes de sus notas almacenadas en el disco, es fácil ejecutarlas a través de la API Computer Vision de Microsoft y etiquetarlas. También puede hacer esto si tiene sus notas almacenadas en un servicio en la nube como iCloud o Dropbox. Pasaremos por ambos caminos.

Puede usar imágenes de sus propias notas o usar esta muestra que creé para el tutorial:

Configurar la solicitud

Para transcribir el texto escrito a mano, usaremos Python y la API de Microsoft Computer Vision. ¿Recuerda la clave de API y el punto final que generó de Microsoft anteriormente? Lo necesitará ahora.

Inicie un archivo llamado digitizer.pyy agregue dos variables para su punto final y clave API. Puede utilizar cualquiera de las dos claves proporcionadas por Microsoft.

# Keys  
endpoint = 'https://westcentralus.api.cognitive.microsoft.com/vision/v1.0'  
api_key = 'YOUR_KEY_GOES_HERE'

Luego, podemos crear la solicitud HTTP para enviarla a la API. Necesitamos encabezados , un cuerpo y parámetros . Microsoft tiene una referencia API detallada sobre la función RecognizeText .

headers = {  
    # Request headers.  
    # Another valid content type is "application/octet-stream".  
    'Content-Type': 'application/json',  
    'Ocp-Apim-Subscription-Key': api_key,  
}

Esto establece los encabezados de la solicitud. Pasamos el tipo de contenido y su clave API. A continuación, necesitamos especificar qué imagen analizar:

body = {'url':'http://i.imgur.com/W2fF6uC.jpg'}

Puede insertar su propia imagen en la urlsección o utilizar la muestra que le proporcioné.

params = {'handwriting' : 'true'}

Si lo configura handwriting=false, intentará OCR el texto en su lugar.

Análisis de escritura a mano con Python

Para analizar la escritura a mano en nuestra imagen, necesitaremos hacer dos llamadas a la API REST . Un POST enviará la imagen para su procesamiento . Luego usaremos un GET para recuperar los resultados .

Ahora que tenemos el encabezado, el cuerpo y los parámetros para la solicitud HTTP, pongámoslo juntos:

try:  
    response = requests.request('POST', endpoint + '/RecognizeText', json=body, data=None, headers=headers, params=params)

Podemos decir por la referencia de API que un estado HTTP de 202 es un éxito. Es 202 en lugar de 200 porque significa que se envió la imagen para su procesamiento. Por supuesto, si hay un error en esta etapa, no queremos ir más lejos. Agreguemos ahora un código de manejo de errores :

if response.status_code != 202:  
    # Display JSON data and exit if the REST API call was not successful.  
    parsed = json.loads(response.text)  
    print ("Error:")  
    print (json.dumps(parsed, sort_keys=True, indent=2))  
    exit()

Esa es una solicitud fuera del camino. Hemos enviado nuestra imagen a la API de Computer Vision y está procesando los datos mientras hablamos. Pero, ¿cómo recuperamos los resultados?

Tendremos que hacer otra solicitud para eso. La referencia de la API brinda más información, pero básicamente necesitamos tomar la respuesta de la solicitud anterior y tomar el ID de la operación para que podamos pasarla. Tomaremos ese valor ahora:

# grab the 'Operation-Location' from the response  
operationLocation = response.headers['Operation-Location']

Ahora podemos usar esto operationLocationen el resto de nuestro cálculo.

Nota: Dado que el reconocimiento de escritura a mano es una operación asincrónica, es posible que los resultados no estén disponibles de inmediato. Puede llevar una cantidad de tiempo variable según su sistema y la imagen que envíe. En nuestro ejemplo, esperaremos 10 segundos. En la práctica, es posible que desee agregar reintentos automáticos si la respuesta aún no está lista.

print('\nHandwritten text submitted. Waiting 10 seconds to retrieve the recognized text.\n')  
time.sleep(10)

Después de esperar 10 segundos, es de esperar que la respuesta esté lista para nosotros. Podemos continuar con la segunda llamada de REST en este punto:

# Execute the second REST API call and get the response.
response = requests.request('GET', operationLocation, json=None, data=None, headers=headers, params=None) # 'data' contains the JSON data. The following formats the JSON data for display.
parsed = json.loads(response.text)

Aquí puede ver que estamos consultando el operationLocationque generamos arriba. La respuesta viene en forma de un objeto de datos JSON. Si quisiéramos, podríamos imprimir todos los datos JSON aquí. Pero para este ejemplo, solo vamos a tomar las líneas de texto que la API nos devuelve.

Para obtener las líneas de texto transcritas, debemos navegar hacia abajo a través del objeto JSON para encontrar los valores correctos.

lines = parsed['recognitionResult']['lines']

En la respuesta, cada línea de texto obtiene su propia línea en la respuesta JSON. Esto significa que, por ejemplo, si tiene una nota que ocupa varias líneas en una hoja de papel de cuaderno, cada línea de ese texto se procesará por separado.

parsed['recognitionResult']['lines']contiene una matriz de todas las líneas de texto procesado. Podemos imprimirlos ahora:

for line in lines:  
    print (line['text'])

¡Ya casi hemos terminado! Ahora solo necesitamos agregar una exceptcláusula para detectar cualquier error molesto:

except Exception as e:
print('Error:')
print(e)

En este punto, debería tener una pieza de código funcional que pueda transcribir el texto de sus notas. Pero simplemente imprimir el texto en la terminal no es muy útil. Hagamos algo con eso.

Escribir datos transcritos en un archivo

Escribamos esos datos en un archivo. Podemos editar el ciclo for de arriba para incluir la escritura en un archivo. Hay una declaración incorporada en Python que nos permite hacer esto:

# this opens the file for writing
with open(“mynote.txt”, “w”) as f:
for line in reversed(lines):
print line['text']
# write the value to the file
f.write(line['text'])

Funciones extendidas

Una vez que tenga su script en funcionamiento, puede dar el siguiente paso y automatizarlo . Este paso es opcional, pero le da un impulso adicional de potencia a su flujo de trabajo.

Si desea que sus notas se transcriban automáticamente todos los días, por ejemplo, puede crear un trabajo cron que ejecute el script de Python y lo apunte a un determinado directorio de archivos.

¿De qué otras formas podría mejorar este programa? Quizás podría configurar una alerta para activar una acción cuando procesa una nota con ciertas palabras clave. Quizás podría enviar los datos a otro servicio para su posterior análisis o publicación.

¿Tiene una aplicación interesante de la API de Computer Vision? ¡Comparte tus proyectos en los comentarios a continuación!

Publicar un comentario

0 Comentarios