Jina AI 联合Datawhale,发起学习项目!

2024-02-03 22:50

本文主要是介绍Jina AI 联合Datawhale,发起学习项目!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 Datawhale学习 

贡献方: Jina AI 、Datawhale,方向:视频搜索

视频创作者通常需要从大量的素材中找到自己需要的片段来剪辑,可真是心累。作为 Up 主的王德福抓住这一需求和他的小伙伴 Arthur,使用 Jina 搭建起一个跨模态视频搜索引擎,轻松实现输入描述文本,即可得到对应视频片段。

25d810c88f870547cc65b64b0ba33fce.png

视频地址:https://www.bilibili.com/video/BV1n3411u7tJ

开发背景

作为一个前端程序员兼 Up 主,平时拍摄与搜集的素材库实在太多,在视频制作时,想快速找出想要的视频片段太费劲了,那么有什么办法能节省翻找素材的时间呢?

  • 通过给每段视频素材打上标签?太繁琐,并且太耗时。

  • 通过检索字幕去查找出对应的画面?但只能是人物说了那句话才行,没有说话的画面就无法检索,得到的结果太局限了。

而我想要这个工具能够实现:输入对画面的描述,就能得到视频素材的片段。那么,如何利用 AI 来实现我的需求呢?既要理解自然语言,又要理解视频内容,听起来不像是简单的任务......

技术选型

我了解到 OpenAI 开源的 CLIP 模型,它能够完成图像与文本的匹配任务。也就是说,我们可以通过利用 CLIP 模型实现用描述性的文本,而非关键词搜索到图像,而视频又可以看作是一帧帧的图像。

因此,借助强大的 CLIP 模型,我可以实现一个基于语义的,而非基于关键词的搜索引擎。不同于传统的 ES 全文搜索,我不需要给每个视频素材人为地打上标签,也不需要利用 OCR、正则去做匹配。只需通过 AI 模型,优雅地提取图像和文本的特征向量,通过计算两者的向量相似度,就能返回到我想要的结果,听起来相当完美。

初选方案

一开始,我尝试用纯 Python + CLIP 模型实现了初版方案。

fa4055393d91685a25c4bd127ebc26a3.png

但当时遇到了一些棘手的问题,即向量无法存储。由于没有合适的数据存储方式,做数据库也需要一定开发量,因此我每次都需要重新计算一遍向量,繁琐、耗时又费力。

并且由于项目无法独立部署,导致无法通过前端页面来承载视频片段搜索的能力。而这些都有太多开发成本,对于一个我这样的前端开发者来说,将大部分精力都花费在不熟悉的工作上,太得不偿失了。

最终方案

因此我尝试在开源社区寻找合适的解决方案,发现了 Jina,作为一个专注于神经网络搜索的 AI 框架,正好提供了我原方案里所需的能力。于是,我转变了思路,使用 Jina + CLIP 实现从文本到视频片段的搜索系统。

006f530b903c8b353fb55edd0b8401c5.png

如果用纯 Python 的方式表示一个视频,需要自己建立一个哈希表,包括 embedding 、图片的存储,结构会很难看。

但 Jina 里的 DocArray 能把这个存储变得非常结构化,不管有多少帧视频,都可以在一个 Document 里做封装。而且可以有不同的层级结构,比方说第一层用于存储整体的视频,第二层用于存储视频下不同的帧......切换不同的模态时,也可以设置成顶层是一整段话,第二层是一个句子,第三层是一个单词。不仅可以通过每个单词进行搜索,也可以通过每句话进行搜索,这样搜索颗粒度选择就更多,搜索结果也会更加丰富。

项目流程

本项目的业务流程分为两大部分:视频的上传和搜索。包括数据向量化、向量相似度比较、结果的召回三个主要流程。具体如下图所示。

9fef8af21f764710c9677b4487377a6c.png

首先上传视频,调用 Jina 的 Video Loader,对视频抽帧,并将数据存储到 DocArray 的块里。在 Encode image 里生成向量,最后存储到 DocArray 的 Index 。在搜索时,在 Index 里会对向量的相似度进行打分,最后依据分数排序,得到返回的结果。

在定义服务上,由于 Jina 的工程师已经把逻辑都抽象出来,所以开发时只需要通过一套配置文件就能起整个服务,只需要定义需要哪些模块。就像搭积木一样,把每一个模块搭起来,不用去考虑服务之间的连接和通信。只需要专注如何实现自己的业务,不用操心架构实现的事情。

项目repo:https://github.com/ArthurKing01/jina-clip

学习项目

Datawhale 社区将联合 Jina AI 社区,结合本项目,打造多模态、跨模态应用的系列学习课程。

项目地址:
https://github.com/datawhalechina/DOPMC/issues/67

项目简介

本项目希望通过AI以及向量搜索技术实现一个自动剪辑视频的应用。最终应用可以实现通过输入文字描述来对视频的片段进行提取,达到提取素材的目的。

立项理由

目前社区的课程大部分以算法为主,希望通过该项目帮助学习者完成整个端到端的项目构建过程,帮助学习者锻炼实际工程能力

项目亮点

该项目主要有以下三点内容较为创新:

  • 使用到了跨模态模型

  • 使用到了向量检索技术

  • 搭建了端到端的项目完整构建方案

f2a7abc1d1e38975090b463dfcf1b851.png

整理不易,三连

这篇关于Jina AI 联合Datawhale,发起学习项目!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675663

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl