| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import sys |
| | import cv2 |
| | import numpy as np |
| | from ncnn.model_zoo import get_model |
| | from ncnn.utils import draw_detection_objects |
| |
|
| |
|
| | def draw_result(image, class_names, boxes, masks, classes, scores): |
| | colors = [ |
| | [56, 0, 255], |
| | [226, 255, 0], |
| | [0, 94, 255], |
| | [0, 37, 255], |
| | [0, 255, 94], |
| | [255, 226, 0], |
| | [0, 18, 255], |
| | [255, 151, 0], |
| | [170, 0, 255], |
| | [0, 255, 56], |
| | [255, 0, 75], |
| | [0, 75, 255], |
| | [0, 255, 169], |
| | [255, 0, 207], |
| | [75, 255, 0], |
| | [207, 0, 255], |
| | [37, 0, 255], |
| | [0, 207, 255], |
| | [94, 0, 255], |
| | [0, 255, 113], |
| | [255, 18, 0], |
| | [255, 0, 56], |
| | [18, 0, 255], |
| | [0, 255, 226], |
| | [170, 255, 0], |
| | [255, 0, 245], |
| | [151, 255, 0], |
| | [132, 255, 0], |
| | [75, 0, 255], |
| | [151, 0, 255], |
| | [0, 151, 255], |
| | [132, 0, 255], |
| | [0, 255, 245], |
| | [255, 132, 0], |
| | [226, 0, 255], |
| | [255, 37, 0], |
| | [207, 255, 0], |
| | [0, 255, 207], |
| | [94, 255, 0], |
| | [0, 226, 255], |
| | [56, 255, 0], |
| | [255, 94, 0], |
| | [255, 113, 0], |
| | [0, 132, 255], |
| | [255, 0, 132], |
| | [255, 170, 0], |
| | [255, 0, 188], |
| | [113, 255, 0], |
| | [245, 0, 255], |
| | [113, 0, 255], |
| | [255, 188, 0], |
| | [0, 113, 255], |
| | [255, 0, 0], |
| | [0, 56, 255], |
| | [255, 0, 113], |
| | [0, 255, 188], |
| | [255, 0, 94], |
| | [255, 0, 18], |
| | [18, 255, 0], |
| | [0, 255, 132], |
| | [0, 188, 255], |
| | [0, 245, 255], |
| | [0, 169, 255], |
| | [37, 255, 0], |
| | [255, 0, 151], |
| | [188, 0, 255], |
| | [0, 255, 37], |
| | [0, 255, 0], |
| | [255, 0, 170], |
| | [255, 0, 37], |
| | [255, 75, 0], |
| | [0, 0, 255], |
| | [255, 207, 0], |
| | [255, 0, 226], |
| | [255, 245, 0], |
| | [188, 255, 0], |
| | [0, 255, 18], |
| | [0, 255, 75], |
| | [0, 255, 151], |
| | [255, 56, 0], |
| | [245, 255, 0], |
| | ] |
| |
|
| | color_index = 0 |
| |
|
| | for box, mask, label, score in zip(boxes, masks, classes, scores): |
| | if score < 0.15: |
| | continue |
| |
|
| | print( |
| | "%s = %.5f at %.2f %.2f %.2f x %.2f\n" |
| | % (label, score, box[0], box[1], box[2], box[3]) |
| | ) |
| |
|
| | cv2.rectangle( |
| | image, |
| | (int(box[0]), int(box[1])), |
| | (int(box[0] + box[2]), int(int(box[1] + box[3]))), |
| | (255, 0, 0), |
| | ) |
| |
|
| | text = "%s %.1f%%" % (class_names[int(label)], score * 100) |
| |
|
| | label_size, baseLine = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1) |
| |
|
| | x = box[0] |
| | y = box[1] - label_size[1] - baseLine |
| | if y < 0: |
| | y = 0 |
| | if x + label_size[0] > image.shape[1]: |
| | x = image.shape[1] - label_size[0] |
| |
|
| | cv2.rectangle( |
| | image, |
| | (int(x), int(y)), |
| | (int(x + label_size[0]), int(y + label_size[1] + baseLine)), |
| | (255, 255, 255), |
| | -1, |
| | ) |
| |
|
| | cv2.putText( |
| | image, |
| | text, |
| | (int(x), int(y + label_size[1])), |
| | cv2.FONT_HERSHEY_SIMPLEX, |
| | 0.5, |
| | (0, 0, 0), |
| | ) |
| |
|
| | image[mask] = image[mask] * 0.5 + np.array(colors[color_index]) * 0.5 |
| | color_index += 1 |
| |
|
| | cv2.imshow("image", image) |
| | cv2.waitKey(0) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | if len(sys.argv) != 2: |
| | print("Usage: %s [imagepath]" % (sys.argv[0])) |
| | sys.exit(0) |
| |
|
| | imagepath = sys.argv[1] |
| | m = cv2.imread(imagepath) |
| | if m is None: |
| | print("cv2.imread %s failed\n" % (imagepath)) |
| | sys.exit(0) |
| |
|
| | net = get_model( |
| | "yolact", |
| | target_size=550, |
| | confidence_threshold=0.05, |
| | nms_threshold=0.5, |
| | keep_top_k=200, |
| | num_threads=4, |
| | use_gpu=True, |
| | ) |
| |
|
| | boxes, masks, classes, scores = net(m) |
| |
|
| | draw_result(m, net.class_names, boxes, masks, classes, scores) |
| |
|