目前我使用的是经过自定义训练的标准Tensorflow对象检测脚本,我想更改绑定框的颜色以适应我的应用程序的性质。然而,我似乎找不到这样做的方法。例如,与其画一个绿色的框id,不如在检测到的对象周围画一个红色的框。提前谢谢!
在经历了很多麻烦之后,我找到了一种方法。我没有发现任何关于如何做到这一点的文档。有点像,因为有些颜色似乎不起作用。
打开"visualizations_utils.py"。应该在Lib\site packages\utils中。第41到63行是你的颜色。
行164正下方,
draw=ImageDraw.draw(图像(,
输入新行
color="粉红色">
保存它,您现在已经将颜色更改为粉红色。第175行,可以缩小标签文本。
有些颜色似乎不起作用,比如"红色"。
-
在标签映射pbtxt文件中添加"color"属性。即
项目{名称:"/m/01g317"id:1display_name:"个人"颜色:"粉红色"}
-
打开文件"research/object_detection/protos/string_int_label_map.proto"。添加以下行。
optional string color = 4;
注意分号和大括号。
-
然后需要序列化数据,因此从research运行以下命令文件夹
protoc object_detection/protos/*.proto --python_out=.
在此之前,您必须基于您的操作系统安装protobuf。
-
更改文件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'