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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca