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.
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}