我建造的
我使用Flutter,Linode服务 - Linode,Object Storage,MySQL数据库,Spotify API和Python创建了一个iOS应用。
该应用程序的主要目标是在当前的心情中拍摄用户的照片,然后推荐一些歌曲,以帮助他们冷静,放松甚至为其播放列表获得一些新的酷歌。
我个人感到,当我有时会感到难过或生气时,音乐是最好的治疗师,这是我可以与该项目联系并从中获得最好的原因的主要原因。
类别提交:
集成创新者
应用链接
https://github.com/ameysunu/linode_flutter
-
克隆项目,并通过运行
flutter pub get
安装所有依赖性。 -
完成后,在文件夹
controllers
中创建一个secrets.dart
文件,然后添加所有所需的API键,可以从linode中检索,Linode mysqldatabse。
屏幕截图
linode情感分析输出
linode Spotify API代币检索
生成令牌并添加到.env文件
linode对象存储桶
linode服务器
linode mysql Server
flutter应用程序屏幕截图
这是一个视频,展示了该应用程序如何工作的预览:
描述
该项目旨在根据用户当前的心情为用户提供一首歌列表,以给他们一些放松身心甚至获得很多新歌,具体取决于您的心情。
用户所需要做的就是简单地登录,拍照或上传,如果他们的设备不支持相机硬件,然后瞧,他们只是等待他们的歌曲列表,甚至可以将其保存在应用程序中,以后再听。
链接到源代码
linode_flutter
A new Flutter project.
Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
为了帮助开始扑面而前,请查看 online documentation,提供教程 样本,移动开发指南和完整的API参考。
设置Python API进行情绪分析
- 在Linode实例上部署代码。
- 使用
ngrok
从linode实例向前移动到Local -Host到jupyter环境以处理代码。 - 完成后,通过运行
python3 api-emotion.py
运行API,该python3 api-emotion.py
将在linode实例中的localhost上运行。 - 使用
ngrok
传递URL实例的参数并获取响应。示例:
- 替换访问键和
bucket-upload.py
中的区域 - 运行Python文件
允许许可证
MIT许可证2023
背景
我个人认为音乐对人们有很大帮助,尤其是当他们的心情有些沮丧的情况下。我认为为什么不利用这个机会给用户有机会了解一些新歌,听听它们,甚至将它们保存到该应用程序中,以便用户可以始终访问这些歌曲。
我如何建造它
我使用Firebase身份验证,当然还有Linode Services构建了iOS的Flutter SDK。
如何? - >我使用了三个Linode服务:
-
linode-我创建了一个Linode,并使用机器学习库(例如
fer
)开发了Python程序,该程序是使用keras
和tensorflow
进行面部识别的。然后,我使用flask
为POST请求制作API,以使用nginx
从移动设备上传图像。这些图像被保存在Linode上,为了改进这一点,我使用flask
创建了另一个Python程序,该程序首先将图像上传到Linode对象存储,然后将其推进到我们的情感分析仪Python代码中。 -
linode对象存储 - 用于面部识别的图像存储在Linode对象存储上,以避免在Linode服务器上杂乱无章,并使计算和执行非常容易。
-
linode数据库mysql-使用颤音和飞镖代码,将数据保存到Linode MySQL数据库中。我对SQL非常粗糙,因此我需要大量刷牙来使用不同的表并执行大量的Crud操作。
这是我第一次使用Linode,并且集成所有Linode服务以使该项目的工作速度更快,按时非常容易,当然,我最喜欢的部分是,在Linode中使用FAA非常容易根本没有停机时间。
其他资源/信息
开发和创建这个项目很有趣,但是我想提到一些事情。
这是我第一次进行机器学习项目,因此我必须在制作此项目时经过大量文档和堆叠量。我什至感到恐惧,因为并非所有计算机都支持用于GPU操作的TensorFlow模块,但这与Linode完全不是这样。我已经决定使用ngrok
,以便我可以执行POST
和GET
请求从linode服务器中获取响应,因此,这根本不是最好的解决方案,这两个原因是:
-
ngrok
免费版本仅允许将一个Localhost URL和端口公开向公众公开。我有两个 - >一个是Linode对象存储的上传器,另一个是情感分析器。 -
有一个暂停,每次都会加载服务器并将URL公开向公众公开,它会改变。因此,我很难每次都会在我的flutter代码中连续放置URL并重新加载应用程序。
因此,使用nginx
,gunicorn3
和flask
,我可以直接将POST
和GET
的请求直接发送到Linode的IP地址,因此使我很容易(作为开发人员)专注于我的绘制代码,而不必花几个小时才能花费几个小时每次启动ngrok
,然后使用其他URL。
分类后,另一个问题是Spotify的API令牌。 Spotify的API将在3600秒或1小时后到期。因此,每次我在应用程序上工作时,都会替换Spotify API,这不是理想的解决方案。
所以我想出了一个解决方案。我在Linode服务器上创建了一个.env
文件来存储我的Spotify令牌,然后编写了一个Python脚本,该脚本每45分钟都会基于Spotify Client和Secret ID生成Spotify令牌,然后用.env
File上的Token替换它。该应用程序可以使用简单的GET
在linode服务器上获取.env
文件。
还有一个Python程序每1小时运行一次,以从Linode对象存储中删除所有图像,当然是出于隐私原因。
长话短说,这些只是我面临的一些小挑战,我很容易专注于提出解决方案,而不是担心我的停机时间,服务器限制或SQL数据库,因为它们都得到了备份由Linode。