| | |
| | | self.get_output_details() |
| | | |
| | | def idengify(self, image): |
| | | input_tensor, ratio = self.prepare_input(image) |
| | | input_tensor = self.prepare_input(image) |
| | | |
| | | # Perform inference on the image |
| | | outputs = self.inference(input_tensor) |
| | |
| | | input_img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) |
| | | |
| | | # Resize图片不要直接使用resize,需要按比例缩放,空白区域填空纯色即可 |
| | | input_img, ratio = self.ratioresize(input_img) |
| | | # input_img = self.ratioresize(input_img) |
| | | # 启用中心裁剪 |
| | | input_img = self.center_crop(input_img) |
| | | |
| | | # Scale input pixel values to 0 to 1 |
| | | input_img = input_img / 255.0 |
| | | input_img = input_img.transpose(2, 0, 1) |
| | | input_tensor = input_img[np.newaxis, :, :, :].astype(np.float32) |
| | | |
| | | return input_tensor, ratio |
| | | return input_tensor |
| | | |
| | | def inference(self, input_tensor): |
| | | start = time.perf_counter() |
| | |
| | | |
| | | padded_img[: new_unpad[1], : new_unpad[0]] = im |
| | | padded_img = np.ascontiguousarray(padded_img) |
| | | return padded_img, 1 / r |
| | | return padded_img |
| | | |
| | | |
| | | def center_crop(self, img): |
| | | # 新增中心裁剪方法 |
| | | h, w = img.shape[:2] |
| | | desired_h = self.input_height |
| | | desired_w = self.input_width |
| | | |
| | | # 如果图片尺寸大于目标尺寸,则进行中心裁剪 |
| | | if h > desired_h and w > desired_w: |
| | | start_y = (h - desired_h) // 2 |
| | | start_x = (w - desired_w) // 2 |
| | | end_y = start_y + desired_h |
| | | end_x = start_x + desired_w |
| | | return img[start_y:end_y, start_x:end_x] |
| | | else: |
| | | # 否则进行缩放 |
| | | return self.ratioresize(img) |