你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 .NET 的 Azure Object Anchors 客户端库 - 版本 0.3.0-beta.6

使用 Azure Object Anchors,应用程序可以使用 3D 模型在物理世界中检测对象,并估计其 6-DoF 姿态。 此包支持将现有 3D 资产转换为可由 Object Anchors 运行时用来检测物理对象的窗体。

源代码 | 包 (NuGet)

入门

安装包

使用 NuGet 安装适用于 .NET 的 Azure Object Anchors 客户端库:

dotnet add package Azure.MixedReality.ObjectAnchors.Conversion --prerelease

添加包引用:

<PackageReference Include="Azure.MixedReality.ObjectAnchors.Conversion" Version="0.1.0-beta.0" />

先决条件

验证客户端

混合现实服务支持几种不同类型的身份验证:

  • 帐户密钥身份验证
    • 使用帐户密钥可以快速开始使用混合现实服务。 但是,在将应用程序部署到生产环境之前,我们建议你将应用更新为使用 Azure AD 身份验证。
  • Azure Active Directory (AD) 令牌身份验证
    • 如果你正在生成企业应用程序,并且你的公司使用 Azure AD 作为其标识系统,则你可以在应用中使用基于用户的 Azure AD 身份验证。 然后,使用现有的 Azure AD 安全组授予对 Object Anchors 帐户的访问权限。 还可以直接向组织中的用户授予访问权限。
    • 否则,我们建议从支持你的应用的 Web 服务获取 Azure AD 令牌。 建议将此方法用于生产应用程序,因为这样可以避免在客户端应用程序中嵌入用于访问 Object Anchors 资产转换服务的凭据。

有关详细说明和信息,请参阅 此处

关键概念

ObjectAnchorsConversionClient

ObjectAnchorsConversionClient是用于访问 Object Anchors 资产转换服务的客户端库。 在此处,将提供存储上传 URI,供用户上传其资产以转换为 Object Anchors 运行时可以使用的格式。

上传到从客户端获取的 Microsoft 托管 URI 的资产将保留 48 小时

Microsoft 托管存储中最终转换的模型将保留 48 小时

示例

上传用于对象定位点资产转换的资产

AzureKeyCredential credential = new AzureKeyCredential(accountKey);

ObjectAnchorsConversionClient client = new ObjectAnchorsConversionClient(accountId, accountDomain, credential);

AssetUploadUriResult uploadUriResult = await client.GetAssetUploadUriAsync();

Uri uploadedInputAssetUri = uploadUriResult.UploadUri;

BlobClient blobClient = new BlobClient(uploadedInputAssetUri);

using (FileStream fs = File.OpenRead(localFilePath))
{
  await blobClient.UploadAsync(fs);
}

开始 3D 资产转换

AssetConversionOptions assetConversionOptions = new AssetConversionOptions(uploadedInputAssetUri, AssetFileType.FromFilePath(localFilePath), assetGravity, scale);

// Or you can pass in an optional parameter DisableDetectScaleUnits if you are converting a FBX, specifying whether or not you want to disable automatic detection of the embedded scale units. 
// The detection is enabled by default.
AssetConversionOptions assetConversionOptions = new AssetConversionOptions(uploadedInputAssetUri, AssetFileType.FromFilePath(localFilePath), assetGravity, scale, disableDetectScaleUnits: true);

AssetConversionOperation operation = await client.StartAssetConversionAsync(assetConversionOptions);

Guid jobId = new Guid(operation.Id);

轮询现有 ObjectAnchors 资产转换,直到完成并下载结果

AssetConversionOperation operation = new AssetConversionOperation(assetConversionJobId, client);

await operation.WaitForCompletionAsync();

if (!operation.HasCompletedSuccessfully)
{
  throw new Exception("The asset conversion operation completed with an unsuccessful status");
}

BlobClient blobClient = new BlobClient(operation.Value.OutputModelUri);

BlobDownloadInfo downloadInfo = await blobClient.DownloadAsync();

using (FileStream file = File.OpenWrite(localFileDownloadPath))
{
    await downloadInfo.Content.CopyToAsync(file);
    FileInfo fileInfo = new FileInfo(localFileDownloadPath);
}

故障排除

后续步骤

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com

提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。