def METHOD_NAME(image, dt_bboxes, dt_scores, dt_cls_names, input_id=None):
    im = Image.fromarray(image[:, :, ::-1])
    draw_thickness = min(im.size) // 320
    draw = ImageDraw.Draw(im)
    name_set = sorted(set(dt_cls_names))
    name2clsid = {name: i for i, name in enumerate(name_set)}
    clsid2color = {}
    color_list = get_color_map_list(len(name_set))
    for i in range(len(dt_bboxes)):
        box, score, name = dt_bboxes[i], dt_scores[i], dt_cls_names[i]
        if input_id is None:
            color = tuple(color_list[name2clsid[name]])
        else:
            color = get_id_color(input_id[i])
        xmin, ymin, xmax, ymax = box
        # draw bbox
        draw.line(
            [(xmin, ymin), (xmin, ymax), (xmax, ymax), (xmax, ymin),
             (xmin, ymin)],
            width=draw_thickness,
            fill=color)
        # draw label
        text = "{} {:.4f}".format(name, score)
        box = draw.textbbox((xmin, ymin), text, anchor='lt')
        draw.rectangle(box, fill=color)
        draw.text((box[0], box[1]), text, fill=(255, 255, 255))
    image = np.array(im)
    return image