Udostępnij za pośrednictwem


biblioteka klienta Azure FarmBeats dla języka Python — wersja 1.0.0b2

FarmBeats to oferta B2B PaaS firmy Microsoft, która ułatwia firmom AgriFood tworzenie inteligentnych rozwiązań rolnictwa cyfrowego na platformie Azure. Usługa FarmBeats umożliwia użytkownikom pozyskiwanie, agregowanie i przetwarzanie danych rolnych z różnych źródeł (sprzęt farmy, pogoda, satelita) bez konieczności inwestowania w głębokie zasoby inżynieryjne danych.  Klienci mogą tworzyć rozwiązania SaaS na podstawie usługi FarmBeats i korzystać z najwyższej klasy obsługi tworzenia modeli w celu generowania szczegółowych informacji na dużą skalę.

Użyj biblioteki klienta FarmBeats dla języka Python, aby wykonać następujące czynności.

  • Twórz & strony aktualizacji, gospodarstwa, pola, pola sezonowe i granice.
  • Pozyskiwanie danych satelitarnych i pogodowych dla obszarów zainteresowania.
  • Pozyskiwanie danych operacyjnych gospodarstw obejmujących uprawy, sadzenia, zbierania i stosowania danych wejściowych gospodarstw rolnych.

Kod | źródłowy Pakiet (PyPi) | Dokumentacja referencyjna interfejsu | API Dokumentacja | produktu Changelog

Wprowadzenie

Wymagania wstępne

Aby użyć tego pakietu, musisz mieć następujące elementy:

Instalowanie pakietu

Zainstaluj bibliotekę klienta Azure FarmBeats dla języka Python przy użyciu narzędzia pip:

pip install azure-agrifood-farming

Uwierzytelnianie klienta

Aby użyć poświadczeń tokenu usługi Azure Active Directory (AAD), podaj wystąpienie żądanego typu poświadczeń uzyskanego z biblioteki azure-identity .

Aby uwierzytelnić się w usłudze AAD, musisz najpierw zainstalować azure-identity narzędzie pip i włączyć uwierzytelnianie usługi AAD w zasobie FarmBeats. Jeśli podczas tworzenia zasobu FarmBeats wykonano czynności opisane w dokumentacji instalacji , zostało to już omówione.

Po skonfigurowaniu możesz wybrać typ poświadczeń z pliku azure.identity do użycia. Na przykład wartość DefaultAzureCredential może służyć do uwierzytelniania klienta:

Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i klucza tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Użyj zwróconego poświadczenia tokenu, aby uwierzytelnić klienta:

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)

Kluczowe pojęcia

Podstawowa wiedza na temat poniższych terminów pomoże rozpocząć pracę z biblioteką klienta FarmBeats.

Hierarchia farmy

Hierarchia farmy to kolekcja poniższych jednostek.

  • Strona - jest opiekunem wszystkich danych agronomii.
  • Farma — jest logiczną kolekcją pól i/lub pól sezonowych. Nie mają z nimi żadnego obszaru.
  • Pole — jest obszarem wielokąta. Oczekuje się, że będzie to stabilne w różnych sezonach.
  • Pole sezonowe - jest obszarem wielokąta. Aby zdefiniować granicę sezonową, potrzebujemy szczegółów obszaru (granica), czasu (sezon) i upraw. Oczekuje się, że nowe pola sezonowe będą tworzone dla każdego sezonu rosnącego.
  • Granica — jest rzeczywistym obszarem wielokątnym wyrażonym jako geometria (w formacie geojson). Zwykle jest on związany z polem lub polem sezonowym. Dane dotyczące operacji satelitarnych, pogodowych i rolnych są połączone z granicą.
  • Usuwanie kaskadowe — dane agronomiiczne są przechowywane hierarchicznie z elementem głównym. Hierarchia obejmuje Strony —> Farmy —> Pola —> Pola sezonowe —> Granice —> Skojarzone dane (satelita, pogoda, operacje na farmie). Usuwanie kaskadowe odnosi się do procesu usuwania dowolnego węzła i jego poddrzewa.

Sceny

Sceny odnoszą się do obrazów zwykle pozyskiwanych przy użyciu interfejsów API satelickich. Dotyczy to nieprzetworzonych pasm i pochodnych pasm (np. NDVI). Sceny mogą również obejmować dane wyjściowe przestrzenne wnioskowania lub modelu sztucznej inteligencji/uczenia maszynowego (np. LAI).

Operacje farmy

Operacje Fam obejmują szczegóły dotyczące uprawy, sadzenia, stosowania składników odżywczych pestycydów & i zbiorów. Można to ręcznie wypchnąć do usługi FarmBeats przy użyciu interfejsów API lub te same informacje można pobrać od dostawców usług sprzętu farmy, takich jak John Deere.

Przykłady

Tworzenie strony

Po uwierzytelnieniu i utworzeniu obiektu klienta, jak pokazano w sekcji Uwierzytelnianie klienta , możesz utworzyć jednostkę w ramach zasobu FarmBeats w następujący sposób:

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
    }
)

Tworzenie farmy

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
    }
)

Tworzenie sezonu

Tworzenie obiektu Season obejmującego od kwietnia do sierpnia 2021 roku.

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
        }
    )

Tworzenie granicy

Tworzenie granicy dla pola sezonowego utworzonego w poprzednim przykładzie.

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>"
    }
)

Pozyskiwanie zdjęć satelitarnych

Wyzwolenie zadania pozyskiwania danych satelitarnych dla utworzonej powyżej granicy w celu pozyskania danych indeksu obszaru liścia w miesiącu stycznia 2020 r. Jest to długotrwała operacja (nazywana również "zadaniem") i zwraca obiekt Poller. .result() Wywołanie metody w obiekcie poller oczekuje na zakończenie operacji i zwraca stan końcowy.

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()

Pobieranie pozyskiwanych scen satelitarnych

Wykonywanie zapytań o sceny utworzone przez zadanie w poprzednim przykładzie.

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}")

Rozwiązywanie problemów

Ogólne

Klient FarmBeats zgłosi wyjątki zdefiniowane w [Azure Core][azure_core], jeśli wywołasz .raise_for_status() odpowiedzi.

Rejestrowanie

Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.

Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z argumentem słowa kluczowego logging_enable :

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 Podobnie można włączyć szczegółowe rejestrowanie dla pojedynczego wywołania, nawet jeśli nie jest włączone dla klienta:

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

Następne kroki

Dodatkowa dokumentacja

Aby uzyskać bardziej obszerną dokumentację dotyczącą usługi FarmBeats, zobacz dokumentację farmbeats dotyczącą docs.microsoft.com.

Współtworzenie

W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź cla.microsoft.com.

Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.

W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.