Azure FarmBeats biblioteca de cliente para Python - versão 1.0.0b2
O FarmBeats é uma oferta de PaaS B2B da Microsoft que facilita a criação de soluções de agricultura digital inteligentes no Azure para empresas AgriFood. O FarmBeats permite que os utilizadores adquiram, agregam e processem dados agrícolas de várias origens (equipamentos agrícolas, meteorologia, satélite) sem a necessidade de investir em recursos de engenharia de dados profundos. Os clientes podem criar soluções SaaS em cima do FarmBeats e tirar partido do suporte de primeira classe para a criação de modelos para gerar informações em escala.
Utilize a biblioteca de cliente FarmBeats para Python para fazer o seguinte.
- Crie & entidades de atualização, farms, campos, campos sazonais e limites.
- Ingerir dados de satélite e meteorologia para áreas de interesse.
- Ingerir dados de operações do farm que abrangem o cultivo, a plantação, a colheita e a aplicação de entradas de farm.
Código fonte | Pacote (PyPi) | Documentação | de referência da APIDocumentação do | produto Registo de alterações
Introdução
Pré-requisitos
Para utilizar este pacote, tem de ter:
- Subscrição do Azure - Criar uma conta gratuita
- recurso Azure FarmBeats - Instalar o FarmBeats
- 3.6 ou posterior - Instalar o Python
Instalar o pacote
Instale a biblioteca de cliente Azure FarmBeats para Python com pip:
pip install azure-agrifood-farming
Autenticar o cliente
Para utilizar uma credencial de token do Azure Active Directory (AAD), forneça uma instância do tipo de credencial pretendido obtido a partir da biblioteca de identidades do azure .
Para se autenticar com o AAD, primeiro tem de instalar azure-identity
o pip e ativar a autenticação do AAD no recurso FarmBeats. Se seguiu os documentos de instalação ao criar o recurso FarmBeats, este já está abrangido.
Após a configuração, pode escolher o tipo de credencial a partir de azure.identity a utilizar. Por exemplo, DefaultAzureCredential pode ser utilizado para autenticar o cliente:
Defina os valores do ID do cliente, do ID do inquilino e do segredo do cliente da aplicação do AAD como variáveis de ambiente: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
Utilize a credencial do token devolvido para autenticar o cliente:
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)
Conceitos-chave
A compreensão básica dos termos abaixo ajudará a começar a utilizar a biblioteca de cliente FarmBeats.
Hierarquia do Farm
A hierarquia do farm é uma coleção de entidades abaixo.
- Party - é o guardião de todos os dados agrónomos.
- Farm - é uma coleção lógica de campos e/ou campos sazonais. Não têm nenhuma área associada.
- Field - é uma área multi-polígono. Espera-se que seja estável ao longo das estações.
- Campo sazonal - é uma área multi-polígono. Para definir um limite sazonal, precisamos dos detalhes da área (limite), hora (estação) e recorte. Espera-se que sejam criados novos campos sazonais para cada estação em crescimento.
- Boundary - é a área multi-polígono real expressa como geometria (em geojson). Normalmente, está associado a um campo ou a um campo sazonal. Os dados de operações de satélite, meteorologia e farm estão ligados a um limite.
- Eliminação em cascata – os dados agrónomos são armazenados hierárquicos com parte como raiz. A hierarquia inclui Party - Farms -> Fields ->> Campos Sazonais -> Limites -> Dados associados (satélite, meteorologia, operações agrícolas). Eliminação em cascata refere-se ao processo de eliminação de qualquer nó e respetiva subárvore.
Cenas
Cenas referem-se a imagens normalmente ingeridas com APIs de satélite. Isto inclui bandas cruas e bandas derivadas (Ex: NDVI). As cenas também podem incluir saídas espaciais de um modelo de inferência ou IA/ML (Ex: LAI).
Operações do Farm
As operações de Fam incluem detalhes relativos ao tilling, plantação, aplicação de nutrientes de pesticidas & e colheita. Isto pode ser enviado manualmente para o FarmBeats com APIs ou as mesmas informações podem ser obtidas a partir de fornecedores de serviços de equipamentos agrícolas, como o John Deere.
Exemplos
Criar uma Festa
Depois de autenticar e criar o objeto de cliente conforme mostrado na secção Autenticar o cliente , pode criar uma parte no recurso FarmBeats da seguinte forma:
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
}
)
Criar um 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
}
)
Criar uma Estação
Criar um objeto Temporada, que se estende de abril a agosto de 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
}
)
Criar um Limite
Criar um Limite para o Campo Sazonal criado no exemplo anterior.
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>"
}
)
Ingerir Imagens de Satélite
Acionar uma tarefa de Ingestão de Dados por Satélite para o limite criado acima, para ingerir dados do Índice de Área de Folha para o mês de janeiro de 2020.
Esta é uma Operação de Execução Prolongada (também denominada "Tarefa") e devolve um objeto Poller. Chamar o .result()
método no objeto do poller aguarda que a operação termine e devolve o estado final.
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()
Obter Cenas de Satélite Ingeridas
Consultar as cenas criadas pela tarefa no exemplo anterior.
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}")
Resolução de problemas
Geral
O cliente FarmBeats irá gerar exceções definidas em [Azure Core][azure_core] se chamar .raise_for_status()
as suas respostas.
Registo
Esta biblioteca utiliza a biblioteca de registos padrão para registos. As informações básicas sobre as sessões HTTP (URLs, cabeçalhos, etc.) são registadas ao nível da INFO.
O registo ao nível de DEBUG detalhado, incluindo corpos de pedido/resposta e cabeçalhos não retotados, pode ser ativado num cliente com o logging_enable
argumento palavra-chave:
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)
Da mesma forma, logging_enable
pode ativar o registo detalhado de uma única chamada, mesmo quando não está ativada para o cliente:
client.crops.get(crop_id="crop_id", logging_enable=True)
Passos seguintes
Documentação adicional
Para obter documentação mais extensa sobre o FarmBeats, veja a documentação do FarmBeats sobre docs.microsoft.com.
Contribuir
Agradecemos todas as contribuições e sugestões para este projeto. A maioria das contribuições requerem que celebre um Contrato de Licença de Contribuição (CLA) no qual se declare que tem o direito de conceder e que, na verdade, concede-nos os direitos para utilizar a sua contribuição. Para obter detalhes, visite cla.microsoft.com.
Quando submete um pedido Pull, um bot do CLA determina automaticamente se tem de fornecer um CLA e decorar o PR de forma adequada (por exemplo, etiqueta, comentário). Só tem de seguir as instruções fornecidas pelo bot. Apenas terá de fazer isto uma vez em todos os repositórios com o nosso CLA.
Este projeto adotou o Microsoft Open Source Code of Conduct (Código de Conduta do Microsoft Open Source). Para obter mais informações, consulte as FAQ do Código de Conduta ou o contacto opencode@microsoft.com com quaisquer perguntas ou comentários adicionais.
Azure SDK for Python
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários