Bagikan melalui


Pustaka klien Azure FarmBeats untuk Python - versi 1.0.0b2

FarmBeats adalah penawaran B2B PaaS dari Microsoft yang memudahkan perusahaan AgriFood untuk membangun solusi pertanian digital cerdas di Azure. FarmBeats memungkinkan pengguna untuk memperoleh, mengagregasi, dan memproses data pertanian dari berbagai sumber (peralatan pertanian, cuaca, satelit) tanpa perlu berinvestasi dalam sumber daya rekayasa data yang mendalam.  Pelanggan dapat membangun solusi SaaS di atas FarmBeats dan memanfaatkan dukungan kelas satu untuk membangun model untuk menghasilkan wawasan dalam skala besar.

Gunakan pustaka klien FarmBeats untuk Python untuk melakukan hal berikut.

  • Buat & partai pembaruan, pertanian, bidang, bidang musiman, dan batasan.
  • Serap data satelit dan cuaca untuk area yang diminati.
  • Menyerap data operasi pertanian yang mencakup pengangkatan, penanaman, panen, dan penerapan input pertanian.

Kode sumber | Paket (PyPi) | Dokumentasi | referensi API Dokumentasi | produk Changelog

Memulai

Prasyarat

Untuk menggunakan paket ini, Anda harus memiliki:

Instal paketnya

Instal pustaka klien Azure FarmBeats untuk Python dengan pip:

pip install azure-agrifood-farming

Mengautentikasi klien

Untuk menggunakan kredensial token Azure Active Directory (AAD), berikan instans jenis kredensial yang diinginkan yang diperoleh dari pustaka identitas azure .

Untuk mengautentikasi dengan AAD, Anda harus terlebih dahulu menginstal azure-identitypip dan mengaktifkan autentikasi AAD pada sumber daya FarmBeats Anda. Jika Anda mengikuti dokumen penginstalan saat membuat sumber daya FarmBeats, ini sudah tercakup.

Setelah penyiapan, Anda dapat memilih jenis kredensial mana dari azure.identity yang akan digunakan. Sebagai contoh, DefaultAzureCredential dapat digunakan untuk mengautentikasi klien:

Atur nilai ID klien, ID penyewa, dan rahasia klien aplikasi AAD sebagai variabel lingkungan: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Gunakan kredensial token yang dikembalikan untuk mengautentikasi klien:

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)

Konsep utama

Pemahaman dasar tentang istilah di bawah ini akan membantu memulai pustaka klien FarmBeats.

Hierarki Farm

Hierarki farm adalah kumpulan entitas di bawah ini.

  • Party - adalah penjaga semua data agronomi.
  • Farm - adalah kumpulan bidang dan/atau bidang musiman yang logis. Mereka tidak memiliki area yang terkait dengan mereka.
  • Bidang - adalah area multi-poligon. Hal ini diperkirakan akan stabil di seluruh musim.
  • Bidang musiman - adalah area multi-poligon. Untuk menentukan batas musiman, kita memerlukan detail area (batas), waktu (musim) dan pemangkasan. Bidang musiman baru diharapkan dapat dibuat untuk setiap musim tanam.
  • Batas - adalah area multi-poligon aktual yang dinyatakan sebagai geometri (dalam geojson). Biasanya dikaitkan dengan bidang atau bidang musiman. Data operasi satelit, cuaca, dan farm ditautkan ke batas.
  • Penghapusan kaskade - Data agronomi disimpan secara hierarkis dengan pihak sebagai akar. Hierarki mencakup Pesta -> Pertanian -> Bidang -> Bidang Musiman -> Batas -> Data terkait (satelit, cuaca, operasi pertanian). Penghapusan kaskade mengacu pada proses penghapusan simpul apa pun dan subtreenya.

Adegan

Adegan mengacu pada gambar yang biasanya diserap menggunakan API satelit. Ini termasuk pita mentah dan band turunan (Mis: NDVI). Adegan juga dapat mencakup output spasial dari model inferensi atau AI/ML (Misalnya: LAI).

Operasi Farm

Operasi fam mencakup detail yang berkaitan dengan pengolahan, penanaman, penerapan nutrisi pestisida & , dan panen. Ini dapat didorong secara manual ke FarmBeats menggunakan API atau informasi yang sama dapat ditarik dari penyedia layanan peralatan pertanian seperti John Deere.

Contoh

Buat Pesta

Setelah Anda mengautentikasi dan membuat objek klien seperti yang ditunjukkan di bagian Autentikasi klien , Anda dapat membuat pihak dalam sumber daya FarmBeats seperti ini:

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

Membuat Farm

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

Membuat Musim

Membuat objek Musim, mencakup dari April hingga Agustus 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
        }
    )

Membuat Batas

Membuat Batas untuk Bidang Musiman yang dibuat dalam contoh sebelumnya.

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

Mencerna Citra Satelit

Memicu pekerjaan Penyerapan Data Satelit untuk batas yang dibuat di atas, untuk menyerap data Indeks Area Daun untuk bulan Januari 2020. Ini adalah Operasi Jangka Panjang (juga disebut 'Pekerjaan'), dan mengembalikan objek Poller. Memanggil .result() metode pada objek poller menunggu operasi dihentikan, dan mengembalikan status akhir.

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

Dapatkan Adegan Satelit yang Diserap

Mengkueri adegan yang dibuat oleh pekerjaan dalam contoh sebelumnya.

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

Pemecahan Masalah

Umum

Klien FarmBeats akan mengajukan pengecualian yang ditentukan dalam [Azure Core][azure_core] jika Anda memanggil .raise_for_status() respons Anda.

Pembuatan Log

Pustaka ini menggunakan pustaka pengelogan standar untuk pengelogan. Informasi dasar tentang sesi HTTP (URL, header, dll.) dicatat di tingkat INFO.

Pengelogan tingkat DEBUG mendetail, termasuk isi permintaan/respons dan header yang tidak diedit, dapat diaktifkan pada klien dengan argumen kata kunci 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)

Demikian pula, logging_enable dapat mengaktifkan pengelogan terperinci untuk satu panggilan, bahkan ketika tidak diaktifkan untuk klien:

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

Langkah berikutnya

Dokumentasi tambahan

Untuk dokumentasi yang lebih luas tentang FarmBeats, lihat dokumentasi FarmBeats tentang docs.microsoft.com.

Berkontribusi

Proyek ini menyambut baik kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda menyetujui Perjanjian Lisensi Kontributor (CLA) yang menyatakan bahwa Anda memiliki hak untuk, dan benar-benar melakukannya, memberi kami hak untuk menggunakan kontribusi Anda. Untuk detailnya, kunjungi cla.microsoft.com.

Ketika Anda mengirimkan permintaan tarik, CLA-bot akan secara otomatis menentukan apakah Anda perlu memberikan CLA dan menghias PR dengan tepat (misalnya, label, komentar). Cukup ikuti instruksi yang diberikan oleh bot. Anda hanya perlu melakukan ini sekali di semua repos menggunakan CLA kami.

Proyek ini telah mengadopsi Kode Etik Sumber Terbuka Microsoft. Untuk informasi selengkapnya, lihat Tanya Jawab Umum Tata Tertib atau hubungi opencode@microsoft.com untuk pertanyaan atau komentar lainnya.