File size: 2,478 Bytes
4dca198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import argparse
import os

import numpy as np
import axengine as axe
from PIL import Image


def preprocess(image_path, height=None, width=None):
    image = Image.open(image_path).convert("RGB")
    if height is not None and width is not None:
        image = image.resize((width, height), Image.BICUBIC)
    # 不做均值归一化,仅转 NCHW/RGB,保存为 uint8
    image_np = np.asarray(image).astype(np.uint8)
    image_np = np.transpose(image_np, (2, 0, 1))[np.newaxis, ...]
    return image_np, image


def postprocess(output):
    output = np.squeeze(output, axis=0)
    output = np.transpose(output, (1, 2, 0))
    output = np.clip(output, 0.0, 1.0)
    return Image.fromarray((output * 255.0).round().astype(np.uint8))


def infer_image(args):
    session = axe.InferenceSession(args.axmodel, providers=["AxEngineExecutionProvider"])
    input_name = session.get_inputs()[0].name
    output_name = session.get_outputs()[0].name

    input_tensor, hazy_image = preprocess(args.image, args.height, args.width)
    output = session.run([output_name], {input_name: input_tensor})[0]
    dehaze_image = postprocess(output)

    output_dir = os.path.dirname(args.output)
    if output_dir:
        os.makedirs(output_dir, exist_ok=True)

    compare_image = Image.new("RGB", (hazy_image.width + dehaze_image.width, hazy_image.height))
    compare_image.paste(hazy_image, (0, 0))
    compare_image.paste(dehaze_image, (hazy_image.width, 0))
    compare_image.save(args.output)
    print("Comparison image saved to:", args.output)


def parse_args():
    parser = argparse.ArgumentParser(description="Run Light-DehazeNet axmodel inference on one image.")
    parser.add_argument("-m", "--axmodel", default="./LightDehazeNet.axmodel", help="path to axmodel model")
    parser.add_argument("-i", "--image", default='query_hazy_images/outdoor_natural/nh(5).png', help="path to input hazy image")
    parser.add_argument("-o", "--output", default="axmodel_dehaze.jpg", help="path to save side-by-side comparison image")
    parser.add_argument("--height", type=int, default=640, help="resize input to this height before inference")
    parser.add_argument("--width", type=int, default=480, help="resize input to this width before inference")
    args = parser.parse_args()

    if (args.height is None) != (args.width is None):
        parser.error("--height and --width must be specified together")
    return args


if __name__ == "__main__":
    infer_image(parse_args())