【发布时间】:2019-06-17 05:16:51
【问题描述】:
我的代码是:
import gluoncv as gcv
net = gcv.model_zoo.get_model('ssd_512_mobilenet1.0_voc', pretrained=True)
windowName = "ssdObject"
cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
cv2.resizeWindow(windowName, 1280, 720)
cv2.moveWindow(windowName, 0, 0)
cv2.setWindowTitle(windowName, "SSD Object Detection")
while True:
# Check to see if the user closed the window
if cv2.getWindowProperty(windowName, 0) < 0:
# This will fail if the user closed the window; Nasties get printed to the console
break
ret_val, frame = video_capture.read()
frame = mx.nd.array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).astype('uint8')
rgb_nd, frame = gcv.data.transforms.presets.ssd.transform_test(frame, short=512, max_size=700)
# # Run frame through network
class_IDs, scores, bounding_boxes = net(rgb_nd)
displayBuf = frame
cv2.imshow(windowName, displayBuf)
cv2.waitKey(0)
不知何故,我需要将bounding_codes、class_IDs 和scores 绘制到图像上并通过imshow 输出。
我怎样才能做到这一点?
【问题讨论】:
-
嗯。不熟悉该库,但我猜想
class_IDs, scores, bounding_boxes是 3 个长度相同的数组,由索引 ID 捆绑在一起吗?即每个边界框都有一个关联的 class_ID 和分数? |如果是这样(除非在 gluoncv 中有一些预制的渲染功能)......也许只是循环数组并使用 primitive drawing functions 来绘制矩形和两个文本,可能是随机颜色...... -
嗯,也许this是预制的?
-
这看起来像是使用 matlab 绘图而不是
OpenCV窗口 @DanMašek -
对...所以我想要么自己制作简单的渲染器,要么将 matplotlib 输出到内存中的图像中,然后用
imshow显示出来...虽然这似乎有点过头了.自己画应该很糟糕......我能看到的最糟糕的事情是摆弄文本的定位/大小,以使其在各种大小的边界框下看起来合理。 -
您能否将其简化为在单个输入图像上运行(并将其提供为 PNG)和示例
class_IDs, scores, bounding_boxes值?然后我可以在不安装 mxnet 和查找/确定要使用的视频的情况下制定解决方案。 |顺便说一句,如果您想将原始frame用于可视化,您可能应该将原始frame存储为 BGR 格式。 (或者,gcv.data.transforms.presets.ssd.transform_test是如何修改框架的?)
标签: python opencv object-detection mxnet