В этой папке находятся изображения, содержащие один или несколько штрих-кодов.Моя задача на работе - сортировать их и переименовывать по номеру исследования (находится в штрих-коде или под ним).
Дополнительная информация по этому вопросу: есть конкретные штрих-коды, которые я хочу извлечь.Поскольку существует два типа штрих-кодов (с номером исследования или с номером авианакладной).
Номер исследования имеет длину 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?или где ошибка, которую я явно не вижу?
Спасибо всем за потраченное время и помощь !!