此文件夹中有些图像包含一个或多个条形码。我的工作是对它们进行排序,并根据研究编号(在条形码中或条形码下方)对它们进行重命名。
有关此问题的更多信息: 我要提取特定的条形码。因为条形码有两种类型(带有研究编号或带有航空货运单编号)。
研究编号的长度为13个数字(它们总是始终个数字): 研究(6)+患者(4)+访问(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循环中包含迭代吗?还是我明显看不到的错误在哪里?
谢谢大家的时间和帮助!