Python 为什么我会得到多个边界框?

Python 为什么我会得到多个边界框?,python,keras,deep-learning,computer-vision,object-detection,Python,Keras,Deep Learning,Computer Vision,Object Detection,我正在尝试将图像对象检测器转换为视频对象检测器 但是,我得到了多个边界框,我不知道为什么 似乎视频的第一帧具有正确数量的边界框,即1。但是当它循环时,函数draw_box输出具有多个或重叠边界框的图像 如果你能帮忙,我将不胜感激。谢谢 以下是一些框架的示例: 代码如下: 对于tqdm中的i(范围(nb_帧)): _,frame=video\u reader.read() cv2.imwrite(“framey.jpg”,frame) filename=“framey.jpg” image,i

我正在尝试将图像对象检测器转换为视频对象检测器

但是,我得到了多个边界框,我不知道为什么

似乎视频的第一帧具有正确数量的边界框,即1。但是当它循环时,函数
draw_box
输出具有多个或重叠边界框的图像

如果你能帮忙,我将不胜感激。谢谢

以下是一些框架的示例:

代码如下:


对于tqdm中的i(范围(nb_帧)):
_,frame=video\u reader.read()
cv2.imwrite(“framey.jpg”,frame)
filename=“framey.jpg”
image,image\u w,image\u h=加载\u image\u像素(文件名,(输入\u w,输入\u h))
yhat=模型预测(图)
对于范围内的i(len(yhat)):
#解码网络的输出
框+=解码网络输出(yhat[i][0],锚[i],类阈值,输入h,输入w)
#更正图像形状的边界框大小
正确的输入框(框、图像、图像、输入框、输入框)
#抑制非最大盒
do_nms(框,0.5)
#获取检测到的对象的详细信息
v_框、v_标签、v_分数=获取_框(框、标签、类_阈值)
#把我们发现的画出来
imagex=绘制框(文件名、v\u框、v\u标签、v\u分数)
视频写入器(imagex)
视频_reader.release()
视频编剧发布()
下面是显示上图的函数:


def draw_框(文件名、v_框、v_标签、v_分数):
#加载图像
data=pyplot.imread(文件名)
#绘制图像
pyplot.imshow(数据)
#获取绘图框的上下文
ax=pyplot.gca()
#绘制每个方框
对于范围内的i(透镜(v_盒)):
盒子=v_盒子[i]
#获取坐标
y1,x1,y2,x2=box.ymin,box.xmin,box.ymax,box.xmax
#计算长方体的宽度和高度
宽度,高度=x2-x1,y2-y1
#创建形状
矩形=矩形((x1,y1),宽度,高度,填充=假,颜色=白色')
#画盒子
ax.add_补丁(rect)
#在左上角绘制文本和分数
label=“%s(%.3f)”%(v_标签[i],v_分数[i])
pyplot.text(x1,y1,标签,颜色为白色)
#展示情节
pyplot.savefig('detected.jpg')
filename=“detected.jpg”
image=load\u img(文件名)
图像数组=图像数组到图像数组(图像)
image\u数组=(image\u数组*255).astype(np.uint8)
返回图像数组

因此,错误出现在“绘制框”功能中

我改了“画框”,效果不错


def绘制边界框(图像、v框、v标签、v分数):
对于范围内的i(透镜(v_盒)):
盒子=v_盒子[i]
y1,x1,y2,x2=box.ymin,box.xmin,box.ymax,box.xmax
宽度,高度=x2-x1,y2-y1
label=“%s(%.3f)”%(v_标签[i],v_分数[i])
region=np.数组([[x1-3,y1],
[x1-3,y1-高度-26],
[x1+宽度+13,y1-高度-26],
[x1+宽度+13,y1]],数据类型='int32')
cv2.矩形(图像,(x1,y1),(x2,y2),(255,0,0),5)
cv2.fillPoly(图像,[区域],(255,0,0))
cv2.putText(图像,
标签,
(x1+13,y1-13),
cv2.FONT\u好时\u SIMPLEX,
1e-3*图像形状[0],
(0,0,0),
2)
返回图像