Python 如何修复输出大于输入的附加列表?

Python 如何修复输出大于输入的附加列表?,python,python-3.x,loops,opencv,enumeration,Python,Python 3.x,Loops,Opencv,Enumeration,总结问题 我正在使用OpenCV和face_识别模块通过CNN模型运行图像列表。我已多次运行该条目,但仍以大于输入的列表结束 关于已尝试的内容的背景 a。首先对图像进行编码,然后运行第二个过程,利用人脸识别对每个编码条目自身(i+1)运行。比较人脸 b。对图像进行编码,然后加载编码的pickle文件,并从原始文件提取位置枚举每个图像 关于数据的注释: -imagepath是293.png文件的列表。 -encodings.pickle是imagepath中已编码图像的字典 显示一些代码 源

总结问题 我正在使用OpenCV和face_识别模块通过CNN模型运行图像列表。我已多次运行该条目,但仍以大于输入的列表结束

关于已尝试的内容的背景

a。首先对图像进行编码,然后运行第二个过程,利用
人脸识别对每个编码条目自身(i+1)运行。比较人脸

b。对图像进行编码,然后加载编码的pickle文件,并从原始文件提取位置枚举每个图像


关于数据的注释:
-
imagepath
是293.png文件的列表。

-
encodings.pickle
imagepath
中已编码图像的字典

显示一些代码
源代码已根据所示内容进行了修改。

data=pickle.load(打开(“encodings.pickle”、“rb”).read())
ImagePath=列表(路径.列表\图像(“./图像”)
匹配输出=[]
对于枚举(imagePath)中的(i,imagePath):
d=dt.datetime.now()
打印(d.isoformat())
打印(“[INFO]处理图像{}/{}”。格式(i+1,
len(图像路径)
image=cv2.imread(imagePath)
rgb=cv2.CVT颜色(图像,cv2.COLOR\u BGR2RGB)
框=人脸识别。人脸位置(rgb,型号='cnn')
编码=人脸识别。人脸编码(rgb,方框)
名称=[]
对于编码中的编码:
匹配=人脸识别。比较人脸(数据[“编码”],编码)
name=“未知”
如果在匹配项中为True:
matchedIdx=[枚举(匹配)中(i,b)的i如果b]
matcheOutput.append(matchedIdxs)
描述预期|实际结果:

预期: 长度
293
的列表(
matchesOutput
),其中每个索引等于的
matchedIdxs

实际:
长度为330的列表(
matchesOutput
)。

您将遍历每个图像路径(293个条目),然后查看所有编码的每个图像路径(大概也是293个条目)如果该编码有任何匹配项,则添加匹配的索引。因此,对于每个图像路径,取决于
人脸识别.compare\u faces
方法的准确性,您可能会得到多个匹配编码或没有匹配编码(仅当该方法非常弱时才会发生,因为每个图像也在编码列表中),因此最终列表中的值大于(或可能小于)293

即使有一个非常精确的预测,图像可能包含同卵双胞胎,例如同一个人的两张图像,因此330是您看到的匹配数,甚至可能是正确的输出


如果您想要一个293个匹配项的列表,您必须决定如何在多个匹配项(即,最佳匹配项是什么)之间进行选择,以及如果没有匹配项出现,可能需要附加什么项。

很有趣。我在输出中注意到有重复项,我想知道这是否是一个“小问题”,因为速度相当慢(因为我还没有让CUDA工作,因此CPU被占用).有意思…你以前遇到过这个问题吗?我想知道我是否应该删除DUP…我在图像识别方面没有做太多工作,但决定如何处理误报是分类问题的一个经典部分。我想这取决于你的目标是什么以及你需要最终列表做什么。一般来说,通常的方法是选择“最佳”匹配,或者如果您的数据非常大,则选择比您事先确定的某个阈值更好的第一个匹配。