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

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

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

在深度学习检测模型结果基础上使用基于交并比(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区域对应知识点匹配:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能,机器学习,统计学习,科学表征】开源商用与研发合作

个体工户linjing-lab托管在Github,现公开招募商用与合作人员,目标人群分为以下几个方向: 数学、信息科学、计算机专业的大学高年级学生,熟悉C和面向对象模型,擅长Pybind11编译算子到Python环境。26岁以下的大学本科毕…

PDF文档翻译软件哪个好?分享5款快速翻译的工具

世界各地的交流日益密切,文档翻译服务因此变得不可或缺。 无论是企业间的跨国商务合同,还是学术领域的专业研究论文,准确无误地将文档内容翻译成目标语言,对于保障信息的清晰传达和正确理解极为关键。 在这样的背景下&#xff0…

今日分享:中国石油年金系统交互、视觉设计和vue开发

金融系统交互及UI设计时,需注意简洁明了、色彩合理、字体统一、交互易用、安全感和用户控制。确保用户快速理解、安全操作并提升体验。

JavaScript:at()方法遇到的问题并解决

目录 第一章 前言 第二章 使用at方法 第三章 分析原因并解决问题 第一章 前言 最近上线了一个项目,测试过程中并没有什么问题,但是上线后使用的用户多了,结果出现了这么一个问题:.at方法对低版本手机的浏览器不兼容问题&#x…

英伟达中国特供芯片降价背后:巨头与市场的较量

英伟达,这家曾经在人工智能芯片领域独领风骚的巨头,近期在中国市场遭遇了一些挑战。为了应对来自华为等中国本土企业的竞争,英伟达不得不采取降价策略,调整其专为中国市场打造的H20芯片价格,甚至低于华为的同类产品。这…

STM32 串口通讯

使用STM32的串口通讯,接收串口助手的数据,并且将接收到的数据返回串口,重定义printf功能。 配置引脚信息 由于每次新建工程都需要配置信息,比较麻烦,好在STM32CubeIDE提供了导入.ioc文件的功能,可以帮我们…

Flutter【组件】按钮

简介 flutter 按钮组件。提供一种封装按钮组件的思路,并不支持过多的自定义属性。根据使用场景及设计规范进行封装,使用起来比较方便。 github地址:https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/package…

Faiss:加速大规模数据相似性搜索的利器

在机器学习和数据挖掘领域,相似性搜索是一项基本且重要的任务,它涉及到在大型数据集中找到与特定对象最相似的对象。Faiss是一个由Facebook AI Research开发的库,专门用于高效地进行相似性搜索和聚类,它之所以重要,是因…

uni-app的uni-list列表组件高效使用举例 (仿知乎日报实现)

目录 前言 uni-list组件介绍 基本使用 高级配置与自定义 仿知乎日报实现 知乎的api接口 后台服务实现 知乎日报首页 轮播图界面实现 客户端接口实现 uni-list列表使用 插入日期分割线 下滑分页的实现 完整页面代码 其他资源 前言 在移动应用开发领域&#xff0…

2024年【N1叉车司机】作业考试题库及N1叉车司机实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 2024年N1叉车司机作业考试题库为正在备考N1叉车司机操作证的学员准备的理论考试专题,每个月更新的N1叉车司机实操考试视频祝您顺利通过N1叉车司机考试。 1、【多选题】《中华人民共和国特种设备安全法》第…

JavaWeb之JSON、AJAX

JSON 什么是JSON:JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式(JavaScript提供) 特点 [{"name":"周珍珍", "age":18},{"name":"李淑文","age":20}]数据是以键值对形式…

[Ansible详解]

Ansible 1.主机组清单设置 #组 #父组与子组[组名] [组名]ip ipip ip[组名 : vars] [组名2]ansible_user=用户 …

如何在linux中下载R或者更新R

一、问题阐述 package ‘Seurat’ was built under R version 4.3.3Loading required package: SeuratObject Error: This is R 4.0.4, package ‘SeuratObject’ needs > 4.1.0 当你在rstudio中出现这样的报错时,意味着你需要更新你的R 的版本了。 二、解决方…

【机器学习】与【深度学习】的前沿探索——【GPT-4】的创新应用

gpt4o年费:一年600, 友友们,一起拼单呀,两人就是300,三个人就是200,以此类推, 我已经开通年费gpt4o,开通时长是 从2024年6月20日到2025年7月16日 有没有一起的呀,有需要的…

在SQL中使用explode函数展开数组的详细指南

目录 简介示例1:简单数组展开示例2:展开嵌套数组示例3:与其他函数结合使用处理结构体数组示例:展开包含结构体的数组示例2:展开嵌套结构体数组 总结 简介 在处理SQL中的数组数据时,explode函数非常有用。它…

VScode中js关闭烦人的ts检查

类似如下的代码在vscode 会报错,我们可以在前面添加忽略检查或者错误,如下: 但是!!!这太不优雅了!!!,js代码命名没有问题,错在ts上面,…

window安装miniconda

下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 安装 双击安装 配置环境变量 添加:PYTHONUSERBASE你的安装路径 添加Path: cmd执行: python -m site将USER_SITE添加进Path 还需要将如下添加进环境变量 D:\Miniconda…

C++学习/复习16---优先级队列/仿函数/反向迭代器

一、优先队列与堆 1.1概念 1.2第k个元素 仿函数: **仿函数(Functor)是一种通过重载operator()运算符的类或结构体,调用使得对象可以像函数一样被**。在C编程中,仿函数不仅增添了编程的灵活性和功能的强大性&#xff…

【TIM输出比较】

TIM输出比较 1.简介1.1.输出比较功能1.2.PWM 2.输出比较通道2.1.结构原理图2.2.模式分类 3.输出PWM波形及参数计算4.案例所需外设4.1.案例4.2.舵机4.3.直流单机 链接: 15-TIM输出比较 1.简介 1.1.输出比较功能 输出比较,英文全称Output Compare,简称O…

Linux守护进程简介、创建流程、关闭和实例演示

1、什么是守护进程? 守护进程是一个后台运行的进程,是随着系统的启动而启动,随着系统的终止而终止,类似于windows上的各种服务,比如ubuntu上的ssh服务,网络管理服务等都是守护进程。 2、守护进程的创建流…