首页 > 其他分享 >综合设计——多源异构数据采集与融合应用综合实践

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

时间:2023-12-14 20:02:07浏览次数:37  
标签:异构 acc const image getElementById best path 多源 综合

这个项目属于哪个课程 2023数据采集与融合技术
组名、项目简介 组名:Double 20000、项目需求:设计出一个交互友好的多源异构数据的采集与融合的小应用 、项目目标:通过在网页中上传文本、图片、视频或音频分析其中的情感 、项目开展技术路线:前端3件套、Python、fastapi
团队成员学号 042101414、052101230、102102104、102102105、102102108、102102111、102102157、102102158
这个项目目标 通过在网页中上传文本、图片、视频或音频分析其中的情感
其他参考文献 [1]李慧,庞经纬.基于文图音融合的多模态网民情感识别研究[J/OL].数据分析与知识发现:1-17[2023-12-13].http://kns.cnki.net/kcms/detail/10.1478.g2.20231011.1557.012.html.

项目整体介绍:

项目名称:多模态情感分析系统

项目背景:在当前的数字化时代,情感分析在各种应用中变得越来越重要,如客户服务、市场分析和社交媒体监控。多模态情感分析能够提供比单一模态更丰富、更准确的情感识别和分析。

项目目标:开发一个多模态情感分析系统,能够处理和分析文本、图片、音频和视频数据,从而提供综合的情感分析结果。

技术路线

  • 前端开发

    • 使用HTML、CSS和JavaScript进行界面设计,实现用户与系统的交互。

    • 集成文件上传功能,支持文本、图片、音频和视频文件。

  • 后端开发

    • 使用Python进行后端逻辑的编写。

    • 利用FastAPI框架处理前端请求和数据传输。

  • 数据处理与分析

    • 文本分析:最开始自己训练模型但是后来因为文心一言的准确率更高,因此采用文心一言的接口进行文本情感分析。

      (音频、视频、图片找不到接口,因此自己训练模型)

    • 音频分析

      • 使用RAVDESS数据集进行训练。
      • 对上传的音频文件进行特征提取和情感识别。
    • 图片分析:

      • 使用VGG模型进行图像处理。
      • 利用CK+和FER数据集进行情感分类。
    • 视频分析(找不到可以训练视频的模型,最后只能通过提取音频进行分析)

      • 提取视频中的音频部分。
      • 对提取的音频进行分析,使用同音频分析的方法。
  • 结果输出与展示:将分析结果通过前端界面展示。

最终效果:

通过在本地上传文件进行分析并且得到结果

自己分工:

  • 进行图片的训练同时将pth文件进行保存,并且利用pth文件进行图像的预测。首先我先查找了CK+和FER数据集(CK+数据集是用于人脸表情识别的公共数据集之一)进行训练,分别通过VGG和resnet这两个模型进行训练,同时选出准确率更高的一个模型,同时保存最好的训练与预测的模型与参数文件,进行预测

    模型保存:

    if opt.resume:
        # Load checkpoint.
        print('==> Resuming from checkpoint..')
        assert os.path.isdir(path), 'Error: no checkpoint directory found!'
        checkpoint = torch.load(os.path.join(path,'Test_model.pth'))
        
        net.load_state_dict(checkpoint['net'])
        best_Test_acc = checkpoint['best_Test_acc']
        best_Test_acc_epoch = checkpoint['best_Test_acc_epoch']
        start_epoch = best_Test_acc_epoch + 1
        
        
     if Train_acc > best_Train_acc:
            print('Saving best train model..')
            print("best_Train_acc: %0.3f" % Train_acc)
            best_Train_acc = Train_acc
            best_Train_acc_epoch = epoch
            state = {
                'net': net.state_dict() if use_cuda else net,
                'best_Train_acc': best_Train_acc,
                'epoch': epoch,
            }
            model_path = os.path.join(path, 'Best_Train_model.pth')
            if not os.path.isdir(os.path.dirname(model_path)):
                os.makedirs(os.path.dirname(model_path))
            torch.save(state, model_path)
    

    训练结果

    Model:VGG19;
    Test_acc:94.646%
    Model:Resnet18;
    Test_acc;94.040% 
    

    预测:

    import torch
    from torchvision import transforms
    from PIL import Image
    from models import VGG 
    
    model = VGG('VGG19')
    checkpoint = torch.load(r'CK+_VGG19\1\Best_Train_model(1).pth')
    if isinstance(checkpoint['net'], torch.nn.Module):
        model = checkpoint['net']
    else:
        model.load_state_dict(checkpoint['net'])
        
    def preprocess_image(image_path):
        transform = transforms.Compose([
            transforms.Resize((48, 48)),
            transforms.Grayscale(num_output_channels=3),  # 将图像转换为3通道RGB
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
        ])
        image = Image.open(image_path)
        image = transform(image).unsqueeze(0)  # 增加一个维度来表示批大小
        return image
    
    def predict(image_path):
        image = preprocess_image(image_path)
        with torch.no_grad():  # 关闭梯度计算
            outputs = model(image)
            _, predicted = torch.max(outputs.data, 1)
            return predicted.item()
    
    image_path = r'CK+48\surprise\S046_002_00000004.png'
    prediction = predict(image_path)
    print(f'Predicted class: {prediction}')
    

​ 但是可能模型太过拟合,因此只对训练集的图像具有较高的准确率,对其他图片准确率不高,但由于时间限制,来不及调整参数部分,所以其实预测准确率不高。

  • 通过前端调用接口,这一部分是两个人合作完成的,通过前端向已经部署在服务器上的代码并且查看接口文档发送请求,实现前后端的连接

    //文本分析
    document.getElementById('analyze-text').addEventListener('click', function() {
        const text = document.getElementById('text-input').value;
        const url = `http://1.92.69.178:8000/text?text_word=${encodeURIComponent(text)}`;
    
        fetch(url, {
            method: 'POST',
            headers: {
                'accept': 'application/json'
            }
        })
        .then(response => response.json())
        .then(data => {
            document.getElementById('text-analysis-result').textContent ="预测类别: " + data.response;
        })
        .catch(error => {
            console.error('Error:', error);
        });
    });
    
    // 图片分析
    document.getElementById('analyze-image').addEventListener('click', function() {
        const fileInput = document.getElementById('image-input');
        const file = fileInput.files[0];
        if (file) {
            const formData = new FormData();
            formData.append('file', file);
    
            fetch('http://1.92.69.178:8000/predict-emotion', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('image-analysis-result').textContent = "预测类别: " + data["预测类别:"];
            })
            .catch(error => {
                console.error('Error:', error);
            });
        } else {
            console.log("未选择图片");
        }
    });
    
    // 音频分析
    document.getElementById('analyze-audio').addEventListener('click', function() {
        const fileInput = document.getElementById('audio-input');
        const file = fileInput.files[0];
        if (file) {
            const formData = new FormData();
            formData.append('audio_file', file);
    
            fetch('http://1.92.69.178:8000/audio', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                const translatedEmotion = translateEmotion(data.prediction);
                document.getElementById('audio-analysis-result').textContent = "预测结果: " + translatedEmotion;
            })
    
            .catch(error => {
                console.error('Error:', error);
            });
        } else {
            console.log("未选择音频文件");
        }
    });
    
    // 视频分析
    document.getElementById('analyze-video').addEventListener('click', function() {
        const fileInput = document.getElementById('video-input');
        const file = fileInput.files[0];
        if (file) {
            const formData = new FormData();
            formData.append('file', file);
    
            fetch('http://1.92.69.178:8000/video', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                const translatedEmotion = translateEmotion(data.prediction);
                document.getElementById('video-analysis-result').textContent = "预测结果: " + translatedEmotion;
            })
            .catch(error => {
                console.error('Error:', error);
            });
        } else {
            console.log("未选择视频文件");
        }
    });
    
  • 前端部署至服务器,在后端已经部署在服务器的基础上,将前端代码同时部署至服务器上,但最开始因为前端代码有中文路径,部署之后无法识别,因此需要经中文路径改为英文。

gitee文件夹

标签:异构,acc,const,image,getElementById,best,path,多源,综合
From: https://www.cnblogs.com/qxt0320/p/17901893.html

相关文章

  • 软件需求与分析课堂测试十——综合案例分析
    软件需求与分析课堂测试十——综合案例分析 根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1、用户可以按照会议人数、会议时间预订会议室。可以只预订1次,也可预订定期召开的会议。2、开会前允许用户修改会议时间、......
  • 软件需求与分析课堂测试十——综合案例分析(5分)
    根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1、用户可以按照会议人数、会议时间预订会议室。可以只预订1次,也可预订定期召开的会议。2、开会前允许用户修改会议时间、人数,重新选择会议室,甚至取消预订的会议。3、......
  • 软件需求与分析课堂测试十——综合案例分析(5分)
    软件需求与分析课堂测试十——综合案例分析(5分) 根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1、用户可以按照会议人数、会议时间预订会议室。可以只预订1次,也可预订定期召开的会议。2、开会前允许用户修改会议时......
  • 异构内存管理(HMM) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/hmm.html异构内存管理(HMM)HMM提供基础设施和辅助工具,将非常规内存(例如设备内存,如GPU板载内存)整合到常规内核路径中,其核心是为此专门设计的用于此类内存的structpage(请参见本文档的第5至7节)。HMM还提供了用于SVM(共享虚拟内存)的可选辅......
  • 使用AWS CLI精通AWS ECS:部署和管理的综合指南
    亚马逊弹性容器服务(AmazonElasticContainerService,ECS)为部署和管理容器化应用提供了强大的平台。在本指南中,我们将通过AWS命令行界面(CLI)探讨如何无缝地执行常见的ECS任务。无论您是初学者还是经验丰富的用户,本逐步教程都将帮助您轻松地导航ECS集群、任务和服务。先决条件在我们......
  • SSM框架实现新闻网站信息管理系统前台后台综合开发项目实战
    ......
  • Python:函数综合案例-黑马ATM
    综合案例:黑马ATM主菜单查询余额效果存取款效果#总额totaltotal=5000000#定义None影响不大,可以不定义name=None#要求客户输入姓名name=input("请输入您姓名:")#菜单提示defmenu():print("-"*19+"主菜单"+"-"*19)print(f"{name},您......
  • rsync综合备份
    一.先看需求客户端需求客户端需求:1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录)2.客户端备份的数据必须存放至以"主机名_ip地址_当前时间"命名的目录中3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器4.客户端服务器本地保留最近7......
  • 金义中央大道通车│三思智慧综合杆&道路照明系统方案点亮23公里智慧公路
    金义中央大道工程建设率先引入“数字孪生”理念,通过“1+1+5+X”架构,探索数字化运营,重点解决疏通道路拥堵、保障安全通行、提高养护效率以及优化出行服务等一系列问题,全力打造一条“要素感知全覆盖、安全保障全天候、出行服务全方位、业务管理全数智”的智慧公路。11月28日上午11时,......
  • Matplotlib数据可视化综合应用Matplotlib图形配置在线闯关_头歌实践教学平台
    Matplotlib数据可视化综合应用图形配置第1关配置颜色条第2关设置注释第3关自定义坐标刻度第4关配置文件与样式表第1关配置颜色条任务描述本关任务:使用colorbar绘制一个热成像图。编程要求在右侧编辑器Begin-End处补充代码,根据输入数据绘制热成像图并隐藏坐标轴,具体要求如......