技术如何帮助我们改善生活?
这是我在考虑要实现的新项目时问自己的问题。
每天我花很多时间在电脑前工作,我希望科技能“照顾”我,试着了解我的心情,找到让我放松和快乐的方法。
我的电脑如何解读我的表情并让我感觉良好?
答案很明确……使用Microsoft 认知服务和我最喜欢的小工具(Raspberry 和 Arduino)。
说说我的项目吧,走吧!
在色光疗法中,每种颜色都与个人特定的心理和精神特征相关,支持者认为同样会对身体机能产生特殊影响。
没有临床或科学证据证明这些未经证实的断言的优点。
然后,每种颜色都与特定属性相关联,通常基于简单的心理类比。
我创建了一个系统,能够看到我的表情,了解我是否快乐,并决定房间的最佳颜色是什么,以改变我的心情。
我认为它非常酷!!!
我的硬件如下图
阿杜诺
第一步是在我的设备(Raspberry 和 Arduino)之间建立通信。为此,我决定使用SoftwareSerial Library。我受到David Jones Project和Jiong Shi主持的项目的启发。
下一步是更改我的蓝牙设备的默认名称。模块的默认名称是HC-05 ,这并不酷!
要更改蓝牙模块的名称,我们应该学习和使用 AT 命令。有关 AT 命令以及如何使用 Arduino 和蓝牙模块使用它们的更多信息,请参阅此链接。
正如我所说,Raspberry 和 Anrduino 之间的通信是由蓝牙连接组成的。我决定在 UWP 应用程序中实现一种方法,将包含 3 个字符(相当于 3 个字节)的字符串发送到 Arduino,Arduino 接收并解码输入数据。
仅供参考,一段Arduino解码代码如下所示(完整源码见下方代码部分):
if (BTSerial.available())
{
// Read string from Raspberry
delay(10);
ch1 = BTSerial.read();
delay(10);
ch2 = BTSerial.read();
delay(10);
ch3 = BTSerial.read();
delay(10);
if (ch1 == '1')
digitalWrite(GREEN, HIGH);
else
digitalWrite(GREEN, LOW);
if (ch2 == '1')
digitalWrite(BLUE, HIGH);
else
digitalWrite(BLUE, LOW);
if (ch3 == '1')
digitalWrite(RED, HIGH);
else
digitalWrite(RED, LOW);
...
...
...
}
现在是时候创建一个新的解决方案并实现我们的代码了!
通用 Windows 平台应用程序
我决定探索 Microsoft 的Emotion API (有关 SDK 的更多详细信息,请参阅链接)。
如果您从头开始创建 UWP 项目,则必须安装“Oxford”包,在 Visual Studio 中打开“NuGet 包管理器控制台”并键入Install-Package Microsoft.ProjectOxford.Emotion
确保您已通过 Azure 生成了情感服务密钥。为此,转到此并单击“在 Azure 上购买”
然后,您将被重定向到您的 Azure 帐户,现在您必须编译一些字段,如下所示,我使用了“免费定价层”,每月允许您进行 30000 次图像交易。(如果您没有免费的 Azure 帐户,请访问此链接)
现在探索您在 Azure 中的认知服务帐户并转到密钥部分。
有 2 个键,选择一个并在以下字符串中“复制并粘贴” MainPage.xaml.cs中的值:
string subscriptionKey = "xxxxxxxxxxxxxxxxxxx";
要访问蓝牙和其他各种功能,如网络摄像头、图片等,我们需要在“ Package.appmanifest ”文件中提及它们。
为此,请按照提到的步骤操作:
代码片段:
<Capabilities>
<Capability Name="internetClient" />
<uap:Capability Name="picturesLibrary" />
<uap:Capability Name="removableStorage" />
<DeviceCapability Name="bluetooth.rfcomm">
<Device Id="any">
<Function Type="name:serialPort"/>
Device>
DeviceCapability>
<DeviceCapability Name="webcam" />
<DeviceCapability Name="microphone" />
Capabilities>
我们需要将捕获的图像转换为 MemoryStream。为此:
var reader= new Datareader(photoStream.GetInputStreamAt(0);
var bytes = new byte[photoStream.Size];
await reader.LoadAsync((uint)photoStream.Size);
reader.ReadBytes(bytes);
var stream = new MemoryStream(bytes);
所以现在,使用一次调用,您可以从 Azure 检索情绪结果:
Emotion[] emotionResult;
emotionResult = await emotionServiceClient.RecognizeAsync(stream);
UWP应用程序
在第一张图片中,您可以看到应用程序启动屏幕。在左侧,它显示从网络摄像头捕获的图片。在中间的情绪状态和右侧,您可以配置与 Arduino 的蓝牙连接。
每次获取图像时,系统都会评估打开灯光的最佳颜色,并通过蓝牙将其发送到 Arduino。(正如您从后面的代码中看到的那样,我创建了一个每 10 秒捕获一次图片的计时器。)
目前UWP应用程序在我的PC上运行,因为它很容易截图,但它是一个UWP应用程序,所以在Raspberry上部署应用程序不是问题。
目前,系统管理以下 3 种颜色,但创建逻辑非常容易,您会更喜欢:
if (emotionResult[0].Scores.Happiness >= 0.85)
{
Send("111");
}
else if (emotionResult[0].Scores.Happiness >= 0.50 && emotionResult[0].Scores.Happiness < 0.85)
{
Send("001");
}
else if (emotionResult[0].Scores.Happiness > 0.25 && emotionResult[0].Scores.Happiness < 0.50)
{
Send("100");
}
else
{
Send("110");
}
我假设颜色组合为:
000 = Cyan
001 = Light green // Mild Happy
010 = Violet
011 = Red
100 = Light blue // Neutral
101 = Green
110 = Blue
111 = OFF // Happy
如您所见,如果您快乐,则不需要点亮 :)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !