examples/a121/algo/distance/post_process_distance_result.py

examples/a121/algo/distance/post_process_distance_result.py#

 1# Copyright (c) Acconeer AB, 2023-2025
 2# All rights reserved
 3
 4import argparse
 5
 6import h5py
 7import matplotlib.pyplot as plt
 8
 9from acconeer.exptool.a121 import H5Record, _ReplayingClient, _StopReplay
10from acconeer.exptool.a121.algo.distance import Detector, DetectorContext
11from acconeer.exptool.a121.algo.distance._context import detector_context_timeline
12from acconeer.exptool.a121.algo.distance._detector import detector_config_timeline
13
14
15def main():
16    parser = argparse.ArgumentParser()
17    parser.add_argument("--input-file")
18
19    args = parser.parse_args()
20
21    with h5py.File(args.input_file, "r") as file:
22        algo_group = file["algo"]
23
24        sensor_ids = algo_group["sensor_ids"][()].tolist()
25        detector_config = detector_config_timeline.migrate(
26            algo_group["detector_config"][()].decode()
27        )
28        context_group = algo_group["context"]
29        context: DetectorContext = detector_context_timeline.migrate(context_group)
30
31        record = H5Record(file)
32        client = _ReplayingClient(record, realtime_replay=False)
33
34        detector = Detector(
35            client=client,
36            sensor_ids=sensor_ids,
37            detector_config=detector_config,
38            context=context,
39        )
40
41        detector.start()
42
43        fig, axs = plt.subplots(ncols=2, sharex=True)
44        fig.set_figwidth(15)
45
46        while True:
47            try:
48                result = detector.get_next()
49
50                for processor_result in result[sensor_ids[0]].processor_results:
51                    axs[0].plot(
52                        processor_result.extra_result.distances_m,
53                        processor_result.extra_result.abs_sweep,
54                        "b",
55                    )
56                    axs[0].plot(
57                        processor_result.extra_result.distances_m,
58                        processor_result.extra_result.used_threshold,
59                        "r",
60                    )
61
62                axs[1].plot(result[sensor_ids[0]].distances, result[sensor_ids[0]].strengths, "k.")
63            except _StopReplay:
64                break
65
66    axs[0].legend(["Sweep", "Threshold"], loc="upper left")
67
68    axs[0].set_xlabel("Distance (m)")
69    axs[0].set_ylabel("Amplitude")
70    axs[0].grid()
71
72    axs[1].set_xlabel("Distance (m)")
73    axs[1].set_ylabel("Strength")
74    axs[1].grid()
75
76    plt.legend()
77    plt.suptitle(args.input_file)
78    plt.show()
79
80
81if __name__ == "__main__":
82    main()

View this example on GitHub: acconeer/acconeer-python-exploration