此架構旨在顯示端對端實作,其牽涉到搭配 Azure Synapse Analytics 使用地理空間連結庫和 AI 模型來擷取、載入、轉換和分析空間數據。 本文也會說明如何整合地理空間特定的 Azure 認知服務 模型、來自合作夥伴的 AI 模型、自備數據,以及使用 Azure Synapse Analytics 的 AI 模型。 本文件的目標物件是使用地理空間或太空數據時具有中繼技能等級的使用者。
GitHub 上提供此架構的實作。
Apache®、Apache Spark、Spark、Spark 標誌、Apache Sedona、Apache 孵化器、Apache 羽毛標誌和 Apache 孵化器項目標誌是 美國 和/或其他國家/地區的 Apache Software Foundation 註冊商標或商標。 使用這些標記不會隱含 Apache Software Foundation 的背書。
架構
資料流程
下列各節說明架構中的階段。
資料擷取
太空數據是從空客、NAIP/USDA(透過行星電腦 API)和 Maxar 等數據源提取。 數據會內嵌至 Azure Data Lake Storage。
Azure Synapse Analytics 提供各種管線和活動,例如 Web 活動、數據流活動和自定義活動,以連線到這些來源,並將數據複製到 Data Lake Storage。
Azure Synapse 自定義活動會在虛擬機的 Azure Batch 集區或 Docker 相容容器中執行自定義的程式代碼邏輯。
資料轉換
數據會處理並轉換成分析師和 AI 模型可取用的格式。 地理空間連結庫,包括 GDAL、OGR、Rasterio 和 GeoPandas,都可用來執行轉換。
Azure Synapse Spark 集區可讓您設定和使用這些連結庫來執行數據轉換。 您也可以使用使用 Azure Batch 集區的 Azure Synapse 自定義活動。
Azure Synapse Notebook 是一種 Web 介面,可用來建立包含即時程式代碼、視覺效果和敘事文字的檔案。 筆記本是驗證想法、定義轉換,並執行快速實驗以取得數據見解並建置管線的好位置。 在範例程式代碼中,GDAL 連結庫會在 Spark 集區中使用來執行資料轉換。 如需詳細資訊,請參閱 本文的範例程式代碼 一節。
此範例解決方案會從此數據轉換步驟實作此管線。 此範例是以假設數據是由稍早所述的數據擷取方法複製 Data Lake Storage 所撰寫。 它示範此管線的實作以進行點陣數據處理。
AI 模型的分析和執行
Azure Synapse 筆記本環境會分析並執行 AI 模型。
使用認知服務 自訂視覺 模型等服務開發的 AI 模型,在自己的環境中定型,並在 Azure Synapse 環境中以 Docker 容器的形式封裝。
在 Azure Synapse 環境中,您也可以執行可從合作夥伴取得的各種功能的 AI 模型,例如物件偵測、變更偵測和土地分類。 這些模型會在自己的環境中定型,並封裝為 Docker 容器。
Azure Synapse 可以透過自訂活動來執行這類 AI 模型,以可執行檔或 Docker 容器的形式在 Batch 集區中執行程式碼。 此範例解決方案示範如何在 Azure Synapse 管線中執行 自訂視覺 AI 模型,以針對特定地理空間區域進行物件偵測。
分析后和視覺效果
- 如需進一步分析和視覺效果,AI 模型的分析和執行輸出可以儲存在 Data Lake Storage、數據感知資料庫,例如 適用於 PostgreSQL 的 Azure 資料庫 或 Azure Cosmos DB。 此範例解決方案示範如何轉換 AI 模型輸出,並將其儲存為 Data Lake Storage 和 適用於 PostgreSQL 的 Azure 資料庫 中的 GeoJSON 數據。 您可以從該處擷取和查詢輸出。
- 針對視覺效果:
- 您可以使用 ArcGIS Desktop 之類的授權工具,或 QGIS 之類的開放原始碼工具。
- 您可以使用 Power BI 從各種資料源存取 GeoJSON,並將地理資訊系統 (GIS) 資料可視化。
- 您可以使用用戶端地理空間 JavaScript 連結庫,將 Web 應用程式中的數據可視化。
元件
資料來源
- 影像提供者。
- 使用自己的資料。 將您自己的數據複製到 Data Lake Storage。
資料擷取
- Azure Synapse Analytics 是一項無限制的分析服務,可將數據整合、企業數據倉儲和巨量數據分析整合在一起。 Azure Synapse 包含與 Azure Data Factory 相同的 資料整合 引擎和體驗,因此您可以在不離開 Azure Synapse 的情況下大規模建立 ETL 管線。
- Azure Data Lake Storage 專用於巨量數據分析,並建置在 Azure Blob 儲存體 上。
- Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。 Batch 工作可以直接在 Batch 集區中的虛擬機(節點)上執行,但您也可以設定 Batch 集區,以在節點上的 Docker 相容容器中執行工作。
- Azure Synapse 自定義活動會在虛擬機的 Azure Batch 集區或 Docker 容器中執行自定義的程式代碼邏輯。
- Azure 金鑰保存庫 會儲存和控制對令牌、密碼和 API 金鑰等秘密的存取。 Key Vault 也建立和控制加密金鑰,並管理安全性憑證。
資料轉換
下列地理空間連結庫和套件會一起使用進行轉換。 這些連結庫和套件會安裝在無伺服器 Spark 集區中,然後附加至 Azure Synapse Notebook。 如需安裝連結庫的資訊,請參閱 本文稍後的在 Azure Synapse Spark 集區中安裝地理空間套件。
- 地理空間連結庫
- GDAL 是用來操作太空數據的工具庫。 GDAL 適用於點陣和向量數據類型。 這是一個很好的工具,知道您是否使用太空數據。
- Rasterio 是點陣處理的模組。 您可以使用它,在 Python 中讀取和寫入數種不同的點陣格式。 Rasterio 是以 GDAL 為基礎。 匯入模組時,Python 會自動註冊所有已知的 GDAL 驅動程式以讀取支援的格式。
- GeoPandas 是開放原始碼專案,可讓您更輕鬆地在 Python 中使用太空數據。 GeoPandas 擴充 Pandas 所使用的數據類型,以允許幾何類型的空間作業。
- Shapely 是 Python 套件,用於設定平面特徵的理論分析和操作。 它會從廣泛部署的 GEOS 連結庫使用 (透過 Python 的 ctypes 模組) 函式。
- pyproj 會執行製圖轉換。 它會使用 PROJ,從經度和緯度轉換成原生地圖投影 x、y 座標,反之亦然。
- Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。
- Azure Synapse Notebook 是一種 Web 介面,可用來建立包含即時程式代碼、視覺效果和敘述文字的檔案。 您可以使用 Notebook 活動,將現有的 Azure Synapse Notebook 新增至 Azure Synapse 管線。
- Apache Spark 集 區可讓您設定及使用連結庫來執行資料轉換。 您可以使用 Spark 作業定義活動,將現有的 Spark 作業新增至 Azure Synapse 管線。
分析和 AI 模型
- Azure Synapse 提供機器學習功能。
- Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。 在此解決方案中,Azure Synapse 自定義活動可用來在 Azure Batch 集區上執行 Docker 型 AI 模型。
- Azure 認知服務 可讓您將視覺內嵌至您的應用程式。 您可以使用認知服務的元件 自訂視覺,針對特定領域自定義和內嵌最先進的電腦視覺影像分析。
- 您也可以使用自備 AI 模型,以及 Microsoft 合作夥伴 AI 模型,例如 blackshark.ai。
分析后和視覺效果連結
- 適用於 PostgreSQL 的 Azure 資料庫 是完全受控的關係資料庫服務,專為超大規模工作負載所設計。 它透過 PostGIS 延伸模組支援太空資料。
- Azure Cosmos DB 支援對 GeoJSON 中表示的地理空間點數據編製索引和查詢。
- Power BI 是用於建置報表和儀錶板的互動式數據視覺效果工具。 您可以從 Esri ArcGIS Maps 取得太空數據見解。
- QGIS 是免費的開放原始碼GIS,可用來建立、編輯、可視化、分析及發佈地理空間資訊。
- ArcGIS Desktop 是由 Esri 提供的授權產品。 您可以使用它來建立、分析、管理及共用地理資訊。
替代項目
如果您想要執行可從 Azure Synapse 呼叫的容器化 AI 模型,您可以使用 Azure Kubernetes Service、Azure 容器執行個體 或 Azure Container Apps。
Azure Databricks 提供裝載分析管線的替代方案。
Azure HDInsight 中的Spark提供在Apache Spark環境中使用地理空間連結庫的替代方案。
以下是可用於空間資料處理的一些替代連結庫和架構:
- Apache Sedona,前身為 GeoSpark,是一種叢集運算系統,用於處理大規模的空間數據。 Sedona 使用現用的空間復原分散式數據集和 SpatialSQL 擴充 Spark 和 Spark SQL,以有效率地跨機器載入、處理和分析大規模空間數據。
- Dask for Python 是可調整現有 Python 生態系統的平行運算連結庫。
案例詳細資料
太空數據收集越來越常見。 為了應用人工智慧,機器學習需要儲存的數據封存。 建立雲端式數據分析解決方案的需求變得更加重要,讓企業和政府能夠推動更明智的商業和戰術決策。
潛在使用案例
此解決方案適用於航空航太和飛機產業。 其可解決這些案例:
- 點陣數據擷取和處理
- 透過預先定型的 AI 模型進行物件偵測
- 透過 AI 模型分類土地品質
- 透過 AI 模型監視環境中的變更
- 預先處理影像集的衍生數據集
- 向量視覺效果 /小面積耗用量
- 向量數據篩選和跨數據聯結
考量
這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。
卓越營運
如果您使用 Git 進行原始檔控制共同作業,您可以使用 Synapse Studio 將工作區與 Git 存放庫、Azure DevOps 或 GitHub 產生關聯。 如需詳細資訊,請參閱 Synapse Studio 中的原始檔控制。
- 在 Azure Synapse 工作區中,CI/CD 會將所有實體從一個環境(開發、測試、生產)移至另一個環境。
- 您可以使用 Azure DevOps 發行管線和 GitHub Actions,將 Azure Synapse 工作區部署至多個環境自動化。
效能
- Azure Synapse 支援 Apache Spark 3.1.2,其效能優於其前身。
- 如需Spark集區調整和節點大小的相關信息,請參閱 Azure Synapse Analytics 中的Spark集區。
- 透過 Azure Batch,您可以相應放大內部平行處理在 Azure Synapse 自定義活動中提交的轉換。 Azure Batch 支援特製化的 GPU 優化 VM 大小,可用來執行 AI 模型。
可靠性
可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱可靠性要素的概觀 (部分機器翻譯)。
如需 SLA 資訊,請參閱 Azure Synapse SLA。
安全性
安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性要素的概觀。
如需安全性最佳做法,請參閱下列文章:
- Azure Synapse Analytics 安全性:簡介
- Azure Synapse Analytics 安全性:數據保護
- Azure Synapse Analytics 安全性:訪問控制
- Azure Synapse Analytics 安全性:驗證
- Azure Synapse Analytics:網路安全性
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀。
這些資源提供定價和成本優化的相關信息:
- 規劃和管理 Azure Synapse 的成本
- Azure 定價計算機中的 Azure Synapse
- Azure Synapse 中的 Apache Spark 集區
- Azure Batch 中的節點和集區
- Azure 定價計算機中的 Azure Batch
注意
如需合作夥伴 AI 模型的定價和授權條款,請參閱合作夥伴的檔。
部署此案例
範例解決方案的 Bicep 部署可供使用。 若要開始使用此部署,請參閱 這些指示。
限制
此架構示範使用 Azure Synapse 的端對端地理處理和分析解決方案。 此範例實作的目標是感興趣的小型到中型區域,以及點陣數據的並行地理處理有限。
範例指令碼
下列指示說明如何使用 Synapse 筆記本,將轉換讀取、寫入和套用至儲存在 Azure Data Lake Storage 中的點陣數據。 意圖在於示範 Synapse 筆記本中的連結庫使用,而不是示範轉換。
必要條件
- 安裝地理空間連結庫。
- 建立 Azure 金鑰保存庫 來儲存秘密。 在此案例中,我們會將記憶體帳戶的存取金鑰儲存在密鑰保存庫中。 如需指示,請參閱在 Azure 金鑰保存庫 中儲存認證。
- 使用 Azure Synapse 建立 Azure 金鑰保存庫 的連結服務。
指示
從點陣資料列印資訊:
from osgeo import gdal gdal.UseExceptions() access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>') gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>') gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key) dataset_info = gdal.Info('/vsiadls/aoa/input/sample_image.tiff') #/vsiadls/<container_name>/path/to/image print(dataset_info)
注意
/vsiadls/
是文件系統處理程式,可讓您即時隨機讀取 Azure Data Lake Storage 檔案系統中可用的主要非公用檔案。 不需要下載整個檔案。/vsiadls/
類似於/vsiaz/
。 它會使用相同的組態選項進行驗證。 不同於/vsiaz/
,/vsiadls/
提供真正的目錄管理和 Unix 樣式 ACL 支援。 針對某些功能,必須在 Azure 記憶體中開啟階層式支援。 如需詳細資訊,請參閱/vsiadls/
文件。Driver: GTiff/GeoTIFF Files: /vsiadls/naip/input/sample_image.tiff Size is 6634, 7565 Coordinate System is: PROJCRS["NAD83 / UTM zone 16N", BASEGEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]], CONVERSION["UTM zone 16N", METHOD["Transverse Mercator", ID["EPSG",9807]], PARAMETER["Latitude of natural origin",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8801]], PARAMETER["Longitude of natural origin",-87, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8802]], PARAMETER["Scale factor at natural origin",0.9996, SCALEUNIT["unity",1], ID["EPSG",8805]], PARAMETER["False easting",500000, LENGTHUNIT["metre",1], ID["EPSG",8806]], PARAMETER["False northing",0, LENGTHUNIT["metre",1], ID["EPSG",8807]]], CS[Cartesian,2], AXIS["(E)",east, ORDER[1], LENGTHUNIT["metre",1]], AXIS["(N)",north, ORDER[2], LENGTHUNIT["metre",1]], USAGE[ SCOPE["Engineering survey, topographic mapping."], AREA["North America - between 90°W and 84°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin."], BBOX[23.97,-90,84,-84]], ID["EPSG",26916]] Data axis to CRS axis mapping: 1,2 Origin = (427820.000000000000000,3395510.000000000000000) Pixel Size = (1.000000000000000,-1.000000000000000) Metadata: AREA_OR_POINT=Area Image Structure Metadata: COMPRESSION=DEFLATE INTERLEAVE=PIXEL LAYOUT=COG PREDICTOR=2 Corner Coordinates: Upper Left ( 427820.000, 3395510.000) ( 87d45'13.12"W, 30d41'24.67"N) Lower Left ( 427820.000, 3387945.000) ( 87d45'11.21"W, 30d37'18.94"N) Upper Right ( 434454.000, 3395510.000) ( 87d41' 3.77"W, 30d41'26.05"N) Lower Right ( 434454.000, 3387945.000) ( 87d41' 2.04"W, 30d37'20.32"N) Center ( 431137.000, 3391727.500) ( 87d43' 7.54"W, 30d39'22.51"N) Band 1 Block=512x512 Type=Byte, ColorInterp=Red Overviews: 3317x3782, 1658x1891, 829x945, 414x472 Band 2 Block=512x512 Type=Byte, ColorInterp=Green Overviews: 3317x3782, 1658x1891, 829x945, 414x472 Band 3 Block=512x512 Type=Byte, ColorInterp=Blue Overviews: 3317x3782, 1658x1891, 829x945, 414x472 Band 4 Block=512x512 Type=Byte, ColorInterp=Undefined Overviews: 3317x3782, 1658x1891, 829x945, 414x472
使用 GDAL 將 GeoTiff 轉換為 PNG:
from osgeo import gdal gdal.UseExceptions() access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>') gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>') gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key) tiff_in = "/vsiadls/aoa/input/sample_image.tiff" #/vsiadls/<container_name>/path/to/image png_out = "/vsiadls/aoa/input/sample_image.png" #/vsiadls/<container_name>/path/to/image options = gdal.TranslateOptions(format='PNG') gdal.Translate(png_out, tiff_in, options=options)
將 GeoTiff 映射儲存在 Azure Data Lake Storage 中。
由於數據如何儲存在雲端,以及檔案處理程式
/vsiaz/
和支援/vsiadls/
只支援循序寫入的事實,因此我們會使用 mssparkutils 套件中可用的檔案掛接功能。 將輸出寫入掛接位置之後,請將它複製到 Azure Data Lake Storage,如下列範例轉換所示:import shutil import sys from osgeo import gdal from notebookutils import mssparkutils mssparkutils.fs.mount( "abfss://<container_name>@<storage_account_name>.dfs.core.windows.net", "/<mount_path>", {"linkedService":"<linked_service_name>"} ) access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>') gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>') gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key) options = gdal.WarpOptions(options=['tr'], xRes=1000, yRes=1000) gdal.Warp('dst_img.tiff', '/vsiadls/<container_name>/path/to/src_img.tiff', options=options) jobId = mssparkutils.env.getJobId() shutil.copy("dst_img.tiff", f"/synfs/{jobId}/<mount_path>/path/to/dst_img.tiff")
在 Azure Synapse 中,您可以將 Azure Data Lake Storage 新增為其中一個連結的服務。 如需指示,請參閱 鏈接服務。
樣本解決方案
GitHub 上提供此架構的實作。
下圖顯示範例解決方案中的步驟:
注意
數據會從空間數據源提取,並複製到 Azure Data Lake Storage。 數據擷取不是參考實作的一部分。
- Azure Synapse 管線會從 Azure Data Lake Storage 讀取空間數據。
- 數據會使用 Azure Synapse 筆記本中的 GDAL 連結庫來處理。
- 已處理的數據會儲存在 Azure Data Lake Storage 中。
- 已處理的數據會從 Azure Data Lake Storage 讀取,並由 Azure Synapse 自定義活動傳遞至 AI 模型 自訂視覺 物件偵測。 自訂活動會使用 Azure Batch 集區來執行物件偵測模型。
- 物件偵測模型會輸出偵測到的物件和周框方塊清單。
- 偵測到的物件會轉換成 GeoJSON,並儲存在 Azure Data Lake Storage 中。
- GeoJSON 數據會從 Azure Data Lake Storage 讀取,並儲存在 PostgreSQL 資料庫中。
- 數據會從 PostgreSQL 資料庫讀取。 您可以在 ArcGIS Pro、QGIS 和 Power BI 等工具中進一步將其可視化。
在 Azure Synapse Spark 集區中安裝地理空間套件
您必須使用套件管理功能,在 Azure Synapse Spark 集區中安裝套件。 如需詳細資訊,請參閱 Azure Synapse 套件管理。
若要支援 Azure Synapse 上的空間數據工作負載,您需要 GDAL、Rasterio 和 GeoPandas 等連結庫。 您可以使用 YAML 檔案,在無伺服器 Apache Spark 集區上安裝這些連結庫。 Anaconda 連結庫會預安裝在 Spark 集區上。
必要條件
指示
下列連結庫和套件可在 environment.yml 檔案中使用。 建議您使用此檔案在 Spark 集區中安裝連結庫。 如果您複製下列內容,請確定沒有索引標籤,因為 YAML 只允許空格做為縮排。
name: aoi-env channels: - conda-forge - defaults dependencies: - azure-storage-file-datalake - gdal=3.3.0 - libgdal - pip>=20.1.1 - pyproj - shapely - pip: - rasterio - geopandas
注意
GDAL 會針對 Azure Data Lake Storage 使用虛擬文件系統
/vsiadls/
。移至 並 https://web.azuresynapse.net 登入您的工作區。
在瀏覽窗格中選取 [管理 ],然後選取 [Apache Spark 集區]。
選取 Spark 集區上的省略號按鈕 [...],以選取 [套件 ]。 從本機上傳environment.yml檔案,並套用套件設定。
入口網站的通知區段會在安裝完成時通知您。 您也可以採取下列步驟來追蹤安裝進度:
- 移至 [監視] 索引標籤上的 [Spark 應用程式] 清單。
- 選取對應至集區更新的 SystemReservedJob-LibraryManagement 連結。
- 檢視驅動程序記錄。
執行下列程式代碼,確認已安裝正確的連結庫版本。 Conda 安裝預安裝的連結庫也會列出。
import pkg_resources for d in pkg_resources.working_set: print(d)
如需詳細資訊,請參閱 管理套件。
參與者
本文正由Microsoft更新和維護。 原始投稿人如下。
主要作者:
- 孔古馬拉傑·納奇穆圖 |資深軟體工程師
- Karthick Narendran |資深軟體工程師
其他參與者:
- 米克·阿爾伯特 |技術寫入器
- 泰勒·科貝特 |資深 資料科學家
- 圖沙爾·達迪瓦爾 |資深軟體工程師
- Mandar Inamdar |首席工程經理
- Sushil Kumar |資深軟體工程師
- Nikhil Manchanda |首席工程經理
- Safiyah Sadiq |軟體工程師II
- 楊曉遠 |主體 資料科學 管理員
- Tai Yee |資深項目經理