Files
AI-tianyan/python/.infer_server.py.swp

10 lines
16 KiB
Plaintext
Raw Normal View History

b0VIM 8.0W]<5D>i*P*yrootdavinci-mini~root/AI-tianyan/python/infer_server.py 3210#"! U
<00>
<00>
<00>
<00>
w
^
9

<00> <00> <00> <00> h 2  <00><00>LK*<00><00><00><00>P87<00><00><00><00>l-<00><00><00><00>e<<00><00><00><00>sW.<00><00><00>gA@<00><00>`.<00><00><00> resized = cv2.resize(img_bgr, (nw, nh), interpolation=cv2.INTER_LINEAR) nh, nw = int(h0 * scale), int(w0 * scale) scale = min(self.input_h / h0, self.input_w / w0) h0, w0 = img_bgr.shape[:2] """Letterbox → RGB → NCHW float32 [0,1]. Returns blob, scale, pad_top, pad_left.""" def preprocess(self, img_bgr): self.out_sizes.append(sz) self.out_bufs.append(buf) assert ret == 0 buf, ret = acl.rt.malloc(sz, ACL_MEM_MALLOC_NORMAL_ONLY) sz = acl.mdl.get_output_size_by_index(self.desc, i) for i in range(self.output_num): self.out_sizes = [] self.out_bufs = [] def _alloc_outputs(self): self.output_shapes.append(list(d["dims"])) assert ret == 0 d, ret = acl.mdl.get_output_dims(self.desc, i) for i in range(self.output_num): self.output_shapes = [] self.input_size = acl.mdl.get_input_size_by_index(self.desc, 0) self.input_w = self.input_shape[3] self.input_h = self.input_shape[2] self.input_shape = list(dims["dims"]) # [1, 3, H, W] assert ret == 0 dims, ret = acl.mdl.get_input_dims(self.desc, 0) self.output_num = acl.mdl.get_num_outputs(self.desc) self.input_num = acl.mdl.get_num_inputs(self.desc) assert ret == 0 ret = acl.mdl.get_desc(self.desc, self.model_id) self.desc = acl.mdl.create_desc() assert ret == 0, f"load_from_file failed ret={ret}" self.model_id, ret = acl.mdl.load_from_file(path) def _load_model(self, path): assert ret == 0, f"create_context failed ret={ret}" self.context, ret = acl.rt.create_context(self.device_id) assert ret == 0, f"set_device failed ret={ret}" ret = acl.rt.set_device(self.device_id) assert ret == 0, f"acl.init failed ret={ret}" ret = acl.init() def _init_acl(self): model_path, self.input_shape, self.output_num) log.info("model loaded path=%s input=%s outputs=%d", self._alloc_outputs() self._load_model(model_path) self._init_acl() self.device_id = device_id def __init__(self, model_path, device_id):class AclModel: return [str(i) for i in range(1000)] return [l.strip() for l in f if l.strip()] with open(path) as f: if path and os.path.exists(path):def load_names(path):ACL_MEMCPY_DEVICE_TO_HOST = 2ACL_MEMCPY_HOST_TO_DEVICE = 1ACL_MEM_MALLOC_NORMAL_ONLY = 0OUTPUT_FMT = os.getenv("OUTPUT_FORMAT", "raw") # raw | nms_freeNAMES_FILE = os.getenv("NAMES_FILE", "")DEVICE_ID = int(os.getenv("DEVICE_ID", "0"))IOU_TH = float(os.getenv("IOU_THRESHOLD", "0.45"))CONF_TH = float(os.getenv("CONF_THRESHOLD", "0.5"))MODEL_PATH = os.getenv("OM_MODEL", "model.om")SOCK_PATH = os.getenv("INFER_SOCKET", "/tmp/edge-infer.sock")log = logging.getLogger(__name__)logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")import aclimport cv2import numpy as npimport loggingimport base64import socketimport structimport jsonimport os""" nms_free — YOLOv10 style [1, topk, 6], already NMS'd by model raw — YOLOv8 style [1, 4+nc, anchors], NMS applied in PythonOutput formats (OUTPUT_FORMAT env):Socket protocol unchanged: 4-byte big-endian length prefix + JSON body.Replaces ultralytics/PyTorch with ACL for Atlas 200I DK2.Edge inference server — Ascend NPU (CANN ACL) backend."""#!/usr/bin/env python3ad <00> <00><00><00><00>q5 <00><00><00><00>}ZI-<00> <00> <00> N &  <00> <00> <00> <00> <00> <00> <00> <00>