Intregrasi mitra citra

Artikel ini menjelaskan cara menggunakan komponen Penerjemah Azure FarmBeats untuk mengirim data citra ke FarmBeats. Data citra pertanian dapat dihasilkan dari berbagai sumber, seperti kamera multispektral, satelit, dan drone. Mitra citra pertanian dapat berintegrasi dengan FarmBeats untuk menyediakan pelanggan dengan peta yang dibuat khusus untuk peternakan mereka.

Penting

Azure FarmBeats dihentikan. Anda dapat melihat pengumuman publik di sini.

Kami telah membangun layanan baru yang berfokus pada pertanian, namanya adalah Azure Data Manager untuk Pertanian dan sekarang tersedia sebagai layanan pratinjau. Untuk informasi selengkapnya, lihat dokumentasi publik di sini atau tulis kepada kami di madma@microsoft.com.

Data, setelah tersedia, dapat divisualisasikan melalui FarmBeats Accelerator dan berpotensi digunakan untuk pengembangan model fusi data dan pembelajaran mesin/kecerdasan buatan (ML/AI) oleh bisnis pertanian atau integrator sistem pelanggan.

FarmBeats menyediakan kemampuan untuk:

  • Menentukan jenis gambar, sumber, dan format file kustom menggunakan /ExtendedType API.
  • Menyerap data citra dari berbagai sumber melalui /Scene dan /SceneFile API.

Informasi berikut berfokus pada mendapatkan segala bentuk citra ke dalam sistem FarmBeats.

Ketika Anda memilih bagian Citra Drone, pop-up terbuka untuk menampilkan gambar resolusi tinggi dari ortomosaik drone. Anda dapat mengakses perangkat lunak mitra, yang membantu merencanakan penerbangan drone dan mendapatkan data mentah. Anda akan terus menggunakan perangkat lunak mitra untuk perencanaan jalur dan rangkai gambar ortomosaik.

Mitra drone perlu memungkinkan pelanggan untuk menautkan akun pelanggan mereka dengan instans FarmBeats mereka di Azure.

Anda harus menggunakan kredensial berikut dalam perangkat lunak mitra drone untuk menautkan FarmBeats:

  • Titik akhir API
  • ID Penyewa
  • ID Klien
  • Rahasia klien

Pengembangan API

API berisi dokumentasi teknis Swagger.

Autentikasi

FarmBeats menggunakan Microsoft Entra ID. Azure App Service menyediakan dukungan autentikasi dan otorisasi bawaan. 

Untuk informasi selengkapnya, lihat Microsoft Entra ID.   

FarmBeats Datahub menggunakan autentikasi pembawa, yang membutuhkan kredensial berikut:

  • ID Klien
  • Rahasia klien
  • ID Penyewa

Dengan menggunakan kredensial sebelumnya, pemanggil dapat meminta token akses, yang perlu dikirim dalam permintaan API berikutnya, di bagian header, sebagai berikut:

headers = {"Authorization": "Bearer " + access_token, …} 

Contoh kode Python berikut mengambil token akses. Anda kemudian dapat menggunakan token untuk panggilan API berikutnya ke FarmBeats.

import requests
import json
import msal

# Your service principal App ID
CLIENT_ID = "<CLIENT_ID>"
# Your service principal password
CLIENT_SECRET = "<CLIENT_SECRET>"
# Tenant ID for your Azure subscription
TENANT_ID = "<TENANT_ID>"

AUTHORITY_HOST = 'https://login.microsoftonline.com'
AUTHORITY = AUTHORITY_HOST + '/' + TENANT_ID

ENDPOINT = "https://<yourfarmbeatswebsitename-api>.azurewebsites.net"
SCOPE = ENDPOINT + "/.default"

context = msal.ConfidentialClientApplication(CLIENT_ID, authority=AUTHORITY, client_credential=CLIENT_SECRET)
token_response = context.acquire_token_for_client(SCOPE)
# We should get an access token here
access_token = token_response.get('access_token')

Header permintaan HTTP

Berikut adalah header permintaan paling umum yang perlu ditentukan ketika Anda melakukan panggilan API ke FarmBeats Datahub.

Header Deskripsi dan contoh
Jenis-Konten Format permintaan (Jenis Konten: aplikasi/<format>). Untuk FarmBeats Datahub API, formatnya adalah JSON. Jenis-Konten: aplikasi/json
Authorization Tentukan token akses yang diperlukan untuk melakukan panggilan API. Otorisasi: Token Akses Pembawa <>
Terima Format respons. Untuk FarmBeats Datahub API, formatnya adalah JSON. Terima: aplikasi/json

Permintaan API

Untuk membuat permintaan REST API, Anda menggabungkan:

  • Metode HTTP (DAPATKAN, POSTING, dan LETAKKAN).
  • URL ke layanan API.
  • URI sumber daya (untuk mengkueri, mengirimkan data, memperbarui, atau menghapus).
  • Satu atau beberapa header permintaan HTTP.

Secara opsional, Anda dapat memasukkan parameter kueri pada panggilan DAPATKAN untuk memfilter, membatasi ukuran, dan mengurutkan data dalam respons.

Sampel permintaan berikut adalah untuk mendapatkan daftar perangkat:

curl -X GET "https://microsoft-farmbeats.azurewebsites.net/Device" -H
"Content-Type: application/json" -H
"Authorization: Bearer <Access-Token>"

Sebagian besar panggilan DAPATKAN, POSTING, dan LETAKKAN memerlukan isi permintaan JSON.

Sampel permintaan berikut adalah membuat perangkat. Sampel ini memiliki input JSON dengan isi permintaan.

curl -X POST "https://microsoft-farmbeats.azurewebsites.net/Device" -H
"accept: application/json" -H
"Content-Type: application/json" -H "Authorization: Bearer <Access-Token>" -d
"{  \"deviceModelId\": \"ID123\",  \"hardwareId\": \"MHDN123\",  \"reportingInterval\": 900,
\"name\": \"Device123\",  \"description\": \"Test Device 123\",}"

Format data

JSON adalah format data independen bahasa pemrogram umum yang menyediakan representasi teks sederhana dari struktur data arbitrer. Untuk informasi selengkapnya, lihat JSON org.

Menyerap citra ke FarmBeats

Setelah mitra memiliki kredensial untuk terhubung ke FarmBeats Datahub, mitra mengambil langkah-langkah berikut dalam komponen Penerjemah.

  1. Buat jenis perluasan baru untuk bidang berikut ini, sesuai dengan jenis citra yang akan diunggah:

    • Sumber Adegan: Misalnya, drone_partner_name
    • Jenis Adegan: Misalnya, drone
    • Jenis File Adegan: Misalnya, indeks klorofil
    • Jenis Konten File Adegan: Misalnya, gambar/tiff
  2. Hubungi /Farms API untuk mendapatkan daftar peternakan dari dalam sistem Azure FarmBeats.

  3. Berikan pelanggan kemampuan untuk memilih satu peternakan dari daftar peternakan.

    Sistem mitra harus menunjukkan pertanian dalam perangkat lunak mitra untuk melakukan perencanaan jalur dan penerbangan drone dan pengumpulan citra.

  4. Hubungi /Scene API dan berikan detail yang diperlukan untuk membuat adegan baru dengan ID adegan unik.

  5. Terima URL SAS blob untuk mengunggah citra yang diperlukan ke FarmBeats Datahub, dalam konteks peternakan yang dipilih, dalam sistem FarmBeats.

Berikut adalah alur terperinci pada panggilan API.

Langkah 1: ExtendedType

Periksa /ExtendedType API untuk melihat apakah jenis dan sumber file tersedia di FarmBeats. Untuk melakukannya, hubungi DAPATKAN di /ExtendedType API.

Berikut adalah nilai yang ditentukan sistem:

{
  "items": [
    {
      "id": "ae2aa527-7d27-42e2-8fcf-841937c651d7",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-10-25T09:47:42.5910344Z",
      "key": "SceneFileType",
      "value": [
        "evi",
        "ndvi",
        "ndwi",
        "tci",
        "soil-moisture",
        "sensor-placement",
        "sentinel-b01",
        "sentinel-b02",
        "sentinel-b03",
        "sentinel-b04",
        "sentinel-b05",
        "sentinel-b06",
        "sentinel-b07",
        "sentinel-b08",
        "sentinel-b8a",
        "sentinel-b09",
        "sentinel-b10",
        "sentinel-b11",
        "sentinel-b12",
        "cloud-mask",
        "farm-mask",
        "image/tiff",
        "orthomosaic"
      ],
      "description": "List of scene file types available in system. User can add more values."
    },
    {
      "id": "b7824d2e-3e43-46d3-8fd4-ec7ba8918d84",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-10-25T09:45:44.8914691Z",
      "key": "SceneFileContentType",
      "value": [
        "image/tiff",
        "image/png",
        "image/jpeg",
        "text/csv",
        "text/plain",
        "text/tab-separated-values",
        "application/json",
        "application/octet-stream",
        "orthomosaic"
      ],
      "description": "List of scene file content types available in system. User can add more values."
    },
    {
      "id": "21d2924d-8b3e-4ce4-a7f8-318e85c0f7f2",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-10-25T09:45:37.5096445Z",
      "key": "SceneSource",
      "value": [
        "sentinel-l1c",
        "sentinel-l2a",
        "farmbeats-model",
        "dji",
        "SlantRange-3P",
        "DJI"
      ],
      "description": "List of scene sources available in system. User can add more values."
    },
    {
      "id": "6e09ca69-cacf-4b53-b63a-53c659aae4a4",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-10-25T09:45:34.7483899Z",
      "key": "SceneType",
      "value": [
        "base-bands",
        "sensor-placement",
        "soil-moisture",
        "evi",
        "ndwi",
        "ndvi",
        "drone",
        "orthomosaic-drone"
      ],
      "description": "List of scene types available in system. User can add more values."
    },
    {
      "id": "55d8436b-3a86-4bea-87ab-e1b51226525f",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-06-17T07:32:30.1135716Z",
      "key": "SensorMeasureType",
      "value": [
        "AmbientTemperature",
        "CO2",
        "Depth",
        "ElectricalConductivity",
        "LeafWetness",
        "Length",
        "LiquidLevel",
        "Nitrate",
        "O2",
        "PH",
        "Phosphate",
        "PointInTime",
        "Potassium",
        "Pressure",
        "RainGauge",
        "RelativeHumidity",
        "Salinity",
        "SoilMoisture",
        "SoilTemperature",
        "SolarRadiation",
        "State",
        "TimeDuration",
        "UVRadiation",
        "UVIndex",
        "Volume",
        "WindDirection",
        "WindRun",
        "WindSpeed",
        "Evapotranspiration",
        "PAR"
      ],
      "description": "List of sensor measure types available in system. User can add more values."
    },
    {
      "id": "0dfd6e6b-df58-428f-9ab8-a0674bfdcbe5",
      "createdAt": "2019-06-17T07:32:30.1135716Z",
      "lastModifiedAt": "2019-06-17T07:32:30.1135716Z",
      "key": "SensorMeasureUnit",
      "value": [
        "NoUnit",
        "Celsius",
        "Fahrenheit",
        "Kelvin",
        "Rankine",
        "Pascal",
        "Mercury",
        "PSI",
        "MilliMeter",
        "CentiMeter",
        "Meter",
        "Inch",
        "Feet",
        "Mile",
        "KiloMeter",
        "MilesPerHour",
        "MilesPerSecond",
        "KMPerHour",
        "KMPerSecond",
        "MetersPerHour",
        "MetersPerSecond",
        "Degree",
        "WattsPerSquareMeter",
        "KiloWattsPerSquareMeter",
        "MilliWattsPerSquareCentiMeter",
        "MilliJoulesPerSquareCentiMeter",
        "VolumetricWaterContent",
        "Percentage",
        "PartsPerMillion",
        "MicroMol",
        "MicroMolesPerLiter",
        "SiemensPerSquareMeterPerMole",
        "MilliSiemensPerCentiMeter",
        "Centibar",
        "DeciSiemensPerMeter",
        "KiloPascal",
        "VolumetricIonContent",
        "Liter",
        "MilliLiter",
        "Seconds",
        "UnixTimestamp",
        "MicroMolPerMeterSquaredPerSecond",
        "InchesPerHour"
      ],
      "description": "List of sensor measure units available in system. User can add more values."
    }
  ]
}

Langkah ini adalah pengaturan satu kali. Cakupan jenis adegan baru ini terbatas pada langganan di mana Azure FarmBeats diinstal.

Misalnya, untuk menambahkan SceneSource: "SlantRange", Anda melakukan PUT pada ID /ExtendedType API dengan payload input kunci "SceneSource".

{

      "key": "SceneSource",
      "value": [
        "sentinel-l1c",
        "sentinel-l2a",
        "farmbeats-model",
        "dji",
        "SlantRange-3P"
      ],
      "description": "List of scene sources available in system. User can add more values."
}

Bidang hijau adalah tambahan baru untuk nilai sumber adegan yang ditentukan sistem.

Langkah 2: Dapatkan detail pertanian

Adegan (file .tiff atau .csv) berada dalam konteks peternakan. Anda perlu mendapatkan detail pertanian dengan melakukan DAPATKAN di /Farm API. API mengembalikan daftar peternakan yang tersedia di FarmBeats. Anda dapat memilih peternakan yang ingin Anda inginkan untuk menyerap data.

DAPATKAN respon /Farm:

{
  "id": "07f3e09c-89aa-4619-8d50-e57fb083d8f9",
  "createdAt": "2019-11-01T13:55:41.8804663Z",
  "lastModifiedAt": "2019-11-01T13:55:41.8804663Z",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [
          78.34252251428694,
          17.402556352862675
        ],
        [
          78.34278000635095,
          17.407920852463022
        ],
        [
          78.34883106989963,
          17.40878079576528
        ],
        [
          78.3498181228054,
          17.403539173730607
        ],
        [
          78.34805859369493,
          17.39977166504127
        ],
        [
          78.34252251428694,
          17.402556352862675
        ]
      ]
    ]
  },
  "name": "Samplefarm",
  "properties": {
    "crops": "Corn",
    "address": "Sample street"
  }
}

Langkah 3: Buat ID adegan (Panggila POSTING)

Buat adegan baru (file .tiff atau .csv) dengan informasi yang diberikan, yang menyediakan tanggal, urutan, dan ID pertanian yang terkait dengan adegan tersebut. Metadata yang terkait dengan adegan dapat ditentukan di bawah properti, yang mencakup durasi dan jenis pengukuran.

Membuat adegan baru menghasilkan ID adegan baru, yang terkait dengan peternakan. Setelah ID scene dibuat, pengguna dapat menggunakan hal yang sama untuk membuat file baru (.tiff atau .csv) dan menyimpan konten file.

Contoh payload input untuk panggilan POSTING pada /Scene API:

{
  "sceneId": "a0505928-c480-491b-ba31-d38285a28c1d",
  "type": "newtype",
  "contentType": "image/tiff",
  "name": "test scene file",
  "description": "test scene file description",
  "properties": {
    "additionalProp1": {},
    "additionalProp2": {},
    "additionalProp3": {}
  }
}

Respons API:

{
  "id": "a0505928-c480-491b-ba31-d38285a28c1d",
  "createdAt": "2019-10-04T16:19:12.4838584Z",
  "lastModifiedAt": "2019-10-04T16:19:12.4838584Z",
  "type": "new type",
  "source": "SlantRange-3P",
  "farmId": "d41a33e7-b73e-480e-9279-0fcb3207332b",
  "date": "2019-10-04T16:13:39.064Z",
  "sequence": 5,
  "name": "test scene",
  "description": "test scene description",
  "properties": {}
}

Membuat file adegan

ID adegan yang dikembalikan di langkah 3 adalah input untuk file adegan. File adegan mengembalikan token URL SAS, yang berlaku selama 24 jam.

Jika pengguna memerlukan cara terprogram untuk mengunggah aliran citra, SDK penyimpanan blob dapat digunakan untuk menentukan metode menggunakan ID, lokasi, dan URL file adegan.

Contoh payload input untuk panggilan POSTING pada /SceneFile API:

{
  "sceneId": "a0505928-c480-491b-ba31-d38285a28c1d",
  "type": "newtype",
  "contentType": "image/tiff",
  "name": "test scene file",
  "description": "test scene file description",
  "properties": {
    "additionalProp1": {},
    "additionalProp2": {},
    "additionalProp3": {}
  }
}

Respons API:

{
  "uploadSASUrl": "https://storagej2lho.blob.core.windows.net/farm-scene/2019/a0505928-c480-491b-ba31-d38285a28c1d/e91139a7-4ebd-4e2f-b17c-c677822dc840?sv=2018-03-28&sr=b&sig=%2F1426JkDcIFE5g3d%2BjOevCVMIn%2FJo9YKwBn3La5zL8Y%3D&se=2019-10-05T16%3A23%3A57Z&sp=w",
  "id": "e91139a7-4ebd-4e2f-b17c-c677822dc840",
  "createdAt": "2019-10-04T16:23:57.1192916Z",
  "lastModifiedAt": "2019-10-04T16:23:57.1192916Z",
  "blobUrl": "https://storagej2lho.blob.core.windows.net/farm-scene/2019/a0505928-c480-491b-ba31-d38285a28c1d/e91139a7-4ebd-4e2f-b17c-c677822dc840",
  "sceneId": "a0505928-c480-491b-ba31-d38285a28c1d",
  "type": "newtype",
  "contentType": "image/tiff",
  "name": "test scene file",
  "description": "test scene file description",
  "properties": {}
}


Panggilan POSTING ke /SceneFile API mengembalikan URL pengunggahan SAS, yang dapat digunakan untuk mengunggah file .csv atau .tiff menggunakan klien atau pustaka penyimpanan Azure Blob.

Langkah berikutnya

Untuk informasi selengkapnya tentang detail integrasi berbasis REST API, lihat REST API.