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

发布时间 2023-12-14 23:43:14作者: EI-Shaddoll-Midrash

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

这个项目属于哪个课程 https://edu.cnblogs.com/campus/fzu/2023DataCollectionandFusiontechnology
组名、项目简介 组名:泥头车
项目需求:设计一个包含视频、文本、图片、音频多源异构数据采集与融合的、能够判断相关性、客观性的应用网站
项目目标:(1)对大众点评上的评论真实性进行分析 (2)根据抖音等短视频平台上的短视频内容进行抽取和分类判别
项目开展技术路线:python、华为云平台、前端:ES6、vue3、 element-plus、后端:python-flask框架、百度千帆大模型ERNIE-Bot服务、whisper、yolov8模型、基于预训练的vgg网络再训练
团队成员学号 102102136、102102137、102102138、102102139、102102109
这个项目的目标 采用技术手段和方法,对“水军”和虚假评论进行判别,对视频进行合理的分类以确保网络环境的公正、真实和安全。
其他参考文献 [1]吴娇,汪可馨,许锟.融合多模态的虚假新闻检测[J].哈尔滨商业大学学报(自然科学版),2023,39(01):47-52.DOI:10.19492/j.cnki.1672-0946.2023.01.011.https://kns.cnki.net/kcms2/article/abstract?v=GARc9QQj0GVrRulgkOiVKs9OD8ERvmQdGrXIV2ms209gRfu49Augq0X_2vnaL53NgHQ6KwEzzTwCIukhEcuJkgpr_m5eu9meF3LV8Ea-whxcFP_M4FPBC0nIemlyQWBNdhvtE6B2ZY0mEKOTVCeAgw==&uniplatform=NZKPT&language=CHS
[2]李卓远,李军.基于对比学习的多模态注意力网络虚假信息检测方法[J].中国科技论文,2023,18(11):1192-1197.https://kns.cnki.net/kcms2/article/abstract?v=GARc9QQj0GWs7L0B_mSfAcFMA2momxuYqmRi065OIiQ3CpJhb6p-iuB7nQGlVXtc2dYDyU35K3EwKjx3yIcqKZ1dZdtu2GjIDpLhDAymvzldJGiK5igtNNSLeQUnJEwliDlswaIltIg=&uniplatform=NZKPT&language=CHS

实践内容:FZU判官 网站制作

项目背景:

随着互联网的快速发展,网络评论和短视频成为人们表达意见、分享观点的重要渠道。然而,这些评论和短视频中有时存在大量的“水军”和虚假评论,给用户和平台带来了很多困扰。因此,对“水军”和虚假评论进行判别显得尤为重要。

“水军”是指在网络上故意发布虚假评论、制造舆论热点的一群人。他们通常是为了获取某种利益或达到某种目的而进行恶意行为。“水军”的存在不仅扰乱了网络秩序,还可能误导用户,导致不良后果。因此,对“水军”进行判别是维护网络健康的重要任务。

虚假评论是指那些故意发布不真实、不客观的评论,以达到某种目的的行为。这些评论往往与事实不符,甚至可能误导用户。虚假评论的存在不仅破坏了网络评论的公正性和真实性,还可 能对用户造成经济损失或其他不良影响。因此,对虚假评论进行判别也是非常重要的。

随着短视频的兴起,短视频中的评论和互动也变得越来越重要。然而,与文本评论相比,短视频中的评论更加难以判别。因为短视频视频内容,很难通过文本分析来判断其真实性。因此,对短视频中的评论进行判别也是非常重要的。

因此,我们希望采用先进的技术手段和方法,对“水军”和虚假评论进行判别,以确保网络环境的公正、真实和安全。

功能阐述:

一、对大众点评上的评论真实性进行分析

  1. 数据获取:使用爬虫技术从大众点评上获取评论数据,包括评论的图片、文字、评分等信息。
  2. 数据清洗:对获取的数据进行清洗和处理,去除无关信息和噪声数据。
  3. 评论分析:使用自然语言处理(NLP)技术对评论的文字进行分析,提取关键词和情感倾向,判断评论的相关性和客观性。
  4. 综合评分计算:根据评论的相关性、客观性和其他因素,计算每条评论的综合评分。
  5. 结果展示:在网站上展示分析结果,包括评论的图片、文字、相关性、客观性和综合评分。

二、根据抖音等短视频平台上的短视频内容进行抽取和分类判别

  1. 数据获取:使用爬虫技术从抖音等短视频平台上获取视频数据。
  2. 视频处理:对获取的视频数据进行处理,包括视频转码、视频摘要生成等操作。
  3. 视频内容抽取:使用计算机视觉(CV)和自然语言处理(NLP)技术对视频内容进行抽取,提取视频的关键帧和音频信息,生成视频的文字描述。
  4. 视频分类:根据视频的文字描述和其他特征,使用机器学习算法对视频进行分类,判断视频属于哪一类。
  5. 结果展示:在网站上展示分类结果和视频的梗概。

个人分工

数据采集阶段

负责主导数据采集阶段的工作,针对所需的音频、文字、图片、视频的爬虫方面制定具体的爬虫设计方案,分配具体的设计任务和设计要求,做好数据预处理工作;

前后端构建阶段

我负责主导网站后端的搭建工作以及服务器的运行和维护,与前端开发人员协作,设计并实现网站的后端架构,部署和维护服务器,确保服务器的稳定运行和数据安全,确保前后端数据交互的正确性和稳定性。
我使用python的flask框架进行后端设计,并使用华为云平台的服务器来提供稳定的服务。
代码如下:

# 连接数据库
db = pymysql.connect(
    host='127.0.0.1',
    user='pg_db',
    password='123456',
    database='pg_db',
    cursorclass=pymysql.cursors.DictCursor
)
@app.route('/comment',methods=['GET'])
def Comment():
    # 创建数据库游标
    cursor = db.cursor()
    try:
        pagesize = 5
        page = int(request.args.get('page', 0))
        offset = (page-1)*pagesize
        # 执行查询
        cursor.execute("SELECT count(*) FROM comment")
        # 获取查询结果
        datas = cursor.fetchall()
        cursor.execute("SELECT * from comment limit %s,%s", (offset, pagesize))
        arrays = cursor.fetchall()
        array_list=[]
        for array in arrays:
            array_data = {
                'id': str(array['id']),
                'pic': str(array['pic']),
                'comment': str(array['comment']),
                'information':str(array['information']),
                'correlation':str(array['correlation']),
                'credibility':str(array['credibility']),
                'score':str(array['score'])
            }
            array_list.append(array_data)
        response = {
            'msg':'成功',
            'code':0,
            'datas': datas,
            'array': array_list
        }
        return jsonify(response)
    except Exception as e:
        # 查询失败,返回错误原因
        response = {
            'msg': str(e),
            'code': 1,
        }
        return jsonify(response)
    finally:
        # 关闭游标
        cursor.close()


@app.route('/video',methods=['GET'])
def Video():
    # 创建数据库游标
    cursor = db.cursor()
    try:
        pagesize = 5
        page = int(request.args.get('page', 0))
        offset = (page - 1) * pagesize
        # 执行查询
        cursor.execute("SELECT count(*) FROM video")
        # 获取查询结果
        datas = cursor.fetchall()
        cursor.execute("SELECT * from video limit %s,%s", (offset, pagesize))
        arrays = cursor.fetchall()
        array_list = []
        for array in arrays:
            array_data = {
                'id': str(array['id']),
                'video_pic': str(array['video_pic']),
                'information': str(array['information']),
                'text': str(array['text']),
                'type': str(array['type']),
            }
            array_list.append(array_data)
        response = {
            'msg': '成功',
            'code': 0,
            'datas': datas,
            'array': array_list
        }
        return jsonify(response)
    except Exception as e:
        # 查询失败,返回错误原因
        response = {
            'msg': str(e),
            'code': 1,
        }
        return jsonify(response)
    finally:
        # 关闭游标
        cursor.close()

@app.route('/comment/upload',methods=['POST'])
def CommentUpload():
    if request.method == 'POST':
        file = request.files['pic']
        comment = request.form.get('comment')
        cursor = db.cursor()
        # 检查数据完整性
        if not file or not comment:
            return jsonify({'code':1,'msg': '缺少必要字段'})
        try:
            
            file_path = "/www/wwwroot/duomotai/图片/{secure_filename(file.filename)}"
            file.save(f"/www/wwwroot/duomotai/图片/{secure_filename(file.filename)}")
            information = pic_video.img_predict_fun(file_path)
            correlation = cor.correlation_get(comment,information)
            credibility = cre.credibility_get(comment)
            score = correlation*5 + credibility
            # 执行插入语句
            cursor.execute("INSERT INTO comment (pic, comment,information,correlation,credibility,score) VALUES (%s, %s)", (file, comment,information,correlation,credibility,score))
            db.commit()

            # 返回成功响应
            return jsonify({'code':0,'msg': '成功'})
        except Exception as e:
            # 插入失败,返回错误原因
            db.rollback()
            return jsonify({'code':1,'msg': str(e)})
        finally:
            # 关闭游标
            cursor.close()
    
@app.route('/video/upload', methods=['POST'])
def VideoUpload():
    if request.method == 'POST':
        file = request.files['video_pic']
        cursor = db.cursor()
        # 检查数据完整性
        if not file:
            return jsonify({'code': 1, 'msg': '缺少必要字段'})
        try:
            
            if file.filename == '':
                return jsonify({'code': 1, 'msg': '没上传文件'})
            file_path = "/www/wwwroot/duomotai/视频/{secure_filename(file.filename)}"
            file.save(f"/www/wwwroot/duomotai/视频/{secure_filename(file.filename)}")
            contain1 = pic_video.video_predict_fun(file_path)
            # 执行插入语句
            # cursor.execute("INSERT INTO video (video_pic,information,type) VALUES (%s,%s,%s,%s)", (video_pic,information,type))
            db.commit()
            
            # 返回成功响应
            return jsonify({'code': 0, 'msg': '成功'})
        except Exception as e:
            # 插入失败,返回错误原因
            db.rollback()
            return jsonify({'code': 1, 'msg': str(e)})
        finally:
            # 关闭游标
            cursor.close()

数据建模阶段

负责主导图片、视频处理模型运用阶段的工作,根据项目的具体需求和目标,考虑模型的特性、适用场景以及项目的数据特点等因素选取适合的算法。
对于图像处理,使用Yolov8模型进行目标检测,并从图像中提取信息,对图像进行目标检测,将函数返回值作为类别标签数组,从而实现图片的信息提取。
对于视频处理,先视频进行抽帧处理和目标检测,再运用Yolov8模型,从视频中检测出目标物体后按照图像处理方法进行进一步处理。
基于预训练的vgg网络再训练,进行参数调整和优化通过反复试验和评估模型性能,以找到最佳的模型参数配置。

项目测试阶段

我使用apifox对我写的后端接口进行测试,并配合前端同学的网页测试来发现bug和解决bug。

码云链接:https://gitee.com/chen-pai/box/tree/master/实践课多模态实践