Поделиться через


клиентская библиотека Azure FarmBeats для Python версии 1.0.0b2

FarmBeats — это предложение B2B PaaS от Корпорации Майкрософт, которое упрощает создание интеллектуальных цифровых решений для сельского хозяйства в Azure. FarmBeats позволяет пользователям получать, агрегировать и обрабатывать сельскохозяйственные данные из различных источников (сельскохозяйственное оборудование, погода, спутник) без необходимости инвестировать в глубокие ресурсы инжиниринга данных.  Клиенты могут создавать решения SaaS на основе FarmBeats и использовать первоклассную поддержку для создания моделей для получения аналитических сведений в большом масштабе.

Используйте клиентская библиотека FarmBeats для Python, чтобы сделать следующее.

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

Исходный код | Пакет (PyPi) | Справочная документация по | API Документация по продукту | Changelog

Начало работы

Предварительные требования

Для использования этого пакета необходимо:

Установка пакета

Установите клиентную библиотеку Azure FarmBeats для Python с помощью pip:

pip install azure-agrifood-farming

Аутентификация клиента

Чтобы использовать учетные данные маркера Azure Active Directory (AAD), укажите экземпляр нужного типа учетных данных, полученных из библиотеки azure-identity .

Для проверки подлинности с помощью AAD необходимо сначала установитьazure-identity и включить проверку подлинности AAD в ресурсе FarmBeats. Если вы следовали документации по установке при создании ресурса FarmBeats, это уже рассматривается.

После настройки можно выбрать тип учетных данных из azure.identity для использования. Например, для проверки подлинности клиента можно использовать DefaultAzureCredential :

Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET

Используйте возвращенные учетные данные маркера для проверки подлинности клиента:

from azure.agrifood.farming import FarmBeatsClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

Основные понятия

Базовое понимание приведенных ниже терминов поможет приступить к работе с клиентской библиотекой FarmBeats.

Иерархия фермы

Иерархия фермы — это коллекция сущностей ниже.

  • Партия - хранитель всех агрономических данных.
  • Ферма — это логическая коллекция полей и (или) сезонных полей. Они не имеют никакой области, связанной с ними.
  • Поле — это область с несколькими многоугольниками. Ожидается, что это будет стабильно в разных сезонах.
  • Сезонное поле — это многоугольник. Чтобы определить сезонную границу, нам потребуются сведения о области (граница), времени (сезон) и обрезе. Ожидается, что для каждого вегетатора будут созданы новые сезонные поля.
  • Граница — фактическая многоугольная область, выраженная в виде геометрии (в geojson). Обычно она связана с полем или сезонным полем. Данные о спутниковых, погодных и сельскохозяйственных операциях связаны с границей.
  • Каскадное удаление — агрономические данные хранятся иерархически с партией в качестве корня. Иерархия включает партии —> фермы —> поля —> сезонные поля —> границы —> связанные данные (спутниковые, погодные, сельскохозяйственные операции). Каскадное удаление относится к процессу удаления любого узла и его поддеревья.

Scenes

Сцены — это изображения, обычно полученные с помощью вспомогательных API. Сюда входят необработанные полосы и производные полосы (например, NDVI). Сцены также могут включать пространственные выходные данные вывода или модели искусственного интеллекта или машинного обучения (например, LAI).

Операции фермы

Fam операции включают в себя детали, относящиеся к возделывание, посадка, применение пестицидов & питательных веществ, и сбор урожая. Их можно вручную отправить в FarmBeats с помощью API или получить те же сведения от поставщиков услуг сельскохозяйственного оборудования, таких как John Deere.

Примеры

Создание участника

После проверки подлинности и создания клиентского объекта, как показано в разделе Проверка подлинности клиента , вы можете создать сторону в ресурсе FarmBeats следующим образом:

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

party_id = "party-1"

party = client.parties.create_or_update(
    party_id=party_id,
    party={
        "name": party_name,
        "description": party_description
    }
)

Создание фермы

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

party_id = "party-1" # Using party from previous example

farm = client.farms.create_or_update(
    party_id=party_id,
    farm_id="farm-1",
    farm={
        "name": farm_name,
        "description": farm_description
    }
)

Создание сезона

Создание объекта Season, охватывающего период с апреля по август 2021 г.

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

season_id = "contoso-season"
season_name = "contoso-season-name"
season_description = "contoso-season-description"
year = "2021"
start_date_time = "2021-01-01T20:08:10.137Z"
end_date_time = "2021-06-06T20:08:10.137Z"

season = client.seasons.create_or_update(
        season_id=season_id,
        season={
            "name": season_name,
            "year": year,
            "startDateTime": start_date_time,
            "endDateTime": end_date_time,
            "description": season_description
        }
    )

Создание границы

Создание границы для сезонного поля, созданного в предыдущем примере.

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

party_id = "party-1"
boundary_id = "boundary-1"

boundary = client.boundaries.create_or_update(
    party_id=party_id,
    boundary_id=boundary_id,
    boundary={
        "geometry": {
            "type": "Polygon",
            "coordinates":
                [
                    [
                        [73.70457172393799, 20.545385304358106],
                        [73.70457172393799, 20.545385304358106],
                        [73.70448589324951, 20.542411534243367],
                        [73.70877742767334, 20.541688176010233],
                        [73.71023654937744, 20.545083911372505],
                        [73.70663166046143, 20.546992723579137],
                        [73.70457172393799, 20.545385304358106],
                    ]
                ]
        },
        "status": "<string>",
        "name": "<string>",
        "description": "<string>"
    }
)

Прием спутниковых снимков

Активация задания приема спутниковых данных для созданной выше границы для приема данных индекса конечной области за январь 2020 г. Это длительная операция (также называемая "Задание") и возвращает объект Poller. .result() Вызов метода для объекта опроса ожидает завершения операции и возвращает окончательное состояние.

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

from isodate.tzinfo import Utc
from datetime import datetime

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

party_id = "party-1"
boundary_id = "westlake-boundary-1"
start_date_time = "2021-01-01T20:08:10.137Z"
end_date_time = "2021-06-06T20:08:10.137Z"

# Queue the job
satellite_job_poller = client.scenes.begin_create_satellite_data_ingestion_job(
    job_id=job_id,
    job={
        "boundaryId": boundary_id,
        "endDateTime": end_date_time,
        "partyId": party_id,
        "startDateTime": start_date_time,
        "provider": "Microsoft",
        "source": "Sentinel_2_L2A",
        "data": {
            "imageNames": [
                "NDVI"
            ],
            "imageFormats": [
                "TIF"
            ],
            "imageResolution": [10]
        },
        "name": "<string>",
        "description": "<string>"
    }
)

# Wait for the job to terminate
satellite_job = satellite_job_poller.result()
job_status = satellite_job_poller.status()

Получение спутниковых сцен приема

Запрос сцен, созданных заданием в предыдущем примере.

from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient

from datetime import datetime

credential = DefaultAzureCredential()
client = FarmBeatsClient(endpoint="https://<my-account-name>.farmbeats.azure.net", credential=credential)

party_id = "party-1"
boundary_id = "boundary-1"

scenes = client.scenes.list(
    party_id=party_id,
    boundary_id=boundary_id,
    start_date_time=start_date_time,
    end_date_time=end_date_time,
    provider="Microsoft",
    source="Sentinel_2_L2A"
)

for scene in scenes:
    bands = [image_file["name"] for image_file in scene["imageFiles"]]
    bands_str = ", ".join(bands)
    print(f"Scene has the bands {bands_str}")

Устранение неполадок

Общие сведения

Клиент FarmBeats будет вызывать исключения, определенные в [Azure Core][azure_core], если вы вызываете .raise_for_status() ответы.

Ведение журнала

Эта библиотека использует стандартную библиотеку ведения журнала для ведения журнала. Основные сведения о сеансах HTTP (URL-адреса, заголовки и т. д.) регистрируются на уровне INFO.

С помощью аргумента-ключевого слова logging_enable можно включить в клиенте ведение журнала на уровне отладки (DEBUG), на котором фиксируются сведения о телах запросов и ответов, а также заголовки без изменений:

import sys
import logging
from azure.identity import DefaultAzureCredential
from azure.agrifood.farming import FarmBeatsClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
endpoint = "https://<my-account-name>.farmbeats.azure.net"
credential = DefaultAzureCredential()
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = FarmBeatsClient(endpoint=endpoint, credential=credential, logging_enable=True)

Аналогичным logging_enable образом можно включить подробное ведение журнала для одного вызова, даже если он не включен для клиента:

client.crops.get(crop_id="crop_id", logging_enable=True)

Дальнейшие действия

Дополнительная документация

Более подробную документацию по FarmBeats см. в документации farmBeats по docs.microsoft.com.

Участие

На этом проекте приветствуются публикации и предложения. Для участия в большинстве процессов по разработке документации необходимо принять лицензионное соглашение участника (CLA), в котором указывается, что вы предоставляете нам права на использование ваших публикаций. Дополнительные сведения см. на странице cla.microsoft.com.

При отправке запроса на включение внесенных изменений CLA-бот автоматически определит необходимость предоставления соглашения CLA и соответствующего оформления запроса на включение внесенных изменений (например, добавление метки, комментария). Просто следуйте инструкциям бота. Будет достаточно выполнить их один раз для всех репозиториев, поддерживающих соглашение CLA.

В рамках этого проекта действуют правила поведения в отношении продуктов с открытым исходным кодом Майкрософт. Дополнительные сведения см. в разделе часто задаваемых вопросов о правилах поведения или обратитесь к opencode@microsoft.com с любыми дополнительными вопросами или комментариями.