Pruebas de decodificación - tpII/2020-pc-6-combiot GitHub Wiki

Inicialmente investigamos las librerias, encontramos algunas como:

  • pyzbar (Python con C)
  • pyzxing (Python con Java)
  • barcode-read (C#)
  • licencia de Dynamsoft (necesitaba licencia)
  • entre otras

Sin embargo, la mayoria, nos trajeron mas inconvenientes que soluciones. Por otro lado, luego de la reunion con el docente, encontramos dos alternativas: decodificador online o usando docker.

Decodificador online:

Haciendo uso de la libreria requests realizamos un post a un decodificador online, junto con la imagen y obtuvimos como resultado:

import requests

file = [
    ('images', ('barcode.png', open('./barcode.png', 'rb'), 'image/png'))
]
response = requests.post(
    url='https://zxing.org/w/decode',
    files=file
)
print(response.text)

Al imprimir la respuesta obtenemos:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"/><meta content="none" name="robots"/><meta content="width=device-width, initial-scale=1.0" name="viewport"/><title>Decode Succeeded</title><link type="text/css" href="style.css" rel="stylesheet"/><style type="text/css">
      td { vertical-align: top; padding: 0.1in; background-color: #EEEEEE; font-family: monospace; }
    </style></head><body><div id="main"><div id="header"><h1><img alt="" id="icon" src="zxing-icon.png"/> Decode Succeeded</h1></div><table id="result"><tr><td>Raw text</td><td><pre>{'name': 'Cliente', 'date': '12/10/2020', 'valid': True}</pre></td></tr><tr><td>Raw bytes</td><td><pre>(Not applicable)</pre></td></tr><tr><td>Barcode format</td><td>PDF_417</td></tr><tr><td>Parsed Result Type</td><td>TEXT</td></tr><tr><td>Parsed Result</td><td><pre>{'name': 'Cliente', 'date': '12/10/2020', 'valid': True}</pre></td></tr></table></div></body></html>

Donde se puede ver en el "Parsed Result" la informacion decodificada.

Para obtener los datos que nos importan en un diccionario de python realizamos el siguiente prosamiento:

html = BeautifulSoup(response.text, "html.parser")
entradas = html.find_all('pre')
datos = entradas[0]
datos = str(datos)
datos = datos[:-6]
datos = datos[5:]
datos = datos.replace("'", "\"")
datos = ast.literal_eval(datos)
print(datos)

Obteniendo como resultado: {'name': 'Cliente', 'date': '12/10/2020', 'valid': True}

⚠️ **GitHub.com Fallback** ⚠️