Расшифровка штрих-кодов с помощью pyzbar, opencv из папки изображений - PullRequest
0 голосов
/ 27 апреля 2019

В этой папке находятся изображения, содержащие один или несколько штрих-кодов.Моя задача на работе - сортировать их и переименовывать по номеру исследования (находится в штрих-коде или под ним).

Дополнительная информация по этому вопросу: есть конкретные штрих-коды, которые я хочу извлечь.Поскольку существует два типа штрих-кодов (с номером исследования или с номером авианакладной).

Номер исследования имеет длину 13 номеров (они всегда номера): исследование (6) + пациент(4) + visit (3) Пример: 123456 7890 123

Исключения не добавляются в список, но они печатаются вместе с соответствующим именем файла, в котором он был найден.

Я хотел быПеребирайте все элементы в папке и декодируйте каждый из них.

Код

from os import listdir
from os.path import isfile, join
import pyzbar.pyzbar as pyzbar
import cv2

mypath = '/Users/Eric/Desktop/test'

onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
onlyimg = []
barcode = []
notbarcode = []
for x in onlyfiles:
    im = join(mypath,x)
    onlyimg.append(im)


def decode(im) : 
  # Find barcodes and QR codes
  decodedObjects = pyzbar.decode(im)

  # Print results
  for obj in decodedObjects:
      try: 
          barcode.append(int(obj.data)) 
      except Exception as e:
          print(str(e))
          print(f)

#print('Type : ', obj.type)
#code = print('Number : ', obj.data,'\n')
#barcode.append(code)

  return decodedObjects 
# Main 
if __name__ == '__main__':

  # Read image
  for img in onlyimg:
      im = cv2.imread(img)

  decodedObjects = decode(im)

Однако с этим кодом он читает только первое и декодирует первое изображение.

Я попытался запустить следующий код, чтобы попытаться перебрать элементы:

for img in glob.glob(folder + "*.jpg"):
      im = cv2.imread(img)

Но это не помогает.

Запуск всего кода приводит к:

invalid literal for int() with base 10: b'615X10394435'
2218400280901.jpg

Печать штрих-кодов списка приводит к:

print(barcodes)
[2218400280903, 2218400280901]

Эти два результата хороши, так как тот, который будет использоваться для переименования, будет с наименьшим посещениемномер, так что в этом случае 2218400280901.

Тем не менее, код декодировал только первое изображение, и он не перебрал все изображения.Это потому, что я не включил итерацию в цикл for?или где ошибка, которую я явно не вижу?

Спасибо всем за потраченное время и помощь !!

...