65.9K
CodeProject 正在变化。 阅读更多。
Home

微软认知服务用户的前五个建议

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2022 年 1 月 11 日

CPOL

9分钟阅读

viewsIcon

4197

引言和背景 如标题所示,本文是我为微软认知服务用户提供的个人建议。微软认知服务提供了一种基于云、按订阅付费的解决方案,适用于人工智能软件应用,无论团队、目的和规模如何。

引言和背景

如标题所示,本文是我为微软认知服务用户提供的个人建议。微软认知服务提供了一种基于云、按订阅付费的解决方案,适用于人工智能软件应用,无论团队、目的和规模如何。我们都知道,微软如今在 Azure 上投入了大量人力、推广和承诺,几乎他们所有的解决方案都围绕着 Azure,而且或多或少地得出同一个结论:该解决方案可以作为 Azure 上的软件即服务 (SaaS) 购买——还有许多其他名称,平台即服务 (PaaS)、服务即服务 (XaaS),您可以随意选择

在本文中,我将涵盖您的团队在迁移到微软认知服务之前应该了解的最重要几点。

微软认知服务背景

对于任何不了解微软认知服务是什么的人:微软认知服务是微软提供的一套服务,面向任何规模的个人、团队和/或组织,提供需要复杂机器学习或人工智能响应的服务。

要实现机器学习是一项艰巨的任务,一个错误的输入就可能让您的整个算法 {此处添加俚语}。微软提供的服务,您只需提供算法的输入,即可获得输出。微软自己会管理算法的调优方式或算法的性能,您不必为此担心。

这是一种基于订阅的服务,现在已作为 Azure 上的服务提供。在本文中,您将了解认知服务在多大程度上能为您提供帮助!

提示 #0:询问(说服)您的老板

微软认知服务已针对成千上万(如果不是数百万)的用户、数据记录和实体进行了测试,其算法确实非常可靠!您无法达到微软认知服务目前提供的服务水平,原因是微软与相当多的学术教授、独立开发者、团队和组织合作,甚至很多时候在线冲浪者也会分享一些数据到云端——所有这些都在许可之下,微软会征求许可,我在这里不打算讨论许可条款

请获得许可,这样我们才能继续这篇博文。 🙂

提示 #1:只取所需

认知服务是一个服务库,库中已添加了许多服务,并且每个月都在添加新的服务。但这并不意味着您应该考虑所有服务,甚至一半的服务。它们都按不同的子类别进行分类,其中包含微软认知服务提供的集合服务,

  1. 视觉
    • 这组服务包含人脸 API,例如识别和跟踪。
    • 它还提供可以从人脸中提取特征的服务,例如年龄、情绪检测。
    • 它还提供计算机视觉,使用户能够对图像执行 OCR 功能。
  2. 语音
    • 允许您的用户根据语音命令触发功能。——自然语言处理。
    • 说话人识别——尖端技术!
    • 语音转文本和文本转语音服务。
  3. 语言
    • 允许对文本进行语言学分析。
    • 您可以使用之前的服务来分析照片,这样您就可以通过 OCR 读取文本,然后分析文本。
    • LUIS(语言理解智能服务)是新的贾维斯!
  4. 知识
    • 推荐系统。
    • 任何需要复杂学术或研究内容的内容。
  5. 搜索
    • 旧的 Bing API 现在已在此处提供……

同样,您可以看到这些是类别,即使这些类别也有不同的 API 集和服务,您可能想要使用。选择您需要的取决于您。

让我简单地说一下,如果您的全部需求是读取图像中的文本,将其转换为语音并进行交流。那么您只需要购买“计算机视觉 API”和“Bing 语音 API”。您的应用程序将不需要其余的服务。LUIS 可以在稍后添加以支持通信。

将会有更多服务,您可以随时添加更多服务。但如果您不再使用某个服务,或者您的应用程序与某个服务无关,则无需为此服务购买密钥。

提示 #2:一切都放在 Azure 中

微软认知服务提供来自不同区域(所有微软属性)的服务,例如 LUIS 可以通过 luis.ai 访问,反之亦然。但您应该保持一家亲,并将所有密钥和资源都放在 Azure 中。这样您就可以从一个订阅管理所有内容,而不是要查看各种不同的帐户来配置和使用应用程序。

微软认知服务支持 RESTful API(我们将在下面的提示中介绍),因此很容易将密钥添加到 URL 中并开始使用这些服务。

您可以从 Azure 内部管理所有密钥,只需转到认知服务面板并打开您要获取密钥的应用程序。在“密钥”部分,查找可用于身份验证请求的密钥。


图 1:与帐户关联的认知服务列表。

我有 4 个活动服务,我可以通过 REST API 在 Azure 中访问它们。多么简单!您可以添加更多密钥,添加更多服务,更新密钥……所有这些都可以在 Azure 中完成!在本文结束时,您将意识到这个提示的重要性。

提示 #3:充分利用 REST API

微软认知服务 Azure 端点作为 REST API 端点提供,您可以通过任何 HTTP 客户端访问——甚至是一个网页浏览器。REST API 由于基于 HTTP 协议工作,因此允许您充分利用 HTTP 协议发送/接收信息。目前,微软认知服务支持两种将信息上传到云端的方式,

  1. 基于 URL
  2. 二进制数据基础

这是您可以将内容交付给 Azure 进行处理的两种方式。除此之外,请求唯一需要的标头是订阅密钥,添加到“Ocp-Apim-Subscription-Key”标头中,该标头会首先被处理,其余的内容将根据订阅信息稍后处理。

示例

现在,我将向您展示一个 WPF 应用程序中的小示例,该示例使用计算机视觉 API 来检测图像的内容。Azure 将会生成一个完整的句子,解释图像、图像中的对象以及正在执行的任务。

WPF 应用程序的 XAML 代码如下所示,

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border BorderBrush="Black" BorderThickness="1" Width="211" Height="188">
        <Image Name="image" HorizontalAlignment="Left" Grid.Column="0" Height="188" MouseLeftButtonDown="Image_MouseLeftButtonDown" VerticalAlignment="Top" Width="211"/>
    </Border>
    <Button Name="btn" Grid.Column="0" Margin="0,0,24,10" Height="20" Width="70" Click="btn_Click" VerticalAlignment="Bottom" HorizontalAlignment="Right">Process</Button>
    <Button Name="slct" Grid.Column="0" Margin="24,0,0,10" Height="20" Width="70" Click="slct_Click" VerticalAlignment="Bottom" HorizontalAlignment="Left">Select</Button>
    <TextBlock Name="rslt" Margin="10" VerticalAlignment="Center" TextWrapping="Wrap" Grid.Column="1" Text="Result will be here..." />
</Grid>


图 2:WPF 应用程序运行中,未选择任何图像。

至于后端代码,C# 代码编写如下,

private async void btn_Click(object sender, RoutedEventArgs e)
{
    using (var client = new HttpClient())
    {
        // Request headers
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "<the-subscription-key>");

        // Request parameters
        var uri = $"https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Description";

        // Request body
        if(fileName == null) { MessageBox.Show("Select a file first."); }
        byte[] byteData = File.ReadAllBytes(fileName);

        using (var content = new ByteArrayContent(byteData))
        {
            content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            var response = await client.PostAsync(uri, content);
        }

        rslt.Text = await response.Content.ReadAsStringAsync();
    }
}

private void slct_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    if (dialog.ShowDialog() == true)
    {
        // Something happened
        fileName = dialog.FileName;
        var source = new BitmapImage(new Uri(fileName));
        image.Source = source;
    }
}

同样,这段代码运行后的输出是,


图 3:已选择图像并从 Azure 捕获响应。

如您所见,这是结果,可以将其映射到 JSON 对象以进行存储或进一步处理请求。

提示 #4:时机至关重要

我们之所以对微软认知服务感兴趣,前提是它能够确保我们及时获得结果。例如,如果我们将在安全应用程序中使用微软认知服务,那么就应该及时向用户提供结果,延迟可能会让我们重新考虑相关事项。

因此,我还想展示请求的时间,以演示这一切是如何工作的。为此,我修改了代码并应用了以下更改,

Stopwatch watch = new Stopwatch();
watch.Start();
response = await client.PostAsync(uri, content);
watch.Stop();

rslt.Text = $"Request took {watch.ElapsedMilliseconds} ms to complete, for {byteData.Count()} sized byte array.\n\n";

rslt.Text += await response.Content.ReadAsStringAsync();

效果是,我能够确定处理并返回结果所需的时间。


图 4:应用程序也显示了时间。

看顶部段落,它说:“请求完成耗时 3519 毫秒,处理的字节数组大小为 33282”这意味着,处理一个大约 30 KB 的文件大约花了 3.5 秒。还有其他因素导致延迟,例如我的互联网连接。其次,较大的图像文件需要更长的时间,较小的图像会快速处理但可能出错。

我们可以从中学习到几点……

  1. Azure 的时序不是大问题,问题在于
    1. 我们自己的互联网连接
    2. 图像本身
  2. 要执行的处理类型很重要
    1. 处理 15 秒的低质量音轨与处理 1 分钟的高质量音轨,所花费的时间绝不会相同。
  3. CDN 在此情况下可能有用,也可能没用。

最后,需求因 API 而异,因此我不会讨论建议的图像大小。但是,您可以通过直接将文件上传到 Azure提高应用程序的性能,因为Azure 在处理文件时总是会从 URL 下载文件。所以,为什么不直接上传呢?

提示 #5:安全

您应用程序的密钥至关重要。如果它们丢失或被任何人访问,那么您将对发生的一切负责——在最糟糕的情况下,他们可能会滥用您的资源,而账单将由您承担!

请记住提示 #2,如果您遵循了我的建议,那么当您觉得有人可以访问密钥时,您就可以轻松地更改密钥。


图 5:从 Azure 购买的微软认知服务的密钥显示。

否则,如果您不喜欢每月更新安全密钥,您可以使用其他方法来隐藏密钥。例如,将密钥存储在安全区域,如 Azure 的密钥保管库或其他任何无人可以访问的地方……但是,如果有人确实访问了呢? 🙂

在许多方面,事情都可能出错,因此我建议每月更新一次密钥。请注意,您可以使用密钥 1 或密钥 2,并且可以独立于另一个更新这两个密钥。

提醒:就在您阅读本文时,我又回去重新生成了密钥……重新生成两个密钥仅用了 4 秒。 🙂

结束语

我无话可说,真的。我现在已经词穷了,希望您喜欢这篇文章。 🙂 下次见。

© . All rights reserved.