From 941e1ca986a627136f2febe25c71f425d633fee8 Mon Sep 17 00:00:00 2001 From: luckyxue0908 Date: Thu, 26 Mar 2026 17:29:50 +0800 Subject: [PATCH] add gesture python demo Signed-off-by: luckyxue0908 --- examples/gesture/README.md | 178 ++++++++++++++++ examples/gesture/Visualization.png | Bin 0 -> 69385 bytes examples/gesture/cpp/.gitkeep | 0 examples/gesture/model/.gitkeep | 0 examples/gesture/py/.gitkeep | 0 examples/gesture/py/gesture.py | 323 +++++++++++++++++++++++++++++ examples/gesture/result1.jpg | Bin 0 -> 104759 bytes examples/gesture/result2.jpg | Bin 0 -> 107138 bytes 8 files changed, 501 insertions(+) create mode 100755 examples/gesture/README.md create mode 100755 examples/gesture/Visualization.png create mode 100755 examples/gesture/cpp/.gitkeep create mode 100755 examples/gesture/model/.gitkeep create mode 100755 examples/gesture/py/.gitkeep create mode 100755 examples/gesture/py/gesture.py create mode 100755 examples/gesture/result1.jpg create mode 100755 examples/gesture/result2.jpg diff --git a/examples/gesture/README.md b/examples/gesture/README.md new file mode 100755 index 0000000..b1dde8e --- /dev/null +++ b/examples/gesture/README.md @@ -0,0 +1,178 @@ +# gesture + +## 1.Overview + + +## 2.Model Download + +- **Open Source model** + + - **Open Source projects:** + + - **Export Model Step:** + + - **Install ultralytics** + + pip install torch==2.4.1 + + pip install torchvision==0.19.1 + + pip install ultralytics==8.3.0 + + - **Download weights** + + + + - **Export Model** + + + + +- **Exported Model** + + ​ link to amlogic server( **onnx model or quantized tflite**) + + + +## 3. Model Conversion + +``` +cd model +Usage: ./adla_covnert.sh model_path adla_tookkit_path target_platform + +example + +``` + +| Parameter | Discription | +| ----------------- | ------------------------------------------------------------ | +| model_path | onnx model path | +| adla_tookkit_path | path to adla_toolkit | +| target_platform | Specify target platform. for A311D2 : PRODUCT_PID0XA003. for S905X5: PRODUCT_PID0XA005 | + + + +## 4. Demo Run + +### CPP + +#### 1. Compile + +**Prerequisites:** +- Android NDK (r25e recommended) +- `ANDROID_NDK_PATH` environment variable set + +**Build:** +```bash +# Build for arm64-v8a +cd examples/gesture/cpp +./build-android.sh -a arm64-v8a +``` + +The executable will be generated at `build/android/gesture_demo` (Note: executable name may vary, verify in build folder). + +#### 2. Run + +```bash +# Push executable to device +adb push build/android/gesture_demo /data/local/tmp/ +adb push model/gesture_int8_A311D2.adla /data/local/tmp/ +adb push imgs /data/local/tmp/ + +# Run on device +adb shell +cd /data/local/tmp +chmod +x gesture_demo +export LD_LIBRARY_PATH=/vendor/lib64 or (/vendor/lib) + +# Usage: ./gesture_demo +./gesture_demo gesture_int8_A311D2.adla ./imgs +``` + +**Note:** Replace `gesture_int8_A311D2.adla` with your actual model file path. + +### Python + +**Prerequisites:** +- Python 3.10 +- Required packages: `numpy`, `opencv-python`, `amlnnlite` + +**Install dependencies:** +```bash +pip install numpy opencv-python amlnnlite-1.0.0-cp310-cp310-linux_aarch64.whl +``` + +**Run on device:** +```bash +python gesture.py \ + --model-path ./gesture_int8_A311D2.adla \ + --image-dir ./imgs \ + --run-cycles 1 \ + --loglevel INFO +``` + +Argument Descriptions: +| Argument | Description | +| ----------------- | ------------------------------------------------------------ | +| --board-work-path | Work path on board, default is /data/local/tmp | +| --model-path | path to .adla model | +| --image-dir | Directory containing test images | +| --run-cycles | Number of inference cycles, default is 1 | +| --loglevel | Logging level: DEBUG / INFO / WARNING / ERROR, default is WARNING | + +The script will automatically process all image files (`.jpg`, `.jpeg`, `.png`, `.bmp`) in the current directory and save results to a `{model_name}_result` folder. + +## 5.Results + +**Performance Feedback** + +By setting the loglevel to INFO, the program provides real-time performance metrics upon completion. The console log will display essential hardware and execution details, including: +- Hardware Information: System and ADLA library versions. +- Model Overview: Basic input/output configurations. +- NPU Metrics: Total inference time (latency) and total DRAM bandwidth consumption. + +**Detection Output** + +For each image, the program prints the processing information, including inference performance (average time, FPS, and bandwidth), detection results (number of objects, predicted gesture class, confidence score, and bounding box coordinates), and the path to the saved output image. + +```bash +============================================================ +Processing image 2/2: test2.jpg +============================================================ +I Average time: 29.27002716064453 ms +I FPS: 34.164642333984375 +I Bandwidth: 48.25823974609375 Mbytes + Detected 1 objects: + 1. class=like + score=0.800 + box=[335, 169, 591, 475] + Result saved to: gesture_result/test2.jpg +============================================================ +``` + + +The output images, featuring bounding boxes and gesture labels, will be saved to the `gesture_result` folder. + + +You can pull the result folder back to view it: +```bash +adb pull /data/local/tmp/gesture_result +``` +![alt text](result2.jpg) ![alt text](result1.jpg) + + + +**Profiling Visualization** + +When `--loglevel` is set to `INFO`, a successful run of the Python demo will generate a folder named after the model (e.g., {model_name}) in the script directory. This folder contains 5 HTML files that provide a visual and detailed breakdown of per-layer performance: +- `hard_op_chart.html` & `soft_op_chart.html`: Hardware/Software op execution details. +- `dram_rd_chart.html` & `dram_wr_chart.html`: Bandwidth read/write distribution. +- `pie_charts_distribution.html`: Overall resource allocation. + +You can pull the result folder back to view it: +```bash +adb pull /data/local/tmp/gesture_int8_A311D2 +``` + +Taking hard_op_chart.html as an example (shown below), each layer's ADLA operator name includes parentheses containing the index of the corresponding quantized .tflite layer(s); by default, these indices are suppressed, and operators are labeled generically as "hardware" or "software" without numerical suffixes. +![alt text](Visualization.png) diff --git a/examples/gesture/Visualization.png b/examples/gesture/Visualization.png new file mode 100755 index 0000000000000000000000000000000000000000..d5d1c05c4bc0f6c22b2fbe9603c68ceab5b24b89 GIT binary patch literal 69385 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

fJ-_WIYp^07TjW=(-SaKWm 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 np.ndarray: + x = boxes[:, 0] + y = boxes[:, 1] + w = boxes[:, 2] + h = boxes[:, 3] + x1 = x - w / 2.0 + y1 = y - h / 2.0 + x2 = x + w / 2.0 + y2 = y + h / 2.0 + return np.stack([x1, y1, x2, y2], axis=1) + + +def box_iou_one(box: np.ndarray, boxes: np.ndarray) -> np.ndarray: + x1 = np.maximum(box[0], boxes[:, 0]) + y1 = np.maximum(box[1], boxes[:, 1]) + x2 = np.minimum(box[2], boxes[:, 2]) + y2 = np.minimum(box[3], boxes[:, 3]) + + inter_w = np.maximum(0.0, x2 - x1) + inter_h = np.maximum(0.0, y2 - y1) + inter = inter_w * inter_h + + area1 = np.maximum(0.0, box[2] - box[0]) * np.maximum(0.0, box[3] - box[1]) + area2 = np.maximum(0.0, boxes[:, 2] - boxes[:, 0]) * np.maximum(0.0, boxes[:, 3] - boxes[:, 1]) + + union = area1 + area2 - inter + 1e-6 + return inter / union + + +def nms(boxes: np.ndarray, scores: np.ndarray, iou_thres: float = 0.45): + order = np.argsort(-scores) + keep = [] + + while len(order) > 0: + i = order[0] + keep.append(i) + if len(order) == 1: + break + ious = box_iou_one(boxes[i], boxes[order[1:]]) + order = order[1:][ious <= iou_thres] + + return keep + + +def decode_one_output(y: np.ndarray, g: int, stride: float, anchor_grid: np.ndarray) -> np.ndarray: + y = np.transpose(y, (0, 1, 3, 2)) + y = y.reshape(1, g, g, 3, 24) + y = np.transpose(y, (0, 3, 1, 2, 4)) + + yv, xv = np.meshgrid(np.arange(g), np.arange(g), indexing='ij') + grid = np.stack((xv, yv), axis=-1).reshape(1, 1, g, g, 2).astype(np.float32) + + xy = (y[..., 0:2] * 2.0 - 0.5 + grid) * stride + wh = (y[..., 2:4] * 2.0) ** 2 * anchor_grid + obj = y[..., 4:5] + cls = y[..., 5:] + + decoded = np.concatenate([xy, wh, obj, cls], axis=-1) + decoded = decoded.reshape(1, 3 * g * g, 24) + return decoded + + +def decode_outputs(output_tensors): + decoded_all = [] + for i, y in enumerate(output_tensors): + decoded = decode_one_output( + y=y, + g=GRIDS[i], + stride=STRIDES[i], + anchor_grid=ANCHOR_GRIDS[i] + ) + decoded_all.append(decoded) + + pred = np.concatenate(decoded_all, axis=1) + return pred[0] + + +def postprocess(pred: np.ndarray, conf_thres: float = 0.25, nms_thres: float = 0.45): + boxes_xywh = pred[:, 0:4] + obj = pred[:, 4] + cls_scores = pred[:, 5:] + + class_ids = np.argmax(cls_scores, axis=1) + class_scores = np.max(cls_scores, axis=1) + scores = obj * class_scores + + mask = scores > conf_thres + if mask.sum() == 0: + return [], [], [] + + sel_boxes_xywh = boxes_xywh[mask] + sel_scores = scores[mask] + sel_class_ids = class_ids[mask] + + sel_boxes_xyxy = xywh2xyxy(sel_boxes_xywh) + + final_boxes = [] + final_scores = [] + final_class_ids = [] + + unique_classes = np.unique(sel_class_ids) + for cid in unique_classes: + cls_mask = sel_class_ids == cid + cls_boxes = sel_boxes_xyxy[cls_mask] + cls_scores_part = sel_scores[cls_mask] + + keep = nms(cls_boxes, cls_scores_part, iou_thres=nms_thres) + for k in keep: + final_boxes.append(cls_boxes[k].copy()) + final_scores.append(float(cls_scores_part[k])) + final_class_ids.append(int(cid)) + + if len(final_boxes) == 0: + return [], [], [] + + final_boxes = np.asarray(final_boxes, dtype=np.float32) + final_scores = np.asarray(final_scores, dtype=np.float32) + final_class_ids = np.asarray(final_class_ids, dtype=np.int32) + + order = np.argsort(-final_scores) + return final_boxes[order], final_scores[order], final_class_ids[order] + + +def scale_boxes_to_original(boxes_xyxy: np.ndarray, orig_w: int, orig_h: int): + if len(boxes_xyxy) == 0: + return boxes_xyxy + + scale_x = orig_w / float(INPUT_SIZE) + scale_y = orig_h / float(INPUT_SIZE) + + boxes = boxes_xyxy.copy() + boxes[:, [0, 2]] *= scale_x + boxes[:, [1, 3]] *= scale_y + + boxes[:, 0] = np.clip(boxes[:, 0], 0, orig_w - 1) + boxes[:, 2] = np.clip(boxes[:, 2], 0, orig_w - 1) + boxes[:, 1] = np.clip(boxes[:, 1], 0, orig_h - 1) + boxes[:, 3] = np.clip(boxes[:, 3], 0, orig_h - 1) + + return boxes + + +def draw_detections(bgr: np.ndarray, boxes, scores, class_ids): + vis = bgr.copy() + h, w = vis.shape[:2] + + font_scale = max(0.8, min(w, h) / 600.0) + font_thickness = max(2, int(min(w, h) / 300)) + box_thickness = max(2, int(min(w, h) / 250)) + + for box, score, cid in zip(boxes, scores, class_ids): + x1, y1, x2, y2 = box.astype(int) + label = f'{NAMES[int(cid)]} {float(score):.2f}' + + cv2.rectangle(vis, (x1, y1), (x2, y2), (0, 255, 0), box_thickness) + text_y = max(30, y1 - 10) + cv2.putText( + vis, label, (x1, text_y), + cv2.FONT_HERSHEY_SIMPLEX, + font_scale, (0, 255, 0), font_thickness, cv2.LINE_AA + ) + + return vis + + +def infer_bgr(amlnn, bgr, conf_thresh=0.25, nms_thresh=0.45): + inp, orig_w, orig_h = preprocess_bgr(bgr) + + outputs = amlnn.inference(inp, inputs_data_format='NHWC') + output_tensors = [np.asarray(out) for out in outputs] + + def get_grid_num(x): + s = np.asarray(x).shape + if len(s) != 4: + raise ValueError(f"Unexpected output shape: {s}") + return int(s[1]) + + output_tensors = sorted(output_tensors, key=get_grid_num) # 400, 1600, 6400 + + pred = decode_outputs(output_tensors) + boxes, scores, class_ids = postprocess(pred, conf_thres=conf_thresh, nms_thres=nms_thresh) + boxes = scale_boxes_to_original(boxes, orig_w, orig_h) + + boxes_xyxy = [tuple(map(int, box)) for box in boxes] + scores = [float(x) for x in scores] + class_ids = [int(x) for x in class_ids] + + return boxes_xyxy, scores, class_ids + + +def main(): + parser = argparse.ArgumentParser(description="Gesture AMLNNLite Demo") + parser.add_argument('--board-work-path', type=str, default='/data/local/tmp') + parser.add_argument('--model-path', required=True, help='Path to .adla model') + parser.add_argument('--image-dir', required=True, help='Directory of test images') + parser.add_argument('--run-cycles', type=int, default=1, help='Inference cycles') + parser.add_argument('--loglevel', type=str, default='WARNING', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR']) + parser.add_argument('--conf-thres', type=float, default=0.25) + parser.add_argument('--nms-thres', type=float, default=0.3) + parser.add_argument('--top1-only', action='store_true', help='Only keep the highest score detection') + args = parser.parse_args() + + amlnn = AMLNNLite() + amlnn.config( + board_work_path=args.board_work_path, + model_path=args.model_path, + run_cycles=args.run_cycles, + loglevel=args.loglevel + ) + amlnn.init() + + image_files = sorted(glob.glob(os.path.join(args.image_dir, "*.[jp][pn][g]"))) + if not image_files: + print(f"No images found in {args.image_dir}") + amlnn.uninit() + return + + res_dir = "gesture_result" + os.makedirs(res_dir, exist_ok=True) + + for idx, img_path in enumerate(image_files, start=1): + print("=" * 60) + print(f"Processing image {idx}/{len(image_files)}: {Path(img_path).name}") + print("=" * 60) + + img = cv2.imread(img_path) + if img is None: + print(f"Failed to read: {img_path}") + continue + + boxes, scores, class_ids = infer_bgr( + amlnn, img, + conf_thresh=args.conf_thres, + nms_thresh=args.nms_thres + ) + + if args.top1_only and len(boxes) > 0: + max_idx = int(np.argmax(np.array(scores))) + boxes = [boxes[max_idx]] + scores = [scores[max_idx]] + class_ids = [class_ids[max_idx]] + + if len(boxes) == 0: + print(" No objects detected") + vis = img.copy() + else: + print(f" Detected {len(boxes)} objects:") + for i, (box, score, cid) in enumerate(zip(boxes, scores, class_ids), 1): + print(f" {i}. class={NAMES[int(cid)]}") + print(f" score={float(score):.3f}") + print(f" box={list(map(int, box))}") + vis = draw_detections(img, np.array(boxes), np.array(scores), np.array(class_ids)) + + save_path = os.path.join(res_dir, Path(img_path).name) + cv2.imwrite(save_path, vis) + print(f" Result saved to: {save_path}") + + if args.loglevel == 'INFO': + print("\nPerformance analysis visualization starting...") + + amlnn.visualize() + amlnn.uninit() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/examples/gesture/result1.jpg b/examples/gesture/result1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..1f7fd081f79cabd5b4c801a026d76b70ebb67d07 GIT binary patch literal 104759 zcmbTdXFyX~+XWg##j#;SY!Dp_h+swqQCegW5fCH2sN_|ogAtJuN{%B63Q7hL7(oe& zv;>Gq6AWaOrXYqAKtPGqP$eWJgp`xJ!~5O)-5>YIy%#kCXPQ%*0Y}H$iB&b zA~so_vpk1TP(UCQz#oKc0AYq$p&!tyGkMu3EWLapme&t5+}oQ~GVqYNg+l zRK)mo+1O3O|DKYhslMQmQP!bNefqQdWp z6`K_lH!H{*5J=F^RmE)XJf0lkwvFqR*IC1^@5ldI zv+d8Mm!%(m+ke82qjLRr$J*@&bcYVk%ZIi+vj2AjyZ8TVWdGN|{&!sci1msJ;NdB5 zMxYU*df2Ub)D$WDhd%Zg%WHXkACKmKL`f9mU(@0~r5VW(j2-j^N6Yo-nv$5u`=&|1 z56BRR;XL8G8X#WAfoqV?{?V?$R(7G! zeR0%yA!Z2|iLj*64v(%aG$KYIykDRt;zk+bZjeJ(fDFN#3zUCvXFD3%zOwF){1>XQ zLL-KkFJ=AGkzYg2QYm8j9v5`zoQ+!8N*fu%NC%qx;_&p6f`BNx_TLLEm4R;8R)KRZ z%@G#5U2UD~aAKZ{bB3>^2)`L({X=e$l4

eUTAz`k?d&A~OH(5Xpvfj_4tX#QpFs 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 z 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