12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- from maix import nn, camera, image, display
- from maix.nn import decoder
- import time
- model = {
- "param": "/home/model/yolo2_20class_awnn.param",
- "bin": "/home/model/yolo2_20class_awnn.bin"
- }
- options = {
- "model_type": "awnn",
- "inputs": {
- "input0": (224, 224, 3)
- },
- "outputs": {
- "output0": (7, 7, (1+4+20)*5)
- },
- "mean": [127.5, 127.5, 127.5],
- "norm": [0.0078125, 0.0078125, 0.0078125],
- }
- labels = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
- anchors = [5.4, 5.38, 1.65, 2.09, 0.8, 1.83, 2.45, 4.14, 0.46, 0.8]
- m = nn.load(model, opt=options)
- yolo2_decoder = decoder.Yolo2(len(labels), anchors, net_in_size=(options["inputs"]["input0"][0], options["inputs"]["input0"][1]), net_out_size=(7, 7))
- while True:
- img = camera.capture()
- AI_img = img.copy().resize(224, 224)
- out = m.forward(AI_img.tobytes(), quantize=True, layout="hwc")
- boxes, probs = yolo2_decoder.run(out, nms=0.3, threshold=0.3, img_size=(options["inputs"]["input0"][0], options["inputs"]["input0"][1]))
- if len(boxes):
- for i, box in enumerate(boxes):
- class_id = probs[i][0]
- prob = probs[i][1][class_id]
- disp_str = "{}:{:.2f}%".format(labels[class_id], prob*100)
- img.draw_rectangle(box[0], box[1], box[0] + box[2], box[1] + box[3], color = (0, 255, 0), thickness=2)
- x = box[0]
- y = box[1] - 20
- if y < 0:
- y = 0
- img.draw_string(x, y, disp_str, 1.5, color = (255, 0, 0), thickness=2)
- display.show(img)
|