CelestialSurveyor

Форк
0
113 строк · 6.5 Кб
1

2
if __name__ == '__main__':
3
    from multiprocessing import freeze_support
4

5
    freeze_support()
6
    import argparse
7
    import os
8
    import sys
9

10
    from backend.find_asteroids import predict_asteroids, save_results, annotate_results
11
    from backend.progress_bar import ProgressBarCli
12
    from backend.source_data_v2 import SourceDataV2
13
    from logger.logger import get_logger
14
    from user_interface.main_window import start_ui
15

16
    logger = get_logger()
17

18
    version = "0.3.0"
19
    arg_parser = argparse.ArgumentParser(
20
        prog='CelestialSurveyor',
21
        description='It\'s is designed to analyze astronomical images with the primary goal of identifying and '
22
                    'locating asteroids and comets within the vastness of the cosmic terrain')
23

24
    arg_parser.add_argument('-c', '--cli_mode', dest='cli_mode', action="store_true", default=False,
25
                            help='Run app in command line mode')
26
    arg_parser.add_argument('-s', '--source_folder', dest='source_folder', type=str, required=False,
27
                            help='Path to the folder with xisf or fit or fits files to be analyzed')
28
    arg_parser.add_argument('-o', '--output_folder', dest='output_folder', type=str, required=False,
29
                            help='Path to the folder where results will be stored')
30
    arg_parser.add_argument('--dark_folder', dest='dark_folder', type=str, required=False, default="",
31
                            help='Path to the folder with Dark frames (Optional)')
32
    arg_parser.add_argument('--flat_folder', dest='flat_folder', type=str, required=False, default="",
33
                            help='Path to the folder with Flat frames (Optional). Work only if DarkFlat '
34
                                 'folder is provided')
35
    arg_parser.add_argument('--dark_flat_folder', dest='dark_flat_folder', type=str, required=False,
36
                            default="",
37
                            help='Path to the folder with DarkFlat frames (Optional). Work only if DarkFlat '
38
                                 'folder is provided')
39
    arg_parser.add_argument('-m', '--model_path', dest='model_path',
40
                            type=str, default="",
41
                            required=False,
42
                            help='Path to the AI model file')
43
    arg_parser.add_argument('-n', '--non_linear', dest='non_linear', action="store_true", required=False,
44
                            help='Provide this key if the images are not in linear state')
45
    arg_parser.add_argument('-d', '--debayer', dest='debayer', action="store_true", required=False,
46
                            default=False, help='Debayer color FIT images if required')
47
    arg_parser.add_argument('-a', '--align', dest='align_images', action="store_true", required=False,
48
                            default=False, help='Do image alignment when loading')
49
    arg_parser.add_argument('-v', '--version', dest='version', action="store_true", required=False,
50
                            help='Display version of this app.')
51
    arg_parser.add_argument('-l', '--magnitude_limit', dest='magnitude_limit', type=float, required=False,
52
                            default='18.0')
53
    provided_args = arg_parser.parse_args()
54

55
    if provided_args.version:
56
        print(f"CelestialSurveyor v{version}")
57
    if not provided_args.cli_mode:
58
        start_ui()
59
    else:
60
        if not os.path.exists(provided_args.source_folder):
61
            logger.log.error(f"Provided source folder {provided_args.source_folder} does not exist")
62
            sys.exit(0)
63
        if not os.path.exists(provided_args.output_folder):
64
            try:
65
                os.makedirs(provided_args.output_folder)
66
            except Exception as e:
67
                logger.log.error(f"Unable to create output folder {provided_args.output_folder} due to {str(e)}")
68
                sys.exit(0)
69
        if provided_args.magnitude_limit >= 25.0:
70
            logger.log.error(
71
                f"Provided magnitude limit {provided_args.magnitude_limit} is too high. Maximum value is 25.0")
72
            sys.exit(0)
73
        if provided_args.model_path and not os.path.exists(provided_args.model_path):
74
            logger.log.error(f"Provided model path {provided_args.model_path} does not exist")
75
            sys.exit(0)
76
        if provided_args.flat_folder and not os.path.exists(provided_args.flat_folder):
77
            logger.log.error(f"Provided flat folder {provided_args.flat_folder} does not exist")
78
            sys.exit(0)
79
        if provided_args.dark_folder and not os.path.exists(provided_args.dark_folder):
80
            logger.log.error(f"Provided dark folder {provided_args.dark_folder} does not exist")
81
            sys.exit(0)
82
        if provided_args.dark_flat_folder and not os.path.exists(provided_args.dark_flat_folder):
83
            logger.log.error(f"Provided dark flat folder {provided_args.dark_flat_folder} does not exist")
84
            sys.exit(0)
85

86
        source_data = SourceDataV2(provided_args.debayer)
87
        img_paths = source_data.make_file_paths(provided_args.source_folder)
88
        source_data.extend_headers(file_list=img_paths)
89
        source_data.load_images(progress_bar=ProgressBarCli())
90
        dark_files = source_data.make_file_paths(provided_args.dark_folder) if provided_args.dark_folder else None
91
        flat_files = source_data.make_file_paths(provided_args.flat_folder) if provided_args.flat_folder else None
92
        dark_flat_files = source_data.make_file_paths(
93
            provided_args.dark_flat_folder) if provided_args.dark_flat_folder else None
94

95
        source_data.calibrate_images(
96
            dark_files=dark_files,
97
            flat_files=flat_files,
98
            dark_flat_files=dark_flat_files,
99
            progress_bar=ProgressBarCli())
100
        if provided_args.align_images:
101
            source_data.plate_solve_all(progress_bar=ProgressBarCli())
102
            source_data.align_images_wcs(progress_bar=ProgressBarCli())
103
        source_data.crop_images()
104
        if not provided_args.non_linear:
105
            source_data.stretch_images(progress_bar=ProgressBarCli())
106
        source_data.images_from_buffer()
107

108
        results = predict_asteroids(source_data, model_path=provided_args.model_path, progress_bar=ProgressBarCli())
109
        image_to_annotate = save_results(source_data=source_data, results=results,
110
                                         output_folder=provided_args.output_folder)
111

112
        magnitude_limit = float(provided_args.magnitude_limit)
113
        annotate_results(source_data, image_to_annotate, provided_args.output_folder, magnitude_limit=magnitude_limit)
114
        logger.log.info(f"Results are saved in {provided_args.output_folder}")
115

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.