Microsoft Emotion和Spotify“情绪音乐”项目[API Smash]

关于API的最酷的事情之一就是看到将它们粉碎在一起后可以构建的内容。 我们构建了一个脚本(使用Microsoft的Emotion API)来识别图像中的情感,然后根据识别出的情感(使用Spotify的Public API)推荐音乐播放列表。 在团队普遍否决“ Spot-motion”(嘘!)之后,我们将其称为Mood Music。

一探究竟!

您可以在GitHub上签出该项目,但这是代码:

  const RapidAPI =新的require('rapidapi-connect'); 
const Rapid = new RapidAPI('EmotionSpotify','### RapidAPI project ID ###');
让open = require('open');

让imageUrl = process.argv [2];

Rapid.call('MicrosoftEmotionAPI','getEmotionRecognition',{
//您的Microsfot EmotionAPI替换密钥(请参阅文档:https://rapidapi.com/package/MicrosoftEmotionAPI/docs)
'subscriptionKey':'### Microsoft Emotion订阅密钥####',
//这是要解释的面部图像的URL
'图像':imageUrl

})。on('成功',(有效载荷)=> {
// MicrosoftEmotionAPI返回对幸福,悲伤,惊奇,愤怒,恐惧,轻蔑,厌恶或中立的置信度得分。
//检测到的情绪应解释为得分最高的情绪,因为分数被标准化为总和。
//我建立了一个简单的循环来查找检测到的情绪。
let scores =有效负载[0] .scores;
让strongestEmotion =“”;
让情感分数= 0;
对于(分数中的var键){
如果(分数[关键字]>情感分数){
情感分数=分数[关键];
strongestEmotion =关键;
}
}

quick.call('SpotifyPublicAPI','searchPlaylists',{
// strongestEmotion现在应该等于照片中检测到的情绪
“查询”:strongestEmotion,
'市场':'',
//为了简单起见,我将结果限制为1。 对于此测试,我只是返回最佳结果
'limit':'1',
'偏移':''

})。on('成功',(有效载荷)=> {
//返回一个JSON对象,其中包含有关播放列表的信息,包括名称,URL和所有者。
//在这里,我获取了播放列表的URL,并使用npm包“ open”在浏览器中将其打开
打开(payload.playlists.items [0] .external_urls.spotify);
})。on('错误',(有效载荷)=> {
console.log(“ Spotify播放列表查询错误”);
});
})。on('错误',(有效载荷)=> {
console.log(“ Microsoft Emotion Error”);
});

这是我们的构建方式。

连接到Microsoft Emotion API

Microsoft Emotion API的工作方式

首先,您需要连接到Microsoft的Emotion API。 该API扫描图像和视频中的面孔,以发现以下情绪:愤怒,轻蔑,厌恶,恐惧,幸福,中立,悲伤和惊奇。 为什么会有这些情绪? 据说,这些情绪在各种文化中得到普遍表达。

当您调用API时,它将针对每种情感返回从0–1的置信度得分。 当API分析来自硅谷的非常高兴的Richard Hendricks(演员Thomas Middleditch)时,会发生以下情况

如上图所示,API将“幸福”识别为主要情感,得分为0.99。 注意-置信度分数将始终为1。即使情绪比该微笑图片更加含糊,API也会为每个情绪分配加权的置信度分数。

如何连接到Microsoft Emotion API

现在您已经了解了API的工作原理,让我们进行一些调用! 这是您需要做的。

步骤0:获取Microsoft Emotion subscriptionKey

要进行API调用,您首先需要注册一个Microsoft帐户并通过执行以下操作来获取subscriptionKey:

  1. 转到Microsoft的Emotion API页面
  2. 创建一个Microsoft帐户或登录到现有帐户
  3. 在“请求新试用”列表中,选择“情感-预览”以创建新订阅
  4. 在“ 密钥”部分中,选择“ 密钥1 ”或“ 密钥2 ”,然后按“显示”或“复制”以查看subscriptionKey。 这些密钥可以互换,并且可以用于我们的目的

这个过程非常简单,但是有两个地方可能会被绊倒。

  1. Microsoft有多个认知服务API,包括Computer Vision API(标识并标记图像中的对象)和Face API(从图像中分离人脸)。 这些API均需要单独的 API密钥。 对于此项目,请确保获取Microsoft Emotion API的API密钥。
  2. 在您确认电子邮件之前,Microsoft可能不会生成subscriptionKey。 为此,请单击“发送电子邮件验证”按钮(如果显示),然后单击确认电子邮件中的链接。

一旦获得了subscriptionKey,就可以调用该API。

步骤1:通过RapidAPI连接到Microsoft Emotion API

虽然您可以手动调用API,但我们决定使用RapidAPI工具。 RapidAPI可让您测试API调用,以您喜欢的语言导出代码段,并从一个抽象层调用多个API。

  1. 转到RapidAPI的Microsoft Emotion API程序包页面,然后选择getEmotionRecognition端点
  2. 输入您的Microsoft Emotion subscriptionKey和图像(通过图像链接或直接上传)
  3. 点击“测试功能”拨打电话! API应该在情绪检测中返回一系列置信度分数

这是该过程如何工作的快速GIF。

如果您登录,则可以导出用于调用API的代码段。在本教程中,我们将使用Node.js导出该代码段; 但是,您也可以导出Ruby,PHP,Python,Objective-C和Java或cURL中的代码段。

步骤2:建立意见回馈

接下来,您将需要构建一个反馈循环,该循环将获取一系列分数,遍历所有情绪,并根据最高分数(最接近1)选择最强烈的情绪。 即使您的图片在情感上模棱两可,脚本也会始终返回至少一种情感。

我们声明了三个变量:分数,strongestEmotion和情感分数。

  • scores :获取有效载荷并从JSON响应中识别情绪数组。
  • strongestEmotion :一个空字符串变量,它将容纳具有最高置信度得分的情绪。
  • motionScore :用于通过for循环确定strongestEmotion的变量。

这些变量的循环如下所示:

  })。on('成功',(有效载荷)=> { 
// MicrosoftEmotionAPI返回对幸福,悲伤,惊奇,愤怒,恐惧,轻蔑,厌恶或中立的置信度得分。
//检测到的情绪应解释为得分最高的情绪,因为分数被标准化为总和。
//我建立了一个简单的循环来查找检测到的情绪。
let scores =有效负载[0] .scores;
让strongestEmotion =“”;
让情感分数= 0;
对于(分数中的var键){
如果(分数[关键字]>情感分数){
情感分数=分数[关键];
strongestEmotion =关键;
}
}

接下来,您将使用strongestEmotion变量搜索Spotify播放列表。

连接到Spotify公共API

Spotify公共API使您可以搜索Spotify的大型音乐数据库。 最好的部分? 您不需要订阅密钥! 这是从Spotify API调用中获取代码片段并将该代码合并到您的API smash中的方法。

步骤0:在RapidAPI中测试API调用并导出代码段

这一步应该感到很熟悉-这与我们用来调用Microsoft的Emotion API的过程相同。 转到Spotify公共API包。 接下来,选择searchPlaylists端点。 通过在查询参数中输入一种情感(例如“惊喜”)并单击“测试功能”来进行测试调用。整个过程实际上需要10秒钟-我们为它计时。

am! 您刚刚调用了Spotify API。 现在,我们将复制代码片段并将其导出到您的脚本中。

步骤1:将Spotify公共API调用添加到脚本中

综上所述,我们将使用strongestEmotion变量填充Spotify API调用的查询参数。 该代码段将如下所示:

  quick.call('SpotifyPublicAPI','searchPlaylists',{ 
“查询”:strongestEmotion,
'市场':'',
//为了简单起见,我将结果限制为1。 对于此测试,我只是返回最佳结果
'limit':'1',
'偏移':''

有效负载返回有关该项目不需要的播放列表的许多信息。 使用代码段从顶级结果中获取外部URL:payload.playlists.items [0] .external_urls.spotify

温馨提示:我们添加了npm包“ open”,因此播放列表外部链接会在您的浏览器中自动打开。 只需在终端中运行npm install-save open或访问此链接以获取更多信息。

恭喜!

那应该做! 您刚刚构建了一个API Smash。

您可以在GitHub上的项目中引用您的代码。 如果您想构建另一个API Smash,请使用GIPHY和Twilio查看我们的Text-A-GIF项目。