class Classify(object): """ define gesture class """ def __init__(self, acl_resource, model_path, model_width, model_height): self._model_path = model_path self._model_width = model_width self._model_height = model_height self._dvpp = Dvpp(acl_resource) self._model = Model(model_path) def __del__(self): if self._dvpp: del self._dvpp print("[Sample] class Samle release source success") def pre_process(self, image): """ pre_precess """ yuv_image = self._dvpp.jpegd(image) resized_image = self._dvpp.resize(yuv_image, self._model_width, self._model_height) print("resize yuv end") return resized_image def inference(self, resized_image): """ inference """ return self._model.execute([ resized_image, ]) def post_process(self, infer_output, image_file): """ post_process """ print("post process") data = infer_output[0] vals = data.flatten() top_k = vals.argsort()[-1:-6:-1] print("images:{}".format(image_file)) print("======== top5 inference results: =============") for n in top_k: object_class = image_net_classes.get_image_net_class(n) print("label:%d confidence: %f, class: %s" % (n, vals[n], object_class)) #using pillow, the category with the highest confidence is written on the image and saved locally if len(top_k): object_class = image_net_classes.get_image_net_class(top_k[0]) output_path = os.path.join(os.path.join(SRC_PATH, "../outputs"), os.path.basename(image_file)) origin_img = Image.open(image_file) draw = ImageDraw.Draw(origin_img) font = ImageFont.load_default() draw.text((10, 50), object_class, font=font, fill=255) origin_img.save(output_path)
class Classify(object): def __init__(self, model_path, model_width, model_height): self.device_id = 0 self.context = None self.stream = None self._model = None self.run_mode = None self._model_path = model_path self._model_width = model_width self._model_height = model_height self._dvpp = None def __del__(self): if self._model: del self._model if self._dvpp: del self._dvpp if self.stream: acl.rt.destroy_stream(self.stream) if self.context: acl.rt.destroy_context(self.context) acl.rt.reset_device(self.device_id) acl.finalize() print("[Sample] Sample release source success") def _init_resource(self): print("[Sample] init resource stage:") ret = acl.init() check_ret("acl.rt.set_device", ret) ret = acl.rt.set_device(self.device_id) check_ret("acl.rt.set_device", ret) self.context, ret = acl.rt.create_context(self.device_id) check_ret("acl.rt.create_context", ret) self.stream, ret = acl.rt.create_stream() check_ret("acl.rt.create_stream", ret) self.run_mode, ret = acl.rt.get_run_mode() check_ret("acl.rt.get_run_mode", ret) print("Init resource stage success") def init(self): self._init_resource() self._dvpp = Dvpp(self.stream, self.run_mode) ret = self._dvpp.init_resource() if ret != SUCCESS: print("Init dvpp failed") return FAILED self._model = Model(self.run_mode, self._model_path) ret = self._model.init_resource() if ret != SUCCESS: print("Init model failed") return FAILED return SUCCESS def pre_process(self, image): yuv_image = self._dvpp.jpegd(image) print("decode jpeg end") resized_image = self._dvpp.resize(yuv_image, self._model_width, self._model_height) print("resize yuv end") return resized_image def inference(self, resized_image): return self._model.execute(resized_image.data(), resized_image.size) def post_process(self, infer_output, image_file): print("post process") data = infer_output[0] vals = data.flatten() top_k = vals.argsort()[-1:-6:-1] object_class = get_image_net_class(top_k[0]) output_path = os.path.join(os.path.join(SRC_PATH, "../outputs/"), 'out_' + os.path.basename(image_file)) origin_img = Image.open(image_file) draw = ImageDraw.Draw(origin_img) font = ImageFont.load_default() font.size = 50 draw.text((10, 50), object_class, font=font, fill=255) origin_img.save(output_path) object_class = get_image_net_class(top_k[0]) return object_class
class Cartoonization(object): def __init__(self, model_path, model_width, model_height): self.device_id = 0 self.context = None self.stream = None self._model_path = model_path self._model_width = model_width self._model_height = model_height self._dvpp = None def __del__(self): if self._model: del self._model if self._dvpp: del self._dvpp if self.stream: acl.rt.destroy_stream(self.stream) if self.context: acl.rt.destroy_context(self.context) acl.rt.reset_device(self.device_id) acl.finalize() print("[Sample] class Samle release source success") def _init_resource(self): print("[Sample] init resource stage:") ret = acl.init() check_ret("acl.rt.set_device", ret) ret = acl.rt.set_device(self.device_id) check_ret("acl.rt.set_device", ret) self.context, ret = acl.rt.create_context(self.device_id) check_ret("acl.rt.create_context", ret) self.stream, ret = acl.rt.create_stream() check_ret("acl.rt.create_stream", ret) self.run_mode, ret = acl.rt.get_run_mode() check_ret("acl.rt.get_run_mode", ret) print("[Sample] Init resource stage success") def init(self): # init acl resource self._init_resource() self._dvpp = Dvpp(self.stream, self.run_mode) # init dvpp ret = self._dvpp.init_resource() if ret != SUCCESS: print("Init dvpp failed") return FAILED # load model self._model = Model(self.run_mode, self._model_path) ret = self._model.init_resource() if ret != SUCCESS: print("Init model failed") return FAILED return SUCCESS def pre_process(self, image): yuv_image = self._dvpp.jpegd(image) crop_and_paste_image = \ self._dvpp.crop_and_paste(yuv_image, image.width, image.height, self._model_width, self._model_height) print("[Sample] crop_and_paste yuv end") return crop_and_paste_image def inference(self, resized_image): return self._model.execute(resized_image.data(), resized_image.size) def post_process(self, infer_output, image_file, origin_image): print("[Sample] post process") data = ((np.squeeze(infer_output[0]) + 1) * 127.5) img = cv2.cvtColor(data, cv2.COLOR_RGB2BGR) img = cv2.resize(img, (origin_image.width, origin_image.height)) output_path = os.path.join("../outputs", os.path.basename(image_file)) cv2.imwrite(output_path, img)
class Classify(object): def __init__(self, model_path, model_width, model_height): self.device_id = 0 self.context = None self.stream = None self._model_path = model_path self._model_width = model_width self._model_height = model_height self._dvpp = None def __del__(self): if self._model: del self._model if self._dvpp: del self._dvpp if self.stream: acl.rt.destroy_stream(self.stream) if self.context: acl.rt.destroy_context(self.context) acl.rt.reset_device(self.device_id) acl.finalize() print("[Sample] class Samle release source success") def destroy(self): self.__del__ def _init_resource(self): print("[Sample] init resource stage:") #ret = acl.init() #check_ret("acl.rt.set_device", ret) ret = acl.rt.set_device(self.device_id) check_ret("acl.rt.set_device", ret) self.context, ret = acl.rt.create_context(self.device_id) check_ret("acl.rt.create_context", ret) self.stream, ret = acl.rt.create_stream() check_ret("acl.rt.create_stream", ret) self.run_mode, ret = acl.rt.get_run_mode() check_ret("acl.rt.get_run_mode", ret) print("Init resource stage success") def init(self): self._init_resource() self._dvpp = Dvpp(self.stream, self.run_mode) ret = self._dvpp.init_resource() if ret != SUCCESS: print("Init dvpp failed") return FAILED self._model = Model(self.run_mode, self._model_path) ret = self._model.init_resource() if ret != SUCCESS: print("Init model failed") return FAILED return SUCCESS def pre_process(self, image): yuv_image = self._dvpp.jpegd(image) print("decode jpeg end") resized_image = self._dvpp.resize(yuv_image, self._model_width, self._model_height) print("resize yuv end") return resized_image def inference(self, resized_image): return self._model.execute(resized_image.data(), resized_image.size) def post_process(self, infer_output, image_file): print("post process") data = infer_output[0] vals = data.flatten() top_k = vals.argsort()[-1:-6:-1] print("images:{}".format(image_file)) print("======== top5 inference results: =============") for n in top_k: object_class = get_image_net_class(n) print("label:%d confidence: %f, class: %s" % (n, vals[n], object_class)) object_class = get_image_net_class(top_k[0]) return object_class
class Classify(object): def __init__(self, acl_resource, model_path, model_width, model_height): self.total_buffer = None self._model_path = model_path self._model_width = model_width self._model_height = model_height self._model = Model(model_path) self._dvpp = Dvpp(acl_resource) print("The App arg is __init__") def __del__(self): if self.total_buffer: acl.rt.free(self.total_buffer) if self._dvpp: del self._dvpp print("[Sample] class Samle release source success") def pre_process(self, image): yuv_image = self._dvpp.jpegd(image) print("decode jpeg end") resized_image = self._dvpp.resize(yuv_image, self._model_width, self._model_height) print("resize yuv end") return resized_image def batch_process(self, resized_image_list, batch): resized_img_data_list = [] resized_img_size = resized_image_list[0].size total_size = batch * resized_img_size stride = 0 for resized_image in resized_image_list: resized_img_data_list.append(resized_image.data()) self.total_buffer, ret = acl.rt.malloc(total_size, ACL_MEM_MALLOC_HUGE_FIRST) check_ret("acl.rt.malloc", ret) for i in range(len(resized_image_list)): ret = acl.rt.memcpy(self.total_buffer + stride, resized_img_size,\ resized_img_data_list[i], resized_img_size,\ ACL_MEMCPY_DEVICE_TO_DEVICE) check_ret("acl.rt.memcpy", ret) stride += resized_img_size return total_size def inference(self, resized_image_list, batch): total_size = self.batch_process(resized_image_list, batch) batch_buffer = {'data': self.total_buffer, 'size':total_size} return self._model.execute([batch_buffer, ]) def post_process(self, infer_output, batch_image_files, number_of_images): print("post process") datas = infer_output[0] for number in range(number_of_images): data = datas[number] vals = data.flatten() top_k = vals.argsort()[-1:-6:-1] print("images:{}".format(batch_image_files[number])) print("======== top5 inference results: =============") for n in top_k: object_class = get_image_net_class(n) print("label:%d confidence: %f, class: %s" % (n, vals[n], object_class)) #Use Pillow to write the categories with the highest confidence on the image and save them locally if len(top_k): object_class = get_image_net_class(top_k[0]) output_path = os.path.join("../outputs", os.path.basename(batch_image_files[number])) origin_img = Image.open(batch_image_files[number]) draw = ImageDraw.Draw(origin_img) font = ImageFont.truetype("SourceHanSansCN-Normal.ttf", size=30) draw.text((10, 50), object_class, font=font, fill=255) origin_img.save(output_path)