Aracılığıyla paylaş


Python için Azure FarmBeats istemci kitaplığı - sürüm 1.0.0b2

FarmBeats, Microsoft tarafından sunulan ve AgriFood şirketlerinin Azure'da akıllı dijital tarım çözümleri oluşturmasını kolaylaştıran bir B2B PaaS teklifidir. FarmBeats, kullanıcıların derin veri mühendisliği kaynaklarına yatırım yapmaya gerek kalmadan çeşitli kaynaklardan (çiftlik ekipmanı, hava durumu, uydu) tarımsal verileri elde etmesine, toplamasına ve işlemesine olanak tanır.  Müşteriler FarmBeats üzerinde SaaS çözümleri oluşturabilir ve büyük ölçekte içgörüler oluşturmak için model oluşturmaya yönelik birinci sınıf desteklerden yararlanabilir.

Aşağıdakileri yapmak için Python için FarmBeats istemci kitaplığını kullanın.

  • Güncelleştirme partileri, çiftlikler, alanlar, mevsimsel alanlar ve sınırlar oluşturun & .
  • İlgi alanları için uydu ve hava durumu verilerini alın.
  • Çiftlik girişlerinin tilling, planting, harvesting ve application işlemlerini kapsayan grup işlemleri verilerini alma.

Kaynak kodu | Paket (PyPi) | API başvuru belgeleri | Ürün belgeleri | Changelog

Başlarken

Önkoşullar

Bu paketi kullanmak için aşağıdakilere sahip olmanız gerekir:

Paketi yükleme

Pip ile Python için Azure FarmBeats istemci kitaplığını yükleyin:

pip install azure-agrifood-farming

İstemcinin kimliğini doğrulama

Azure Active Directory (AAD) belirteci kimlik bilgilerini kullanmak için azure-identity kitaplığından alınan istenen kimlik bilgisi türünün bir örneğini sağlayın.

AAD ile kimlik doğrulaması yapmak için öncelikle FarmBeats kaynağınızda AAD kimlik doğrulamasını yüklemeniz azure-identity ve etkinleştirmeniz gerekir. FarmBeats kaynağını oluştururken yükleme belgelerini izlediyseniz, bu durum zaten ele alınmıştır.

Kurulumdan sonra azure.identity'den hangi kimlik bilgisi türünü kullanacağınızı seçebilirsiniz. Örneğin, istemcinin kimliğini doğrulamak için DefaultAzureCredential kullanılabilir:

AAD uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

İstemcinin kimliğini doğrulamak için döndürülen belirteç kimlik bilgilerini kullanın:

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)

Önemli kavramlar

Aşağıdaki terimlerin temel bilgileri FarmBeats istemci kitaplığını kullanmaya başlamaya yardımcı olur.

Grup Hiyerarşisi

Grup hiyerarşisi aşağıdaki varlıklardan oluşan bir koleksiyondur.

  • Party - tüm tarımsal verilerin koruyucusdur.
  • Grup - alanların ve/veya mevsimsel alanların mantıksal bir koleksiyonudur. Onlarla ilişkilendirilmiş herhangi bir alanı yoktur.
  • Alan - çok çokgen bir alandır. Bunun sezonlar boyunca istikrarlı olması beklenir.
  • Mevsimsel alan - çok çokgen bir alandır. Mevsimsel bir sınır tanımlamak için alan (sınır), zaman (mevsim) ve kırpma ayrıntılarına ihtiyacımız vardır. Her büyüyen mevsim için yeni mevsimlik alanların oluşturulması beklenmektedir.
  • Sınır - geometri olarak ifade edilen gerçek çokgen alandır (geojson cinsinden). Normalde bir alan veya mevsimsel alanla ilişkilendirilir. Uydu, hava durumu ve grup operasyonları verileri bir sınıra bağlıdır.
  • Art arda silme - Agronomik veriler hiyerarşik olarak depolanır ve kök olarak grup oluşturulur. Hiyerarşi, Grup - Grup -> Alanlar -> Mevsimsel Alanlar -> Sınırlar ->> İlişkili verileri (uydu, hava durumu, grup işlemleri) içerir. Art arda silme, herhangi bir düğümü ve alt ağacını silme işlemini ifade eder.

Sahne

Sahneler normalde uydu API'leri kullanılarak alınan görüntüleri ifade eder. Buna ham bantlar ve türetilmiş bantlar dahildir (Ör: NDVI). Sahneler bir çıkarım veya AI/ML modelinin uzamsal çıkışlarını da içerebilir (Ör: LAI).

Grup İşlemleri

Fam işlemleri, çapalama, dikim, pestisit & besinlerinin uygulanması ve hasatla ilgili ayrıntıları içerir. Bu, API'ler kullanılarak FarmBeats'e el ile gönderilebilir veya aynı bilgiler John Deere gibi çiftlik ekipmanı hizmet sağlayıcılarından çekilebilir.

Örnekler

Grup Oluşturma

İstemcinin kimliğini doğrula bölümünde gösterildiği gibi kimlik doğrulaması yaptıktan ve istemci nesnesini oluşturduktan sonra, FarmBeats kaynağında aşağıdaki gibi bir grup oluşturabilirsiniz:

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

Grup Oluşturma

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

Sezon Oluşturma

Nisan ile Ağustos 2021 arasında bir Season nesnesi oluşturma.

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

Sınır Oluşturma

Önceki örnekte oluşturulan Mevsimsel Alan için Sınır Oluşturma.

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

Uydu Görüntüsü Alma

Ocak 2020 ayına ait Yaprak Alan Dizini verilerini almak için yukarıda oluşturulan sınır için Uydu Veri Alımı işini tetikleme. Bu uzun süre çalışan bir işlemdir ('İş' olarak da adlandırılır) ve bir Poller nesnesi döndürür. .result() poller nesnesinde yönteminin çağrılması işlemin sona ermesini bekler ve son durumu döndürür.

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

Alınan Uydu Sahnelerini Alma

Önceki örnekte iş tarafından oluşturulan sahneler için sorgulama.

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

Sorun giderme

Genel

FarmBeats istemcisi, yanıtlarınızı çağırırsanız .raise_for_status() [Azure Core][azure_core] içinde tanımlanan özel durumları tetikler.

Günlüğe Kaydetme

Bu kitaplık, günlüğe kaydetme için standart günlük kitaplığını kullanır. HTTP oturumlarıyla ilgili temel bilgiler (URL'ler, üst bilgiler vb.) BİlGİ düzeyinde günlüğe kaydedilir.

İstek/yanıt gövdeleri ve işlenmemiş üst bilgiler de dahil olmak üzere ayrıntılı HATA AYıKLAMA düzeyi günlüğü, anahtar sözcük bağımsız değişkeniyle logging_enable bir istemcide etkinleştirilebilir:

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)

Benzer şekilde, logging_enable istemci için etkinleştirilmemiş olsa bile tek bir çağrı için ayrıntılı günlüğe kaydetmeyi etkinleştirebilir:

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

Sonraki adımlar

Diğer belgeler

FarmBeats hakkında daha kapsamlı belgeler için docs.microsoft.com hakkında FarmBeats belgelerine bakın.

Katkıda bulunma

Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için cla.microsoft.com adresini ziyaret edin.

Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.

Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorular veya yorumlarla iletişime geçin opencode@microsoft.com .