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

发布时间 2023-12-14 23:53:34作者: Chen'coke

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

这个项目属于哪个课程 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

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

项目背景:

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

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

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

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

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

功能阐述:

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

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

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

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

个人分工

数据采集阶段

根据设计方案进行图片、视频的爬虫设计规范,包括规范使用的爬虫策略、数据结构、存储方式等选择合适的方式完成视频的爬虫设计,并做好预处理工作;

数据库搭建及数据预处理阶段

参与数据库搭建的讨论和制定和数据质量的检查和控制,包括数据库表结构设计、数据清洗、数据转换等,确保数据的准确性和完整性。

数据建模阶段

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

def img_predict_fun(img_path):
    model = YOLO('yolov8x.pt')
    results = model(img_path)  # results list
    for r in results:
        boxes = r.boxes  # Boxes object for bbox outputs
        class_dict = r.names # 类别字典
        # boxes.cls : 预测类别的key值的tensor数组
        class_pre = [class_dict[i] for i in boxes.cls.tolist()]
        #
        # im_array = r.plot()  # plot a BGR numpy array of predictions
        # im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
        # im.show()  # show image
        # im.save('results.jpg')  # save image
    return ",".join(list(set(class_pre)))

def video_predict_fun(video_path):
    # Load the YOLOv8 model
    model = YOLO('yolov8x.pt')
    # Open the video file
    cap = cv2.VideoCapture(video_path)
    sum = 0
    timef = 25  # 隔25帧保存一张图片
    class_ls = []
    # Loop through the video frames
    while cap.isOpened():
        # Read a frame from the video
        frameState, frame = cap.read()
        sum += 1
        if frameState == True and (sum % timef == 0):
            # Run YOLOv8 inference on the frame
            results = model(frame)

            boxes = results[0].boxes  # Boxes object for bbox outputs
            class_dict = results[0].names  # 类别字典
            # boxes.cls : 预测类别的key值的tensor数组
            class_pre = [class_dict[i] for i in boxes.cls.tolist()]

            class_ls.extend(class_pre)
            # Visualize the results on the frame
            annotated_frame = results[0].plot()

            # Display the annotated frame
            cv2.imshow("YOLOv8 Inference", annotated_frame)

            # Break the loop if 'q' is pressed
            if cv2.waitKey(1) & 0xFF == ord("q"):
                break
        elif frameState == False:
            # Break the loop if the end of the video is reached
            break
    # Release the video capture object and close the display window
    cap.release()
    cv2.destroyAllWindows()
    return ",".join(list(set(class_ls)))

码云链接

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