虚拟现实环境下的远程教育和智能评估系统(十一)

news2024/12/23 2:46:13

视频帧画面知识点区域划分

知识点区域精确分割技术:

在深度学习检测模型结果基础上使用基于交并比(IoU)阈值的目标合并算法,合并过度重合目标区域面积,实现知识点区域精确分割

多模态知识点内容匹配策略:

图像:利用GPT-4模型的多模态处理能力,将视频帧中的图像与预设的知识点语义注解进行匹配 文本:使用Sentence Transformer模型对视频帧中提取的文本内容进行深度语义编码,将其嵌入向量与知识点数据库中的语义向量进行比较。通过计算语义相似度,精确匹配相关知识点,实现高效的文本内容到知识点的映射;

自此,可以使视频帧画面的各部分都有对应的知识点;

import os
import re
from sentence_transformers import SentenceTransformer, util
from test_gpt import detection_gpt

# 初始化Sentence Transformer模型
model = SentenceTransformer('all-MiniLM-L6-v2')

def get_embedding(text):
    return model.encode(text, convert_to_tensor=True)

def semantic_similarity(text1, text2):
    embedding1 = get_embedding(text1)
    embedding2 = get_embedding(text2)
    return util.pytorch_cos_sim(embedding1, embedding2).item()

def parse_knowledge_content(content):
    knowledge_points = []
    kp_blocks = content.strip().split("\n\n")
    for block in kp_blocks:
        lines = block.split("\n")
        kp_dict = {}
        for line in lines:
            key, value = line.split(":", 1)
            kp_dict[key.strip()] = value.strip()
        knowledge_points.append(kp_dict)
    return knowledge_points

def read_knowledge_file(timestamp, json_folder_path):
    knowledge_file_path = os.path.join(json_folder_path, f"{timestamp}.txt")
    try:
        with open(knowledge_file_path, 'r') as file:
            content = file.read()
        return parse_knowledge_content(content)
    except FileNotFoundError:
        return "Knowledge file not found"
    except Exception as e:
        return str(e)

def parse_merge_text(file_path):
    with open(file_path, 'r') as file:
        content = file.read()
    timestamps = re.split(r'Timestamp: (\d+)', content)[1:]
    timestamp_data = {timestamps[i]: timestamps[i+1] for i in range(0, len(timestamps), 2)}
    return timestamp_data

def kp_match_data(merge_text_path, json_folder_path, object_frames_folder, output_path):
    data = parse_merge_text(merge_text_path)
    output_data = []
    
    for timestamp, contents in data.items():
        knowledge_content = read_knowledge_file(timestamp, json_folder_path)
        knowledge_txt_path = os.path.join("json_files", f"{timestamp}.txt")
        if isinstance(knowledge_content, str):
            output_data.append(f"Timestamp: {timestamp}\n{contents}\n{knowledge_content}\n")
            continue
        try:
            with open(knowledge_txt_path, 'r', encoding='utf-8') as file:
                knowledge_txt = file.read()
        except FileNotFoundError:
            print(f"Knowledge file not found for timestamp {timestamp}")
            continue    

        contents_processed = contents
        detection_matches = re.findall(r'(Detection \d+): \((\d+, \d+, \d+, \d+)\)', contents)
        for match in detection_matches:
            detection_label, detection_data = match
            detection_number = detection_label.split(' ')[1].lower()  # e.g., 'detection1'
            detection_image_path = os.path.join(object_frames_folder, f"{timestamp}_detection{detection_number}.jpg")
            kp_id = detection_gpt(detection_image_path, knowledge_txt)
            contents_processed = contents_processed.replace(detection_label, f"{detection_label} (Knowledge_pdoint_id: {kp_id})")
        
        ocr_texts = re.findall(r'OCR \d+: \(\d+, \d+, \d+, \d+\) (.+)', contents)
        for ocr_text in ocr_texts:
            best_match = None
            best_score = -float('inf')
            for kp in knowledge_content:
                score = semantic_similarity(ocr_text, kp['Original_text'])

                if score > best_score:
                    best_match = kp
                    best_score = score
            if best_match:
                contents_processed = contents_processed.replace(
                    ocr_text, 
                    f"(Knowledge_point_id: {best_match['Knowledge_point_id']}) {ocr_text}"
                )
        output_data.append(f"Timestamp: {timestamp}\n{contents_processed}\n")

    with open(output_path, 'w', encoding='utf-8') as file:
        file.write("\n".join(output_data))

OCR得到的音频文本以及YOLO得到的detection区域对应知识点匹配:

下一步即是匹配三方数据:语音文本知识点、帧知识点区域、实时注视点位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux驱动开发-01配置开发环境

一、配置网络环境 使用桥接网卡时 Ubuntu 就是使用一个真实的网卡 :开发板的网线也连接到这个真实的网卡上,这样 Windows 、 Ubuntu 、开发板就都可以用过这个网卡互通了。 NAT 网卡: Ubuntu 通过它上网,只要 Windows 能上网&…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码,如下: 处理办法: 1、打开idea,在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings,如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…

鸿蒙Harmony实战—通过登录Demo了解ArkTS

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义…

信息学奥赛初赛天天练-30CSP-J2022完善程序-结构体构造函数初始化、auto关键字、连通块、洪水填充算法实战

PDF文档公众号回复关键字:20240620 2022 CSP-J 阅读程序2 完善程序 (单选题 ,每小题3分,共30分) 2 (洪水填充) 现有用字符标记像素颜色的8 * 8图像。颜色填充操作描述如下:给定起始像素的位置和待填充的颜色,将起始像素和所有可…

山东华素制药有限公司:素心做药,感恩回报

在山东威海这片美丽的土地上,有一颗璀璨的明珠——山东华素制药有限公司。自2013年成立以来,这家企业以其深厚的制药底蕴、卓越的研发实力和坚定的社会责任,赢得了社会各界的广泛赞誉。它不仅是化学药品制剂制造的佼佼者,更是“素心做药,感恩回报”的典范。 一、素心做药,品质为…

Android Compose 文本输入框TextField使用详解

一、 TextField介绍 TextField 允许用户输入和修改文本,也就是文本输入框。 TextField 分为三种: TextField是默认样式OutlinedTextField 是轮廓样式版本BasicTextField 允许用户通过硬件或软件键盘修改文本,但不提供提示或占位符等装饰&a…

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练(Self-Training)2.2 协同训练(Co-Training)2.3 图半监督学习(Graph-Based Semi-Supervise…

C++基础知识——命名空间

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan. 文章目录 1、什么是命名空间2、命名空间的作用3、如何定义命名…

总结之LangChain(一)—— 简单使用LangChain

LangChain介绍 LangChain官网:https://python.langchain.com/v0.2/docs/introduction/ LangChain 是一个基于大型语言模型(LLM)开发应用程序的框架。 LangChain 简化了LLM应用程序生命周期的每个阶段: 开发:使用 L…

JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)

爬虫 正则表达式的作用 作用1:校验字符串是满足规则 作用2:在一段文本中查找满足需要的内容 本地爬虫和网络爬虫 Pattern类 表示正则表达式 Matter类 文本编译器,作用按照正则表达式的规则去读取字符串,从头开始读取&#xf…

Everything 一款功能强大的搜索工具

要在电脑上使用Everything搜索文件,您需要使用以下步骤: 在您的电脑上下载并安装Everything软件。您可以从官方网站https://www.voidtools.com/downloads/下载最新版本的软件。 安装完成后,打开Everything软件。 在搜索栏中输入您要查找的文…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

手把手教你如何部署自己的One Tool助手

手把手教你如何部署自己的One Tool助手 前言安装教程效果图在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0fc5cb0f451e4c50b55ec850a5517b0c.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/56331f878b9545d5bff6f938c4b317…

uniapp 项目,用HBuilder X在小程序端 运行项目,发布项目

1. 运行项目(直接在微信开发者工具中导入项目,运行项目会报错,要通过HBuilder X运行项目) 1.1 配置内容,必须是该小程序的开发者才能运行 查看appid, 项目 -- manifest.json 文件 -- 微信小程序配置 -- APPID 小程序…

用国内首家文生软件平台生成一个整蛊拼图小游戏是什么体验?

前言: 众所周知,2023年是中国大模型发展的元年,以ChatGPT3.5为代表的初代语言大模型横空出世,直接掀起了一阵全球范围内的AIGC浪潮。 在中国大模型追星赶月的这一年,技术迭代日新月异,行业趋势不断变化&a…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker :RabbitMQ服务。 virtual host: 其实就是分组。 Connection:连接,生产者消费者与Broker之间的TCP连接。 Channel:网络信道,轻量级的Connection,使用Chann…

基于SpringBoot+Vue北部湾地区助农平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

Centos SFTP搭建

SFTP配置、连接及挂载教程_sftp连接-CSDN博客1、确认是否安装yum list installed | grep openssh-server 2、创建用户和组 sudo groupadd tksftpgroup sudo useradd -g tksftpgroup -d /home/www/tk_data -s /sbin/nologin tksftp01 sudo passwd tksftp013. 配置SFTP注意&a…

【ElasticSearch】ElasticSearch基本概念

ES 是一个开源的高扩展的分布式全文检索引擎,它是对开源库 Luence 的封装,提供 REST API 接口 MySQL 更适合数据的存储和关系管理,即 CRUD;而 ES 更适合做海量数据的检索和分析,它可以秒级地从数据库中检索出我们感兴…

数据结构和算法之复杂度比较

数据结构和算法之复杂度比较 参考如下网址:https://www.bigocheatsheet.com/ 方便快速查询 1. 复杂度比较 2. 常见数据结构复杂度 3. 常见算法复杂度