Перейти к содержанию

Note

Click here to download the full example code

Использование модуля settings

В этом руководстве демонстрируется, как использовать основной объект settings в CulicidaeLab. Объект settings является основной точкой входа для доступа к конфигурациям, путям к файлам и параметрам моделей во всей библиотеке.

Установите библиотеку culicidaelab, если она еще не установлена !pip install -q culicidaelab

import yaml
from pathlib import Path
from culicidaelab import get_settings

1. Использование настроек по умолчанию

Самый простой способ начать работу с CulicidaeLab — это загрузить настройки по умолчанию. Функция get_settings() действует как синглтон; она загружает конфигурацию один раз и возвращает тот же экземпляр при последующих вызовах. Это обеспечивает согласованное состояние во всем вашем приложении.

Настройки по умолчанию загружаются из файлов конфигурации, поставляемых с библиотекой.

Получить экземпляр настроек по умолчанию

settings = get_settings()

# Объект настроек обеспечивает легкий доступ к ключевым каталогам ресурсов.
# Библиотека автоматически создаст эти каталоги, если они не существуют.
print("--- Каталоги ресурсов по умолчанию ---")
print(f"Активный каталог конфигурации: {settings.config_dir}")
print(f"Каталог моделей: {settings.model_dir}")
print(f"Каталог наборов данных: {settings.dataset_dir}")
print(f"Каталог кэша: {settings.cache_dir}")

Out:

Could not find project root, using module directory
--- Каталоги ресурсов по умолчанию ---
Активный каталог конфигурации: /opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/culicidaelab/conf
Каталог моделей: /home/runner/.local/share/culicidaelab/models
Каталог наборов данных: /home/runner/.local/share/culicidaelab/datasets
Каталог кэша: /home/runner/.cache/culicidaelab

2. Доступ к путям весов моделей

Объект settings знает локальные пути по умолчанию для всех весов моделей-предикторов. Когда вы создаете экземпляр предиктора, он использует эти пути для поиска или загрузки моделей.

Получить настроенные локальные пути к файлам для разных типов моделей

detection_weights = settings.get_model_weights_path("detector")
segmentation_weights = settings.get_model_weights_path("segmenter")
classification_weights = settings.get_model_weights_path("classifier")

print("--- Пути к весам моделей по умолчанию ---")
print(f"Модель обнаружения: {detection_weights}")
print(f"Модель сегментации: {segmentation_weights}")
print(f"Модель классификации: {classification_weights}")

Out:

--- Пути к весам моделей по умолчанию ---
Модель обнаружения: /home/runner/.local/share/culicidaelab/models/weights/detection/culico-net-det-v1-nano.pt
Модель сегментации: /home/runner/.local/share/culicidaelab/models/weights/segmentation/sam2.1_hiera_tiny.pt
Модель классификации: /home/runner/.local/share/culicidaelab/models/weights/classification/culico-net-cls-v1-17.pkl

3. Работа с конфигурацией видов

Вся информация, связанная с видами, включая названия классов и подробные метаданные, управляется через свойство species_config. Это крайне важно для интерпретации выходных данных модели классификации.

Получить специальный объект конфигурации видов

species_config = settings.species_config

# Вы можете легко получить сопоставление индексов классов с названиями видов.
print("\n--- Сопоставление индексов видов с названиями ---")
for idx, species in species_config.species_map.items():
    print(f"Класс {idx}: {species}")

# Вы также можете получить подробные метаданные для любого конкретного вида.
species_name = "Aedes aegypti"
metadata = species_config.get_species_metadata(species_name)
if isinstance(metadata, dict):
    print(f"\n--- Метаданные для '{species_name}' ---")
    for key, value in metadata.items():
        print(f"{key}: {value}")

Out:

--- Сопоставление индексов видов с названиями ---
Класс 0: Aedes aegypti
Класс 1: Aedes albopictus
Класс 2: Aedes canadensis
Класс 3: Aedes dorsalis
Класс 4: Aedes geniculatus
Класс 5: Aedes koreicus
Класс 6: Aedes triseriatus
Класс 7: Aedes vexans
Класс 8: Anopheles arabiensis
Класс 9: Anopheles freeborni
Класс 10: Anopheles sinensis
Класс 11: Species not defined
Класс 12: Culex inatomii
Класс 13: Culex pipiens
Класс 14: Culex quinquefasciatus
Класс 15: Culex tritaeniorhynchus
Класс 16: Culiseta annulata
Класс 17: Culiseta longiareolata

--- Метаданные для 'Aedes aegypti' ---
common_name: Yellow fever mosquito
taxonomy: {'family': 'Culicidae', 'subfamily': 'Culicinae', 'genus': 'Aedes', 'subgenus': 'Stegomyia', 'species_complex': None}
metadata: {'vector_status': True, 'diseases': ['Yellow fever', 'Dengue', 'Zika'], 'habitat': 'Urban', 'breeding_sites': ['Artificial containers', 'Tree holes'], 'sources': ['https://www.cdc.gov/zika/geo/aedes-aegypti.html']}

4. Использование пользовательского каталога конфигурации

Для более сложных случаев использования, таких как предоставление собственных метаданных о видах или изменение параметров модели по умолчанию, вы можете указать библиотеке на пользовательский каталог конфигурации.

CulicidaeLab загрузит ваши пользовательские файлы .yaml и объединит их с настройками по умолчанию. Это позволяет вам переопределить только те настройки, которые необходимо изменить.

Создать пользовательский каталог конфигурации и новый файл конфигурации

custom_config_dir = Path("custom_configs")
custom_config_dir.mkdir(exist_ok=True)

# Определим минимальную пользовательскую конфигурацию. Мы просто переопределим информацию о видах.
# Все настройки, не определенные здесь, будут использовать значения по умолчанию из библиотеки.
example_config = {
    "species": {
        "species_classes": {0: "Aedes aegypti", 1: "Anopheles gambiae"},
        "species_metadata": {
            "species_info_mapping": {
                "aedes_aegypti": "Aedes aegypti",
                "anopheles_gambiae": "Anopheles gambiae",
            },
            "species_metadata": {
                "Aedes aegypti": {
                    "common_name": "Пользовательский комар-переносчик желтой лихорадки",
                    "taxonomy": {
                        "family": "Culicidae",
                        "subfamily": "Culicinae",
                        "genus": "Aedes",
                    },
                    "metadata": {
                        "vector_status": True,
                        "diseases": ["Dengue", "Zika"],
                        "habitat": "Urban",
                        "breeding_sites": ["Artificial containers"],
                        "sources": ["custom_source"],
                    },
                },
                "Anopheles gambiae": {
                    "common_name": "Пользовательский африканский малярийный комар",
                    "taxonomy": {
                        "family": "Culicidae",
                        "subfamily": "Anophelinae",
                        "genus": "Anopheles",
                    },
                    "metadata": {
                        "vector_status": True,
                        "diseases": ["Malaria"],
                        "habitat": "Rural",
                        "breeding_sites": ["Puddles"],
                        "sources": ["custom_source"],
                    },
                },
            },
        },
    },
}


# Записать пользовательский файл конфигурации
config_file_path = custom_config_dir / "species.yaml"
with open(config_file_path, "w") as f:
    yaml.safe_dump(example_config, f)

# Теперь инициализируем настройки с путем к нашему пользовательскому каталогу.
# `get_settings` достаточно умен, чтобы создать *новый* экземпляр, если указан другой `config_dir`.
print("\n--- Инициализация с пользовательскими настройками ---")
custom_settings = get_settings(config_dir=str(custom_config_dir))

print(f"Активный каталог конфигурации: {custom_settings.config_dir}")

# Давайте проверим, загрузилась ли наша пользовательская карта видов
print("\n--- Пользовательское сопоставление видов ---")
for idx, species in custom_settings.species_config.species_map.items():
    print(f"Класс {idx}: {species}")

Out:

--- Инициализация с пользовательскими настройками ---
Could not find project root, using module directory
Активный каталог конфигурации: custom_configs

--- Пользовательское сопоставление видов ---
Класс 0: Aedes aegypti
Класс 1: Aedes albopictus
Класс 2: Aedes canadensis
Класс 3: Aedes dorsalis
Класс 4: Aedes geniculatus
Класс 5: Aedes koreicus
Класс 6: Aedes triseriatus
Класс 7: Aedes vexans
Класс 8: Anopheles arabiensis
Класс 9: Anopheles freeborni
Класс 10: Anopheles sinensis
Класс 11: Species not defined
Класс 12: Culex inatomii
Класс 13: Culex pipiens
Класс 14: Culex quinquefasciatus
Класс 15: Culex tritaeniorhynchus
Класс 16: Culiseta annulata
Класс 17: Culiseta longiareolata

5. Переопределение одного значения конфигурации

Иногда вам может потребоваться изменить только одно значение во время выполнения без создания новых YAML-файлов. Метод set_config идеально подходит для этого.

Давайте загрузим настройки по умолчанию и изменим порог уверенности для детектора.

Снова загрузить настройки по умолчанию (или использовать предыдущий экземпляр 'settings')

runtime_settings = get_settings()
original_confidence = runtime_settings.get_config("predictors.detector.confidence")
print(f"Исходная уверенность детектора: {original_confidence}")

# Установить новое значение порога уверенности детектора с помощью `set_config`
runtime_settings.set_config("predictors.detector.confidence", 0.85)
new_confidence = runtime_settings.get_config("predictors.detector.confidence")
print(f"Новая уверенность детектора: {new_confidence}")

Out:

Could not find project root, using module directory
Исходная уверенность детектора: 0.25
Новая уверенность детектора: 0.85

Total running time of the script: ( 0 minutes 4.419 seconds)

Download Python source code: tutorial_part_0_settings_example.py

Download Jupyter notebook: tutorial_part_0_settings_example.ipynb

Gallery generated by mkdocs-gallery