如何为Tensorflow对象检测python模型绑定框添加自定义颜色



目前我使用的是经过自定义训练的标准Tensorflow对象检测脚本,我想更改绑定框的颜色以适应我的应用程序的性质。然而,我似乎找不到这样做的方法。例如,与其画一个绿色的框id,不如在检测到的对象周围画一个红色的框。提前谢谢!

在经历了很多麻烦之后,我找到了一种方法。我没有发现任何关于如何做到这一点的文档。有点像,因为有些颜色似乎不起作用。

打开"visualizations_utils.py"。应该在Lib\site packages\utils中。第41到63行是你的颜色。

行164正下方,

draw=ImageDraw.draw(图像(,

输入新行

color="粉红色">

保存它,您现在已经将颜色更改为粉红色。第175行,可以缩小标签文本。

有些颜色似乎不起作用,比如"红色"。

  1. 在标签映射pbtxt文件中添加"color"属性。即

    项目{名称:"/m/01g317"id:1display_name:"个人"颜色:"粉红色"}

  2. 打开文件"research/object_detection/protos/string_int_label_map.proto"。添加以下行。

    optional string color = 4;
    

    注意分号和大括号。

  3. 然后需要序列化数据,因此从research运行以下命令文件夹

    protoc object_detection/protos/*.proto --python_out=.
    

    在此之前,您必须基于您的操作系统安装protobuf。

  4. 更改文件object_detection/utils/lable_map_util.py 的函数"convert_label_map_to_categories"的代码

    类别=[]list_of_ids_already_added=[]如果不是label_map:label_id_offset=1对于范围(max_num_classes(中的class_id:categories.append({"id":class_id+label_id_offset,"name":"category_{}".format(class_id+label_id_offset(})退货类别对于label_map.item:中的项目

    if not 0 < item.id <= max_num_classes:
    logging.info(
    'Ignore item %d since it falls outside of requested '
    'label range.', item.id)
    continue
    if use_display_name and item.HasField('display_name'):
    name = item.display_name
    else:
    name = item.name
    if use_display_name and item.HasField('color'):
    color = item.color
    else:
    color = ''
    if item.id not in list_of_ids_already_added:
    list_of_ids_already_added.append(item.id)
    categories.append({'id': item.id, 'name': name, 'color': color})          
    return categories
    

5.打开文件"object_detection/utils/visualization_utils.py"。转到名为"visualize_boxes_and_labels_on_image_array"。添加以下代码

else:
if classes[i] in category_index.keys():
class_color = category_index[classes[i]]['color']
box_to_color_map[box] = class_color

代码之后

if agnostic_mode:
box_to_color_map[box] = 'DarkOrange'

最新更新