es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El módulo pyzbar no está leyendo el código de barras suplementario.

Crear un escáner de códigos de barras en Python es bastante fácil, sin embargo, parece que hay un problema que no puedo resolver. Los códigos de barras periódicos (libros, revistas, cómics, etc.) incluyen un código de barras suplementario junto al código de barras principal. Si observas cualquier código de barras en cualquier libro, verás un código de barras más pequeño junto al código de barras más grande (ver imagen a continuación). Escanear ese código de barras suplementario es importante para identificar el libro. Cuando uso el escáner, proporciona la siguiente salida:

EAN13

<p>b'0071001005998'

Nunca me proporciona el código de barras suplementario.

(código de barras = 0071001005998 código de barras suplementario = 78959):
Código de barras periódico

 # Paquetes del sitio - Instalar pip install opencv-python y pyzbar

#opencv - Proporciona visión artificial optimizada en tiempo real.
import cv2
#pyzbar - Lee códigos de barras de una dimensión y códigos QR
from pyzbar.pyzbar import decode

#Leer video
#capture=cv2.VideoCapture(0) #0 - índice del dispositivo
capture=cv2.VideoCapture(0, cv2.CAP_DSHOW) #captureDevice = cámara
capture.set(3,640) #3- Establecer ancho
capture.set(4,480) #4- Establecer altura

#Encender cámara - Verdadero
camera=True

#Bucle de captura de la cámara
while camera==True:
    #La lectura de captura devuelve 2 valores éxito(1,0) y el cuadro como datos
    success, frame=capture.read()
    # Abrir interfaz de la cámara para escanear el código de barras
    cv2.imshow('Prueba de código', frame)
    cv2.waitKey(1)

#Decodificar código de barras
if success==True:
    for code in decode(frame):
        #Imprimir resultado en la consola
        print(code.type)
        print(code.data)
        print(code)

else:
    #Error de la cámara
    cv2.waitKey(3)
    print('¡FALLÓ!')

¿Alguien sabe cómo capturar el código de barras suplementario en Python?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el código actual solo decodifica el código de barras principal y no captura el código de barras suplementario. Una solución podría ser modificar el código para buscar y decodificar múltiples códigos de barras dentro de un solo cuadro. Esto se podría hacer modificando el bucle de decodificación para iterar sobre todos los códigos de barras detectados en el cuadro y filtrando el código de barras principal para encontrar el código de barras suplementario.

    Aquí hay algunas modificaciones potenciales al código existente para capturar el código de barras suplementario:

    # Decodificar códigos de barras
    if success == True:
        codes = decode(frame)
        # Iterar sobre todos los códigos de barras detectados
        for code in codes:
            # Verificar si el código tiene el formato del código de barras suplementario
            if code.type == 'CODE128' and len(code.data) == 5 and code.data.isnumeric():
                # Esto probablemente sea el código de barras suplementario
                print("Código de barras suplementario:", code.data)
            else:
                # Imprimir el código de barras principal como antes
                print("Código de barras principal:", code.type)
                print(code.data)
                print(code)
    else:
        # Error de cámara
        cv2.waitKey(3)
        print("¡FALLÓ!")
    

    Este código modificado verifica cada código de barras detectado para ver si su formato coincide con el del código de barras suplementario (es decir, un código CODE128 con 5 dígitos numéricos). Si lo hace, se asume que es el código de barras suplementario y se imprime en la consola. De lo contrario, el código se trata como el código de barras principal y se imprime como antes.

    Tenga en cuenta que esta modificación asume que el código de barras suplementario siempre es un código CODE128 con 5 dígitos numéricos, lo cual puede no ser el caso en todos los escenarios. Sin embargo, debería funcionar para la mayoría de los códigos de barras periódicos.

Comments are closed.