在利用官方提供的Tensorflow objection detection api 进行物体检测时,会有很多物体被检测出来并且被框柱,而我的目标是只需要一个类别的物体,那么如何将这个特定的物体抠出来保存呢?下面我就介绍一下实现的方法及代码。
比如下面这张图,被识别的物体有person和kite,我们的目标就是只将识别的人保存下来.。
在做这件事之前,先了解几个参数。
预测框中字体大小的调节:
在\models\research\object_detection\utils\visualization_utils.py脚本中的第174行
预测框线条大小的调节:
第一个参数: boxes:
官方解释:boxes: [N, max_detections, 4] float32 tensor of detection boxes.
boxes是[N, 4]的二维数字数组,[ymin, xmin, ymax, xmax]坐标采用[0,1]之间的标准化格式,如[3.70723009e-02 2.32388377e-02 8.62021029e-01 3.18440855e-01] 对应被检测到物体的矩形信息。由于是[0,1]之间的标准化格式,所以乘以图片的width和height就可以得到矩形框的实际大小。
print(boxes.shape())#(1, 100, 4)
print(boxes)
#结果如下:
(1, 100, 4)
[[[0.3893192 0.34821513 0.40933684 0.36334053]
[0.57497 0.06333599 0.6149571 0.07912395]
[0.67780834 0.07910287 0.83874995 0.12358559]
[0.08469409 0.4369094 0.17420965 0.4994243 ]
[0.07829238 0.24870682 0.40474242 0.42367953]
[0.08469409 0.4369094 0.17420965 0.4994243 ]
[0.36447126 0.00367826 0.9636777 0.14283133]
[0.00455514 0.42866302 0.5063168 0.66165733]
[0.1899012 0.32323682 0.47276065 0.46757388]
........................................
[0.16059408 0.09260845 0.37784013 0.69468033]
[0.67780834 0.07910287 0.83874995 0.12358559]]]
在\models\research\object_detection\utils\visualization_utils.py脚本中的第441行、第321行以及第626行的
def visualize_boxes_and_labels_on_image_array( )函数中定义了在图像上绘制的最大框数max_boxes_to_draw=20;可视化的最小得分阈值min_score_thresh=0.2. 这些参数都可以根据需要修改。