淘宝拍照基于端云协同的视频流实时搜索实践

news2024/11/20 18:36:56

e10dba6ae9f1121e525cc9b4dc8b50af.gif

本文介绍了实时视频流的主体识别场景,未来实时搜将会融合图搜主链路并在XR场景发力,未来的场景我们取名为“元视界”(MetaSight)

1bd5325f31b557dc7a63a3ddb13126c3.png

引言

很多熟悉淘宝的用户知道,点击首页搜索框的相机icon,就可以使用淘宝拍照功能来进行实时拍照搜同款和比价。

0a366591a0a1bb07927081c5ce4a5189.png

这背后就是图片搜索技术在电商领域的应用。正如把大象关进冰箱只需要三步:打开冰箱、把大象放进去、关上冰箱。淘宝拍照的自动识别图搜功能也可以简化描述为以下三步:

  1. 客户端从摄像头获取图像,利用端侧算法识别出主体

  2. 上传图片到云端,云端根据主体特征进行搜索,并返回识别结果

  3. 客户端拉起结果页把图搜结果展示给用户

以上流程是目前图搜的主链路,用户感受到了两个场景:镜头页进行物体识别,结果页展示图搜结果。这套模式已经运行了很长时间。而在拍立淘近一年的发展中,我们一直期望面向未来打基础。我们合并了镜头页,对接了MNN端智能平台,在AR眼镜普及的前夜,希望可以投入部分兵力到XR的阵营,抓住这个爆点。目前苹果已经出了MR眼镜,大概率未来会削弱PC、TV等现有设备的使用价值。而苹果推出AR眼镜的时候,将会迎来一个全新的交互模式。

回归正题,我们从哪几方面来切入,既可以保证业务发展,又可以保持对未来的可能就至关重要。在当时最核心的一个改造点就是将帧上传模式改为视频流实时主体识别模式,实现我们图片搜索到视频流搜索的跨越。

2eacccd9baa07860aba034739883a10e.png

发现问题

然而需求往往来自于身边:在线下特卖会上,大家拿起特价商品但是不知道是否划算的时候,往往手足无措;隔壁团队的某位新晋奶爸同学在线下商场遛娃逛童装店的时候,面对满墙的商品,一时冲动剁手买下多件童装,然而回头用淘宝拍照逐一比价才惊呼遭遇到了价格刺客。实际上不止这些场景,在后台我们也收到了很多用户反馈,典型的比如:“在线下商场和超市逛街的时候,如何能方便快速地和线上进行同款比价”。

视频流实时搜索(后文简称:实时搜)的业务场景就可以很方便的解决用户这部分的体验问题,用户对准一个商品就可以立马获取到商品的简介信息,帮助用户决策。

6a10904b49140fde08b1ba3c613c81b3.png

业务价值

  1. 实时搜将现有app图像搜索模式做了优化,现有的帧上传模式改为视频流实时主体识别模式,实现图像搜索到视频流搜索的跨越。

  2. 实时搜在镜头上通过卡片悬浮提供给用户更多的附属信息的展示,让用户可以通过镜头感知到更多的附加信息。同时通过互动形态减少了用户看到结果的流程,实时性更强。

  3. 实时搜解决用户在商场的场景下,辅助用户增加购物决策力的能力。

  4. 实时搜的互动状态可以带给用户更好的体验,也可以给用户更多的信息提示。

  5. 实时搜辅助未来线上线下虚实结合,打造全新XR购物体系。

82c517cd4e22ecc67e28820e021ad1cc.jpeg

链路分析

对于实时视频流的问题,很多人的第一反应是:视频不就是多帧图片一起播放嘛,那直接对视频流进行抽帧图搜就可以了。然而经过测试,我们发现了以下问题:

  1. 简单抽帧会忽略帧之间的关系,造成主体重复。例如有一个物体在A、B两个间隔时间比较短的帧出现,A是近景,B是远景,简单抽帧会识别出两个不同主体,给用户带来认知混乱的同时,无法做卡片锚定、跟随。

  2. 简单抽帧进行图搜计算会向服务端进行多次网络请求,网络请求的频率和抽帧频率成正比,将给服务端造成很大的压力。

这个场景看似简单,实际上将原有的单帧图像搜索跨越到实时视频流搜索场景,背后有几个问题需要考虑:

  1. 如何解决前后帧中主体的关联关系,即一个在前后帧均出现的主体只展示一张卡片?

  2. 端侧模型大小一般小于10M,如何解决端侧算法资源瓶颈?

  3. 在源源不断的视频流输入中,如何兼顾到性能和用户体验?

d18f9713e4b73354593c54e7d340bdd4.jpeg

方案简介

对于以上3个问题,仔细分析后,我们有以下思路:

问题1:算法需要对视频内容(即前后帧关系)进行理解,对于相邻帧的同一个物体赋予唯一ID。

问题2:使用端云协同的方式解决资源瓶颈,并提升算法的准确性。

问题3:通过批量处理的方式,解决网络频繁请求问题;通过跨端动态化方案Weex 2.0解决商品卡片性能问题,并保证双端体验一致性。

基于以上思路,我们设计了一套实时视频流场景解决方案(实时搜),创新点概要如下:

  1. 端侧算法会视频流进行特征提取,对已识别的主体进行缓存,并且分配全局唯一的ID,以解决不同帧的相同主体重复的问题。

  2. 将服务端识别的结果回流到端侧算法进行修正,以解决端侧算法资源不足而识别不准确的问题,从而提升同款率

  3. 对于端侧算法识别出的主体,数据层进行缓存,并在特定的时间节点上,批量抠图上传到服务端进行搜索,获取主体信息,从而解决服务端的压力问题。

项目完成录制的第一个视频:

44c13e5a49706e7c622f79058f740010.jpeg

数据实现

f5db585ab36aca16d8fb8ad4e9571f04.png

先介绍下整体的架构图,从上到下简单介绍下:

  1. UI层:负责卡片生命周期管理和UI展示等。

  2. 数据层:负责对识别的主体数据进行缓存,并通过批量网络请求进行算法回流矫正等。

  3. 任务管理:主要对算法运算单元的生命周期进行管理:包括创建、运行、销毁、指令分发等

  4. 算法单元:主要封装了对各业务的算法的封装,并且对算法单元使用了相同的指令封装、异常处理、算法信息搜集等

  5. 底座:端侧算法是基于淘宝自研的MNN平台,并使用了UT、流量分发、网络请求等基础中间件。

以下将对数据层和UI层做重点介绍。

  数据层

  • 模型预下载

为了解决算法模型下载问题,会在App闲时进行实时搜算法模型预下载,下载完毕后方才展示业务入口。

  • 端云协同提升算法精度

本方案的算法流程分3步:

  1. 向端侧算法输入实时视频流,算法检测出主体,并赋予主体ID。

  2. 客户端向服务端请求数据,得到更精确数据。

  3. 数据回流给算法,进行算法数据矫正,获取最终数据。

  • 批量请求解决多次请求服务端问题

在计算机工程实践中,我们对于类似的问题的大杀器是“缓存+批处理”,这次也不例外,本方案中通过对主体进行抠图并批量上传的方式,来减轻服务端压力。

  • 简要流程

  1. 输入视频流给算法层,一旦识别出主体来,将返回主体的ID和位置等。

  2. 根据主体位置对视频帧进行剪切得到主体抠图,并对主体信息进行缓存,缓存期间若有相同的主体Id信息将进行更新。

  3. 通知UI层展示兜底卡片,包括简单的主体信息,如品类等。

  4. 定时将缓存的主体图批量上传服务端,进行图搜。

  5. 将图搜结果回流到算法侧,算法根据主体Id对数据进行算法矫正,并返回业务层主体的具体商品信息。

  6. 通知UI层展示商品卡片,并对卡片生命周期进行管理。

▐  UI层

  • 卡片生命周期管理

44f8aa300a962840d8497e0cf04ed827.png

由于业务上流程的考虑,一期我们将卡片分为3个阶段,未来会有更多的展现形式:

  1. 兜底卡:展示最基本的主体信息,如品类等,内容由端侧算法提供。

  2. 小卡:展示商品价格等信息,内容由服务端提供。

  3. 大卡:展示商品详情信息,内容由服务端提供。

其中,为了确保跨端体验一致性和发版效率,除了兜底卡外,其余均由 Weex 2.0跨端框架来实现。

在卡片生命周期的管理上有三个点:

  1. 卡片数据统一管理、更新,服务端请求批量处理

  2. 卡片位置定时更新,并动画进行移动,以便实现卡片跟踪效果

  3. 卡片状态定时检查,检查内容包括卡片是否过期、当前卡片比例等,进行卡片状态切换

  • 卡片防碰撞

在实现的过程中,我们发现在画面中有多个主体的情况下,卡片跟踪会导致卡片相互遮挡的现象出现,这就给后续用户的使用造成了不好的体验,为此设计了简单的卡片防碰撞的机制:

e5caa6b82a0c31ae2c8a11f1c338b6a3.png

如上图所示,每次卡片进行周期性做位置移动之前,均需要根据当前主体的位置来计算卡片的下一个位置,主要会根据两个方面来判断:

  1. 是否和其他卡片重合;

  2. 是否超出屏幕。

最终根据一定的算法逻辑,在每个周期将卡片渲染到最合适的位置。

  • 卡片渲染

为了让用户交互体验更丝滑,交互场景中我们使用了动态化卡片来渲染,目的是让卡片的渲染更加动态且易于改版。同时UI层和底层Native的逻辑隔离开,代码也易于维护。

690c5e3c59ac2d38d83292bc931cd139.jpeg

总结

实时搜是拍立淘团队对于实时视频搜索在电商领域的一次有意义的探索,设计了一套端云协同的视频流实时搜索方法,并实现了全新的用户交互体验方案。

目前实时搜产品还在打磨,未来将会融合主链路并在XR场景发力。基于这个方向我们目前已经发表多篇专利,我们给未来基于实时搜的场景取名为“元视界”(MetaSight),第一阶段会持续向着“AR+GPT”的方向发展,也是期望一切如我们所预料的那样发展。这篇文章作为“元视界”场景的技术能力介绍,期望与大家共鸣。

fc704ec7894c3297529b76ffec92f5f5.jpeg

团队介绍

我们是大淘宝技术搜索终端团队,负责手机淘宝搜索,拍立淘等核心业务的研发和技术创新,同时打造了端侧的搜索终端通用框架,提供搜索领域端到端解决方案,以平台化能力支撑了手机淘宝等多个集团电商和本地生活业务,同时我们和算法技术紧密结合,将端智能和边缘计算充分应用于我们的文本和图像搜索业务,我们研发的产品为亿级消费者提供服务,期待您的加入。
感兴趣的同学可将简历发送到 taozi.ly@taobao.com

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

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

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

相关文章

助力长城汽车数据管道平台连接“数据孤岛”,加强数据一元化,Apache DolphinScheduler 的角色定位...

点击蓝字 关注我们 讲师简介 长城汽车-IDC-数据中台部-刘永飞 高级工程师 我是长城汽车 IDC-数据中台部的刘永飞,给大家分享一下我们自研的一个数据同步工具平台,以及在使用这个工具过程中遇到的问题。今天的分享主要有四个部分: 1. 我们自研…

语法——时态总结

一般现在时 1.概念:经常、反复发生的动作或行为及现在的某种状况。 2.基本结构:①is/am/are;②do/does否定形式:①am/is/are not;②此时态的谓语动词若为行为动词,则在其前加don‘t,如主语为第三人称单数&#xff0…

软考A计划-系统架构师-论文应试技巧

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Collection接口详细介绍(上)

前言: 本篇文章主要讲解Java中的Collection接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601…

利用神经网络重建三维数字孪生

利用神经网络重建三维数字孪生 从点云重建光滑表面是创建真实世界对象和场景的数字孪生的基本步骤。 表面重建算法出现在各种应用中,例如工业模拟、视频游戏开发、建筑设计、医学成像和机器人技术。 神经核表面重建 (NKSR) 是新的 NVIDIA 算法,用于从大…

Java学习路线一条龙

作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Java 要掌握的技术点如下: JavaSE(Java Standard Edition,Java 基础)计算…

常用命令之Proxmox qm命令

一、Proxmox简介 Proxmox是一款基于Debian Linux的开源虚拟化平台,它允许用户在单个物理主机上运行多个虚拟机,并提供了许多高级功能,如高可用性、备份和恢复、集群管理等。Proxmox支持多种虚拟化技术,包括KVM和LXC,而…

【RISC_V课程笔记】导论

目标 完成以cpu的设计,三级流水线结构。取指(if), 译码(id), 执行(ex)cpu中断系统的设计以cpu为核心的SOC设计,完成rom,ram,time的外设的设计用uvm对cpu进行验证(system verilog) 理论 数字逻辑电路 数字信号:用二进制表示的信号&#xf…

一起看 I/O | 隆重推出 AI 驱动的编码助手 Studio Bot

作者 / Android Studio 高级产品经理 Adarsh Fernando 我们在 2013 年 Google I/O 大会上首次宣布推出 Android Studio,并承诺为 Android 应用开发者提供一流的集成开发环境 (IDE)。10 年后的今天,我们对提高开发者工作效率的承诺仍然推动着团队开发新的…

深入理解深度学习——注意力机制(Attention Mechanism):多头注意力(Multi-head Attention)

分类目录:《深入理解深度学习》总目录 相关文章: 注意力机制(AttentionMechanism):基础知识 注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归 注意力机制&#…

【LeetCode热题100】打卡第20天:合并区间不同路径

文章目录 【LeetCode热题100】打卡第20天:合并区间&不同路径⛅前言 合并区间🔒题目🔑题解 不同路径🔒题目🔑题解 【LeetCode热题100】打卡第20天:合并区间&不同路径 ⛅前言 大家好,我是…

MySQL中的行级锁

行级锁的类型主要有三类: Record Lock,记录锁,也就是仅仅把一条记录锁上;Gap Lock,间隙锁,锁定一个范围,但是不包含记录本身,只存在于可重复读隔离级别,目的是为了解决可…

前端封装一个移动端(已支持PC)滚动的组件

安装 npm install better-scroll/core --save引入 import BScroll from better-scroll/core直接上代码 Scroll.vue <template><div ref"rootRef"><slot></slot></div> </template><script> import useScroll from ./u…

配置虚拟机(VMware )网络

1、查询 IP ip addr # 命令和ifconfig类似&#xff0c;但前者功能更强大&#xff0c;并旨在取代后者。可以看到两个网卡 lo和ens33&#xff08;lo是本地网卡&#xff09; 2、配置静态IP地址和修改主机名(网络配置使用随机分配免配置) 使用vi编辑器打开ens33网络的配置文件&am…

Windows系统配置Python环境(Anaconda篇)

Windows系统配置Python环境&#xff08;Anaconda篇&#xff09; 一、下载 根据自己电脑系统下载对应的安装包 官方下载地址&#xff1a;https://www.anaconda.com/products/distribution 清华镜像网站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ …

SpringBoot——动态数据源(多数据源自动切换)

前言 日常的业务开发项目中只会配置一套数据源&#xff0c;如果需要获取其他系统的数据往往是通过调用接口&#xff0c; 或者是通过第三方工具比如kettle将数据同步到自己的数据库中进行访问。 但是也会有需要在项目中引用多数据源的场景。比如如下场景&#xff1a; 自研数据…

更有效的协同程序【插件:More Effective Coroutines】

插件地址&#xff1a;传送门 1、命名空间 using System.Collections.Generic; using MEC; 2、与传统的协程相比 传统&#xff1a;StartCoroutine(_CheckForWin()); 被RunCoroutine取代。必须选择执行循环进程&#xff0c;默认为“Segment.Update”。 using System.Coll…

华为OD机试真题 JavaScript 实现【最优资源分配】【2023Q1 200分】

一、题目描述 某块业务芯片最小容量单位为 1.25G&#xff0c;总容量为 M*1.25G&#xff0c;对该芯片资源编号为 1&#xff0c;2&#xff0c;… M。 该芯片支持 3 种不同的配置&#xff0c;分别为 A、B、C. 配置 A: 占用容量为 1.25 * 1 1.25G配置 B: 占用容量为 1.25* 2 2…

一文了解智能驾驶架构平台ROS2和自适应AUTOSAR之间的区别

公众号致力于点云处理&#xff0c;SLAM&#xff0c;三维视觉&#xff0c;高精地图等领域相关内容的干货分享&#xff0c;欢迎各位加入&#xff0c;有兴趣的可联系dianyunpcl163.com。未经作者允许请勿转载&#xff0c;欢迎各位同学积极分享和交流。 背景介绍 在汽车行业&#x…

有人问高考能改变命运不,老大爷回答是不能

昨天看到一段小视频&#xff0c;问高考能改变命运不&#xff0c;老大爷回答是不能。 我遂想起写写这个话题。 &#xff08;1&#xff09; 成功者的要素到底是什么&#xff1f; 我们中国人经常用&#xff1a;成者为王败者为寇&#xff0c;这句话来形容成功者。 我们见过很多成功…