综合设计——多源异构数据采集与融合应用综合实践

这个项目属于哪个课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/
组名、项目简介 组名:都给爷爬
项目目标:为心理疾病患者进行个性化的音乐疗愈
项目需求:市面上大多数音乐软件都需要会员而且存在打榜等现象,不能完全个性化推荐,我们希望我们的个性化音乐系统能为心理疾病患者带来音乐疗愈,因此选择了该公益项目
项目开展技术路线:python(django,pytorch,tensorflow)、爬虫技术、MySQL
团队成员学号 102202135
102202146
102202127
102202125
102202139
102202109
102202128
这个项目的目标 我们希望免费的公益的为有心理疾病的患者提供音乐疗愈的软件,我们可以根据患者、医生希望的音乐进行推荐,给患者相对舒服的音乐疗愈。
其他参考文献 【1】https://github.com/marl/openl3
【2】https://eva.fing.edu.uy/pluginfile.php/524749/mod_folder/content/0/BERT Pre-training of Deep Bidirectional Transformers for Language Understanding.pdf
【3】https://link.springer.com/chapter/10.1007/978-1-4842-6168-2_6
【4】https://blog.csdn.net/weixin_42645636/article/details/135777479

一、项目整体介绍

项目背景
  该项目是基于智能推荐算法,为心理障碍人群提供免费公益的音乐播放平台。我们采用爬虫从音乐平台上爬取歌曲、歌单丰富我们的平台,为用户提供丰富的、多类的曲目进行选择。
项目实现
  使用librosa对音频进行特征提取、Bert提取文本特征、resnet50提取图像特征,同时我们接入大模型,让大模型对用户现状进行分析,给出适合的音乐类型推荐,再将用户的行为特征一起考虑,构成我们的协同过滤推荐算法,实现音乐个性化的推荐,满足用户需求。
项目码云链接
码云链接

二、项目展示





三、个人分工

  本人主要负责后端开发工作,包括 Django 框架中视图函数的编写和调试,以及前后端交互功能的实现。在后端开发方面,着重处理了数据模型的设计、接口的定义与优化,并确保数据在前后端之间的准确传输。同时,完善了权限管理、数据验证以及异常处理等功能。在前后端交互层面,负责与前端开发团队紧密配合,调试和解决交互中的问题,确保接口调用的稳定性和响应效率,从而实现了用户需求的核心功能。
  主要功能部分:

  • 用户注册、登录、注销功能;
  • 音乐数据管理与展示;
  • 将用户输入的情绪语句传入编写好的相关算法,从而推荐合适的音乐类型;
  • 对用户信息的存储、修改、展示等工作;
  • 对于各类励志语句的展示;
  • 对于歌曲的搜索功能;
  • 后台对于用户习惯信息的存储、分类、展示,以及并入算法分析输出推荐曲目的工作;

以下代码以视图函数中最为关键的部分home函数为主要示例,该代码主要完成前端首页中的各项信息展示的工作以及对将推荐算法连接到该页面的工作,涵括了各门科目主要的知识。

点击查看代码
def home(request):
    try:
        username = request.session.get('username')
        userInfo = User.objects.get(username=username)
        typeList = homeUtilsFn.getSongTypeList()
        HotSongSheetList = homeUtilsFn.getHotSongSheetData()[:8]
        TopData10 = homeUtilsFn.getTopData10()

        # 创建推荐器实例(移到前面)
        recommender = HybridRecommender(
            content_weight=0.6,
            collaborative_weight=0.4
        )

        # 检查是否有心情推荐结果
        mood_recommendations = request.session.get('mood_recommendations')
        if mood_recommendations:
            # 使用心情推荐结果
            recommendList = []
            for rec in mood_recommendations:
                try:
                    song = Song.objects.get(songId=rec['id'])
                    recommendList.append(song)
                except Song.DoesNotExist:
                    continue
                    
            # 清除会话中的推荐结果,避免一直使用同一个结果
            del request.session['mood_recommendations']
        else:
            # 获取推荐列表
            recommendList = recommender.hybrid_recommend(
                user=userInfo,
                all_songs=Song.objects.all(),
                top_n=8
            )

        # 获取推荐解释
        recommendations_with_explanations = []
        for song in recommendList:
            explanation = recommender.explain_recommendation(userInfo, song)
            recommendations_with_explanations.append({
                'song': song,
                'explanation': explanation
            })

        return render(request, 'index.html', {
            'userInfo': userInfo,
            'typeList': typeList,
            'recommendList': recommendList,
            'recommendations_with_explanations': recommendations_with_explanations,
            'HotSongSheetList': HotSongSheetList,
            'TopData10': TopData10,
        })
        
    except Exception as e:
        print(f"首页推荐出错: {str(e)}")
        import traceback
        traceback.print_exc()
        return render(request, 'index.html', {
            'userInfo': userInfo,
            'typeList': homeUtilsFn.getSongTypeList(),
            'recommendList': homeUtilsFn.get_default_recommend(),
            'HotSongSheetList': homeUtilsFn.getHotSongSheetData()[:8],
            'TopData10': homeUtilsFn.getTopData10(),
            'error': '推荐系统暂时不可用'
        })

主页面展示(通过算法进行推荐后)

  tips:其它部分包括注册、登录、歌曲信息等各类交互函数不一一赘述。

posted @ 2024-12-15 23:52  だいてんぐ  阅读(9)  评论(0编辑  收藏  举报