| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # coding: utf8
- # Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import argparse
- import os
- import os.path as osp
- import cv2
- import numpy as np
- import tqdm
- import paddlex as pdx
- from paddlex.seg import transforms
- def parse_args():
- parser = argparse.ArgumentParser(
- description='HumanSeg prediction and visualization')
- parser.add_argument(
- '--model_dir',
- dest='model_dir',
- help='Model path for prediction',
- type=str)
- parser.add_argument(
- '--data_dir',
- dest='data_dir',
- help='The root directory of dataset',
- type=str)
- parser.add_argument(
- '--test_list',
- dest='test_list',
- help='Test list file of dataset',
- type=str)
- parser.add_argument(
- '--save_dir',
- dest='save_dir',
- help='The directory for saving the inference results',
- type=str,
- default='./output/result')
- parser.add_argument(
- "--image_shape",
- dest="image_shape",
- help="The image shape for net inputs.",
- nargs=2,
- default=[192, 192],
- type=int)
- return parser.parse_args()
- def infer(args):
- def makedir(path):
- sub_dir = osp.dirname(path)
- if not osp.exists(sub_dir):
- os.makedirs(sub_dir)
- test_transforms = transforms.Compose(
- [transforms.Resize(args.image_shape), transforms.Normalize()])
- model = pdx.load_model(args.model_dir)
- added_saved_path = osp.join(args.save_dir, 'added')
- mat_saved_path = osp.join(args.save_dir, 'mat')
- scoremap_saved_path = osp.join(args.save_dir, 'scoremap')
- with open(args.test_list, 'r') as f:
- files = f.readlines()
- for file in tqdm.tqdm(files):
- file = file.strip()
- im_file = osp.join(args.data_dir, file)
- im = cv2.imread(im_file)
- result = model.predict(im_file, transforms=test_transforms)
- # save added image
- added_image = pdx.seg.visualize(
- im_file, result, weight=0.6, save_dir=None)
- added_image_file = osp.join(added_saved_path, file)
- makedir(added_image_file)
- cv2.imwrite(added_image_file, added_image)
- # save score map
- score_map = result['score_map'][:, :, 1]
- score_map = (score_map * 255).astype(np.uint8)
- score_map_file = osp.join(scoremap_saved_path, file)
- makedir(score_map_file)
- cv2.imwrite(score_map_file, score_map)
- # save mat image
- score_map = np.expand_dims(score_map, axis=-1)
- mat_image = np.concatenate([im, score_map], axis=2)
- mat_file = osp.join(mat_saved_path, file)
- ext = osp.splitext(mat_file)[-1]
- mat_file = mat_file.replace(ext, '.png')
- makedir(mat_file)
- cv2.imwrite(mat_file, mat_image)
- if __name__ == '__main__':
- args = parse_args()
- infer(args)
|