Smart3D(ContextCapture)操作手冊中文翻譯7.SDK二次開發(fā)指南(ccmasterkernel’s documentation)

6.SDK二次開發(fā)指南ccmasterkernel’s documentation

本用戶手冊與ContextCapture MasterKernel SDK有關(guān)

作為ContextCapture MasterKernel SDK的一部分,ccMasterKernel是一個以編程方式訪問ContextCapture Master所有功能的python模塊。此模塊代替用戶界面,用于完整的項目創(chuàng)建、編輯和監(jiān)控。

提醒:本文件中的信息如有更改,恕不另行通知,并按“原樣”提供。Bentley對本材料不作任何形式的保證,包括但不限于對適銷性和特定用途適用性的暗示保證。Bentley不對本文所包含的錯誤或與使用本材料有關(guān)的任何直接、間接、特殊、附帶或后果性損害負(fù)責(zé)。

版權(quán):Bentley Systems

6.1概述(Overview)

作為ContextCapture MasterKernel SDK的一部分,ccMasterKernel是一個以編程方式訪問ContextCapture Master所有功能的python模塊。此模塊代替用戶界面,用于完整的項目創(chuàng)建、編輯和監(jiān)控。

ccmasterkernel模塊允許在一個簡單的方式,通過Python腳本開發(fā)定制的基于ContextCapture的應(yīng)用程序,自定義和/或自動3D重建過程。

API模塊(應(yīng)用程序編程接口)允許控制ContextCapture主項目(CCM文件)中使用的所有項:

項目(Project):創(chuàng)建、保存、編輯、選項設(shè)置、樹結(jié)構(gòu)管理。

塊(Block):(Excel,XML導(dǎo)入以及導(dǎo)出(KML),XML,非約束的照片),分割,提取,照片/?照片組(PhotoGroup)創(chuàng)建和編輯包括相機(jī)的三維屬性和位置/旋轉(zhuǎn),控制點(diǎn)(三維位置、照片測量),連接點(diǎn)的創(chuàng)建和編輯。

AT(空中三角測量/?Aerotriangulation):組件,定位模式,設(shè)置,任務(wù)提交,監(jiān)測/控制,導(dǎo)出空三報告。

重建(Reconstruction):空間框架(SRS,興趣區(qū)域,瓦片分塊),重建約束,參考三維模型,(導(dǎo)入導(dǎo)出retouches,勻色,處理設(shè)置,導(dǎo)出瓦片分割為kml。

生產(chǎn)(Production):控制所有參數(shù)(用途,格式,選項,范圍和定義),任務(wù)提交,監(jiān)測/控制。

工作隊列監(jiān)測。

應(yīng)用設(shè)置(Application?Settings):許可檢查,軟件的版本控制,在線更新。

二次開發(fā)API包括各種工具和數(shù)據(jù)交換(屬性樹,幾何)測量運(yùn)算。

6.2?安裝(Installation)

從更新9(update?9)開始,?python將被打包為一個wheel包。您可以在sdk/dist安裝目錄下找到*.whl文件。需要python 3.6 x64版本支持。

烈建議使用virtualenv和pip安裝此軟件包。

但是,仍然有一個ContextCapture SDK命令提示快捷方式,您可以使用它來創(chuàng)建virtualenv并在其中安裝ccmasterkernel。

6.3?升級指南(Migration?guide

從更新9(update9)開始,包名不再是ccmasterkernelpy,而是*ccmasterkernel。您需要更新腳本,才能是你老的腳步可以在新版本下運(yùn)行。如果不想全部更改,可以做如下替換:

把老命令

importCCMasterKernelPy

替換為:

importccmasterkernelasCCMasterKernelPy

作為一個小技巧

6.4教程

此簡單腳本創(chuàng)建新的CCM項目,導(dǎo)入XML塊定義,并保存項目:

importccmasterkernel


project=ccmasterkernel.Project()

project.setName('my project')

project.setProjectFilePath('D:/DATA/my project/my project.ccm')


project.importBlocks("'D:/DATA/block.xml")


project.writeToFile()

幾個完整的示例將與包一起安裝在python安裝示例/目錄中。

automaster.py

此腳本讀取照片目錄創(chuàng)建一個完整的重建(Reconstruction),它遵循整個工作流程(航空三角測量、重建和生產(chǎn)),并介紹了任務(wù)監(jiān)控。

module_info.py

此腳本演示如何通過Python模塊General面板的信息:許可證和功能、支持的生產(chǎn)(production)格式和選項等。

dump_project.py

此腳本從現(xiàn)有CCM項目中提取各種數(shù)據(jù)信息。

import_and_extract.py

此腳本演示了Aerial塊導(dǎo)入、塊提取和塊導(dǎo)出的示例。

import_and_split.py

此腳本演示了Aerial塊導(dǎo)入、塊分割和塊導(dǎo)出的示例。

import_txt.py

此腳本根據(jù)自定義文本塊格式創(chuàng)建塊

reconstruction_settings.py

此腳本在現(xiàn)有CCM項目中使用自定義設(shè)置創(chuàng)建新的重建。

6.5 API參考手冊

6.5.1模塊信息

獲取模塊的基本信息,無許可也可以訪問。

version()?→?str

Returns?軟件版本.


edition()?→?str

Returns?軟件規(guī)格?(eg. Expert, Ultimate).


isLicenseValid()?→?bool

Returns True?許可有效.

如果許可無效,可以通過lastLicenseErrorMsg()獲取許可詳細(xì)信息


lastLicenseErrorMsg()?→?str

Returns?許可錯誤的信息.

6.5.2?項目(Project)

Project選項管理與ContextCapture處理的場景相關(guān)的所有數(shù)據(jù)。

創(chuàng)建空項目的示例:

project=ccmasterkernel.Project()

project.setName('my project')

project.setProjectFilePath('D:/DATA/my project/my project.ccm')


project.writeToFile()


?MasterItem

ProjectSRS

ProjectSRSManager

?Project

6.5.3塊(block

一個Block區(qū)塊項目包含了一系列影像和屬性,包括傳感器尺寸、焦距、主點(diǎn)、透鏡畸變以及位置和旋轉(zhuǎn)?等姿態(tài)信息,基于這些信息,可以建立一個或多個重建項目。

Block的定義如下:

照片(Photos):導(dǎo)入或添加的照片及其相關(guān)的照片組屬性和照片姿態(tài)(通過航空三角測量或?qū)胗嬎悖?。通過塊的照片組(photogroup)訪問照片

點(diǎn)云(PointClouds):導(dǎo)入的點(diǎn)云及其關(guān)聯(lián)屬性

控制點(diǎn)(Control?points):手工輸入或?qū)搿?刂泣c(diǎn)是可選的。參見類:'ccmasterkernel.controlpoint'

連接點(diǎn)(Tie?points):由ContextCapture自動提取或?qū)搿_€可以輸入用戶連接點(diǎn)以幫助進(jìn)行航空三角測量。

塊類型(BlockType):例如“Aerial”,可選選項

Reconstruction列表(List?of reconstructions):基于Block

創(chuàng)建Block的示例:

block?=?ccmasterkernel.Block(project)

project.addBlock(block)


forinputFile?in?inputFiles:

????????block.getPhotogroups().addPhotoInAutoMode(inputFile)

為了管理塊的空三,可以創(chuàng)建專門用于調(diào)整的特殊塊。對于這些塊,附加一個AT對象來管理航空三角測量設(shè)置、處理和報告。

示例:

blockAT?=?ccmasterkernel.Block(project)

project.addBlock(blockAT)

blockAT.setBlockTemplate(ccmasterkernel.BlockTemplate.Template_adjusted, inputBlock)

坐標(biāo)系:對于地理參考項目,在塊級別,三維位置使用ECEF參考(EPSG:4978)。

6.5.4?照片(Photos)

管理照片集和關(guān)聯(lián)的屬性。通過照片組訪問塊的照片。

照片被分為一組或多組照片。均勻的一組照片,所有照片都是用同一個具有相同內(nèi)部方向(圖像尺寸、傳感器尺寸、焦距等)的物理相機(jī)拍攝的。

如果照片是根據(jù)拍攝時使用的相機(jī)按子目錄組織的,則ContextCapture可以自動確定相關(guān)的照片組。

6.5.5?空三(Aerotriangulation)

航空三角測量從輸入塊(Block)開始,生成具有計算或調(diào)整屬性的新塊。

航空三角測量可考慮當(dāng)前攝像機(jī)位置(例如,從GPS初始化)或地理參考控制點(diǎn)。

示例:

blockAT?=?ccmasterkernel.Block(project)

project.addBlock(blockAT)

blockAT.setBlockTemplate(ccmasterkernel.BlockTemplate.Template_adjusted, block)


# submit aerotriangulation processing

blockAT.getAT().submitProcessing()

6.5.6?連接點(diǎn)(TiePoints)

一個連接點(diǎn)對應(yīng)于兩張或多張不同照片中的像素,其中這些像素表示場景中同一物理點(diǎn)的投影。ContextCapture可以在航空三角測量過程中自動生成大量的連接點(diǎn)。但是,用戶連接點(diǎn)也可以預(yù)先輸入,以幫助進(jìn)行航空三角測量。

6.5.7?點(diǎn)云(PointClouds)

管理點(diǎn)云集和關(guān)聯(lián)屬性

6.5.8?重建Reconstruction

一個重建項目(Reconstruction)管理著一個三維重建框架(包含空間坐標(biāo)系,建模區(qū)域,瓦片設(shè)置,處理設(shè)定等),?基于一個重建項目可以建立一或多個生產(chǎn)任務(wù)。

Reconstruction的定義包含以下屬性:

空間參考(Spatial?framework):定義空間參考系統(tǒng)(SRS)、感興趣區(qū)域(ROI)和瓦片切割方式。

重建約束(Reconstruction?constraints):允許使用現(xiàn)有的三維數(shù)據(jù)來控制重建并避免重建錯誤

參考三維模型(Reference?3D model):是重建沙盒,它以本機(jī)格式存儲一個三維模型,隨著生產(chǎn)進(jìn)度逐步完成。該參考三維模型是應(yīng)用了修飾和重建約束的模型,并從中派生出需要完成的生成。通過InternalTile對象訪問參考三維模型

重建設(shè)置(Reconstruction?settings):處理選項設(shè)置,設(shè)置幾何精度級別(高或最高)和其他重建設(shè)置。

Production列表(List?of productions)

示例:

reconstruction?=?ccmasterkernel.Reconstruction(block)

block.addReconstruction(reconstruction)


6.5.9生產(chǎn)(Production)

生產(chǎn)項管理三維模型的生成,包括錯誤反饋、進(jìn)度監(jiān)控和有關(guān)底層重建更新的通知(例如,修飾)。

6.5.10?幾何對象(Geometry)

MasterKernel中使用的基本幾何類型的定義

6.5.11?大地測量(Geodesy)

通過Geodesy來實(shí)現(xiàn)在不同坐標(biāo)系統(tǒng)下的轉(zhuǎn)換

6.6?編碼指引API programming guid

6.7?空間參考系統(tǒng)(Spatial?Reference System

地理參考項目需要通過選擇空間參考系統(tǒng)(SRS)來定義制圖系統(tǒng)。可以為管道中的各個步驟定義不同的SRS。例如,重構(gòu)(空間框架)級別和生產(chǎn)級別都接受SRS的定義。

可以使用任何已知的SRS定義,包括epsg定義、proj.4聲明或包含已知文本(wkt)的.prj文件名。

尋找空間參考系,請訪問:www.spatialreference.org

EPSG編碼

支持大多數(shù)EPSG定義,包括EPSG投影制圖系統(tǒng)和EPSG地理系統(tǒng)。使用語法“epsg:code”輸入epsg代碼(例如“epsg:32651”)

示例:

ProjectionCode

ECEF (Earth-Centered, Earth-Fixed)EPSG:4978

WGS84 (World Geodetic System 1984)EPSG:4326

WGS84 / UTM Zone 31NEPSG:32631

PROJ4

Proj4聲明允許定義自定義投影系統(tǒng)(例如“+proj=utm+zone=11+datum=wgs84”)。另見項目4一般參數(shù)。

WKT規(guī)范支持(Well?known text

OpenGIS坐標(biāo)系的眾所周知的文本格式(WKT)可以在一個附加的.prj文件中提供。在這種情況下,輸入投影文件路徑作為SRS定義(例如“c:/projects/myprojection.prj”)。

示例:

GEOGCS["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS 84",6378137,298.257223563,

AUTHORITY["EPSG",7030]],

TOWGS84[0,0,0,0,0,0,0],

AUTHORITY["EPSG",6326]],

PRIMEM["Greenwich",0,AUTHORITY["EPSG",8901]],

UNIT["DMSH",0.0174532925199433,AUTHORITY["EPSG",9108]],

AXIS["Lat",NORTH],

AXIS["Long",EAST],

AUTHORITY["EPSG",4326]]

其他定義(Other?definitions):

ContextCapture在工作流的某些步驟中支持其他類型的SRS定義

ENU(East-North-Up):可以使用語法“ENU:lat,lon”(例如“ENU:41.57231,2.26157”)輸入本地ENU定義。

Bing Maps瓦片系統(tǒng)(Bing?Maps Tile System):Bing地圖坐標(biāo)系統(tǒng)可用于重建空間框架(例如“Bing地圖:15”)。另請參閱msdn.microsoft.com。

6.8?生產(chǎn)格式和選項(Production?formats and options

建議的輸出格式和選項取決于重建特性和生產(chǎn)目的。

輸出格式通過ProductionDriver對象進(jìn)行管理,并在ProductionDriverManager中注冊。

獲取支持的Production格式驅(qū)動:

fori?inrange?(0, ccmasterkernel.ProductionDriverManager.getNumDrivers()):

print( ccmasterkernel.ProductionDriverManager.getDriver(i)getShortName() )

ProductionDriver對象是在具有短名稱的生產(chǎn)對象(如obj、osgb)上指定的。

每個ProductionDriver都有自己的實(shí)現(xiàn)并接受自己的選項。ProductionDriver對象可以返回受支持選項的元描述。

獲取obj驅(qū)動程序的選項元描述:

objDriver?=?ccmasterkernel.ProductionDriverManager.getDriverByName('OBJ')

ptOptionsDesc?=?ccmasterkernel.PropertyTree()

objDriver.getOptionsMetaDescription(ptOptionsDesc)

ptOptionsDesc.dump()

每個選項由ID字符串、類型(bool、double、int、string)、可顯示名稱name和默認(rèn)值標(biāo)識。

選項元描述示例:

Id:?"TextureEnabled"

Type:?bool

Name:?"Include texture maps"

Default:?True

還可以在帶有名稱/值對的元描述的子項屬性中提供可選的預(yù)定義值。

6.9?任務(wù)隊列監(jiān)測(Job?queue monitoring

以下示例顯示如何提交航空三角測量作業(yè),以及如何監(jiān)視作業(yè)進(jìn)度:

The following example shows how to submit an aerotriangulation job, and how to monitor the job progress:

# job submission

atSubmitError?=?blockAT.getAT().submitProcessing()


ifnot?atSubmitError.isNone():

print('Error: Failed to submit aerotriangulation.')

print(atSubmitError.message)

??????sys.exit(0)


print('The aerotriangulation job has been submitted and is waiting to be processed...')


# job monitoring

iPreviousProgress?=0

iProgress?=0

previousJobStatus?=?ccmasterkernel.JobStatus.Job_unknown

jobStatus?=?ccmasterkernel.JobStatus.Job_unknown


while1:

jobStatus?=?blockAT.getAT().getJobStatus()


ifjobStatus?!=?previousJobStatus:

print(ccmasterkernel.jobStatusAsString(jobStatus))


ifjobStatus?==?ccmasterkernel.JobStatus.Job_failed?orjobStatus?==?ccmasterkernel.JobStatus.Job_cancelled?orjobStatus?==?ccmasterkernel.JobStatus.Job_completed:

break


ifiProgress?!=?iPreviousProgress:

print('%s%%-?%s'%?(iProgress,blockAT.getAT().getJobMessage()))


iPreviousProgress?=?iProgress

iProgress?=?blockAT.getAT().getJobProgress()

??????time.sleep(1)

??????blockAT.getAT().updateJobStatus()

previousJobStatus?=?jobStatus


# job result

ifjobStatus?!=?ccmasterkernel.JobStatus.Job_completed:

print('"Error: Incomplete aerotriangulation.')


if?blockAT.getAT().getJobMessage()?!='':

print( blockAT.getAT().getJobMessage() )


print('Aerotriangulation completed.')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容