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:
- Langganan Azure - Membuat akun gratis
- Sumber daya Azure FarmBeats - Menginstal FarmBeats
- 3.6 atau yang lebih baru - Instal Python
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-identity
pip 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.
Azure SDK for Python
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk