4K@60智能云台从零到一

Wesley13
• 阅读 585

4K@60智能云台从零到一

正文字数:6006  阅读时长:9分钟

近两年以来,短视频受到越来越多用户的喜爱和追捧,但短视频的制作成本却扼杀了大量内容创作者的热情和动力。LiveVideoStackCon2020北京站邀请到了摩象科技技术总监刘智美来做分享,他将从硬件选择、智能软件服务以及用户体验的角度分享其云台相机产品设计过程中遇到的问题。

文 / 刘智美

整理 / LiveVideoStack

今天很荣幸能给大家分享从去年开始到今年,我们在研发一款新产品碰到的一些问题。希望作为LiveVideoStackCon2020北京站大会唯一跟硬件强相关的一个话题,能够给大家一些不同的认知。

4K@60智能云台从零到一

首先介绍一下,我们公司是摩象科技,一个技术驱动的小米生态链公司,从我们的产品能看出来我们公司是一家基于视觉智能的消费电子生产和服务厂商。今天要跟大家分享的是“云台相机”的研发故事。

4K@60智能云台从零到一

我们今天的话题大概从三个方面开始给大家分享。首先,我们是怎么会想到要做这个产品;其次,我们在研发的过程当中遇到了什么问题,是怎么解决的;以及未来我们对这个产品,和这个领域有哪些可行路径的思考。

1

初    心

我们的初心其实很简单,作为一个普通人,我们通常对于拍摄和制作视频是没有什么感觉和方法的。但我们看到很多导演或者网络上的UP主拍的视频非常好看,甚至抖音上很多业余的博主拍的视频也很好看;那作为一个普通人,我们要怎么拍、怎么做出一个好看的视频?这就是我们最初的出发点。

4K@60智能云台从零到一

于是,我们一群理工男分解出了视频三要素:脚本、拍摄和剪辑

脚本就是通常讲的创意,大部分人对创意是没有概念的;不过我们从目的出发,会发现普通人拍视频或者做视频的目的通常只有两个:一是要记录,二是要分享。记录是为了把生活里的美好时光记录起来,将来回忆看的,这种其实不需要创意;短视频火起来之后,大家更愿意把自己的生活一点点分享出去,很多时候也不那么讲究创意了;特别是在抖音火起来之后,有了拍同款功能,就更不需要费脑子创意了,人家怎么拍的我就跟着怎么拍就行了。

后来我们总结后,发现创意反倒不是大问题,拍摄和剪辑才是真正的问题。那在拍摄方面,专业人士就会有各种专业的拍摄工具;而普通人通常只有手机,但手机有很多问题,比如不防抖、像素不够等等问题,导致素材质量不够好。最后,最大的问题其实还是剪辑,剪辑的首要问题就是面对海量素材的选片,然后就是后续的调色、滤镜、转场、字幕,音乐等等,对普通人来说这个实在是太难了。我们就希望有一套逻辑,有一套公式或者一套方法能够解决它。

于是我们立了几个flag:

分辨率与帧率

我们希望能有4k的分辨率,能够让画质更高,我们希望能有120帧的帧率,可以拍慢动作。

FOV120

FOV就是视场角,也就是我们大家通常认知的广角、大广角、超大广角这种概念。我们普通的手机拍出来的视场角一般都是80~90度之间。一般超过90度我们就可以叫广角,或大广角了,我们希望可以做到FOV120。

防抖

抖其实有两种表现,一种表现是原因,因为抖导致画面是糊的;一种表现是结果,也就是画面在晃动。我们希望我们的产品能防抖,让普通人拍出来的画面不抖,普通人拍出来的画面也不糊。它是清晰的画面,同时它是稳定的画面。

4K@60智能云台从零到一

便携

便携的考虑是一定要轻量,小巧。上图中这个设备,差不多就是我们要做的——一个小巧的稳定平台+单反。

接下来,我们又立了几个flag:

自动跟踪

我们拿手机给家人、给朋友,或者是给孩子拍照片的时候,我们通常都是需要摆拍,是因为在实际拍摄的时候,人容易跑出画面,或者镜头还没调整好就拍了,导致我们错过很多精彩的瞬间,这也是我们经常使用快门的原因之一。所以我们希望有能够自动跟踪的功能。

智能剪辑

一个10分钟的视频,我可能只要其中1分钟就够了,然后把其他的9分钟剪掉,这叫剪辑。而剪的过程当中,如果10分钟里面有两段想要的,分别在中间不同的位置,那么我们就需要把这两段它剪出来重新拼接成一个新视频。这就跟我们人脑处理信息是一样的,我们很多时候回忆过往的美好画面时,我们往往也只能回忆一些片段,而不是全部。我们在想怎么能去还原这个东西,或者说模仿这种行为,让我们把更值得纪念的东西留下来。我们希望把剪辑变成一个自动化的过程。

2

上  下  求  索

作为技术驱动型的创业团队,我们从去年就开始探索。

4K@60智能云台从零到一

选型

选型不是说我们选某个软件,也不是选某个什么技术框架,而是让我们去选芯片。

我们需要用到比较好的图像处理能力,希望它有4k和AI的能力,然后我们还希望它能有比较好的计算性能。我们选型的时候看了很多国内外的芯片,像国外的高通、TI还有安霸,国内的海思和君正。我们选型的时候有两个主要原因,一个是我们很熟悉海思,另外海思的性价比很高,最终我们在海思的芯片里面挑了一款叫3519A的芯片。

3519A有两个ARM Cortex的核,以及神经网络计算单元NPU(他们叫NNIE),还会有个DSP,有2G的内存支持,这个配置肯定是够我们用了。同时,这款芯片还有一个很厉害的ISP(图像处理子系统),能够支持H.264和H.265的硬编/解码,非常棒。

方案

定好芯片之后,我们要来做方案了。

方案是指我们选定某个芯片之后,芯片得跑在什么样的板子上,板子上得有些什么元器件、什么样的摄像头、什么样的云台,使用什么样的总线、结构等等。

4K@60智能云台从零到一

海思也给了我们推荐方案,3519A的说明书上就明确的告诉我们,可以做运动相机,也可以做IP Camera,我们选择了用IP Camera的方案进行改造。最终我们的板子就长这样,成品之后就相当于iPhone7的一半大小,这就是我们微型化的结果,这就满足了我们前面提到的便携的要求。

4K@60智能云台从零到一

上图是系统的软件结构,这个跟前面讲的硬件结构其实能对应上,两块主内存,一个DSP,一个NPU和两个Core,然后上面是一个云台的控制器,边上是一个索尼的摄像头Sensor,再加上屏幕和触摸屏,万象键、SD卡、以及连手机预览的USB等等。

最开始的时候我们只在CPU上跑一个Linux系统,然后我们发现一些问题,比如我们从Sensor拿数据进来之后,前期要做畸变校正,然后还要到这边来做AI处理,CPU占用非常严重。最开始单系统在常规运行的时候,CPU基本就是80%以上的负荷。

后来海思的人说,我们在说明书里面专门有DSP来做增强式的图像处理的,你们要用起来。后来我们就把Linux拆成两个系统,每个Core上跑一个系统。后来发现云台需要独立系统,DSP也需要独立,再后来就跑成了现在这个样子。现在的架构里面同时跑了4个系统,还不算MCU,复杂度非常高。我们要切分一下看的话,会发现右边主要做基础图像处理,左边做智能图像处理。

当然,我们把系统分开,还有一个原因是我们希望把它变得更快。原来跑Linux的时候开机速度非常慢,Linux启动要做很多初始化,开机通常要8~10秒钟。但LiteOS其实是一个RTOS,是一个实时操作系统,它的开机非常快。按我们原来做门铃和猫眼产品的经验,RTOS系统开机300毫秒以内就起来了,用户基本没有感知。用它来做右边的基础图像处理的话有一个很大的优势,一开机就能看到画面,因为Sensor是直接往这边输出的。

4K@60智能云台从零到一

广角

我们刚才讲了正常的Camera,也就摄像机的视场角有8090度。我们人眼其实也差不多,有效的视场角大概90度左右。我们flag立的是FOV120,最终选型选的索尼的MX378,这款摄像头模组是早几年的主流机的摄像头模组,标称是120度的视场角。这两年的摄像头模组开始是MX586,MX686,我记得最新的苹果12是MX686。还有小米的主流机旗舰机和华为的旗舰机基本上都是MX686。MX686有个好处是他们的视场角会更大,但不能盲目选大,因为实际上标称跟我们实际拍出来的视场角还是有差异的。标称116,标称120的摄像头,实际拍出来的也差不多8090度的视场角。

这个涉及到我们的成像原理,摄像头通常是有块感光板,在镜头的最底下,倒数第二层第三层的样子,有一块滤光板,一块感光板,后面是感光元器件,最后才是成像系统。在感光板上,感知到的最大的分辨率多大,就是他的最大的分辨率。我们选择这一款模组的最大分辨率是4000×3000的,也就是4k,而FOV就是指当输出4k图像的时候,才有120度的视场角。但实际的成像是从4k画面里切出来的,比如我们要1080p的图像,它是从4000×3000的4k的画质中间切一块出来;如果你要2k的话,也是一样道理,它从中间去切一块;所以,从一个标称FOV120,4k的画面中切出来一块,那切下来的这块图像的视场角就相应变小了。如果要4k怎么办?通常很难,因为涉及到畸变的问题,下面会讲到。

畸变

摄像头成像的时候,是把光从镜头外面打到感光片上,光线穿过镜头打到感光片上的时候,其实会发生扭曲,中间的光线扭曲很小,四边的光线扭曲会比较大,导致在我们成像器上出来的画面是变形的,变成一个不规则的矩形,这就是畸变。畸变通常又有两种,要么是桶形的,要么就枕形的。桶形的就是它四边鼓出来,好像一个人吃胖了,肚子大了。枕形的就是它的4个角凸出来,好像蜘蛛网一样。

4K@60智能云台从零到一

拍摄结果(如图)其实是个畸形。这是我们摄像头最原始拍出来的图。如果我们不拍这种方格格图的话,其实也不太看的出来。

如果我们拍1080p,这中间的部分肯定不会有问题。但如果我们拍4k,明显这个画面就没法看了。如果再细心一点,其实会发现我们这个畸变更厉害,它不是枕形的,也不是桶形的,它是枕形加桶型的。

在相机行业里面,畸变是非常常见的一个情况,所以畸变函 数老早就有了,如果是比较单纯的畸变,用一个畸变函数校正一下,立马就可以得到一张正常的图像。

4K@60智能云台从零到一

但我们碰到的畸变不是一个简单的枕形或桶型,而是一个复合型的,所以我们自己做了一个自研的算法来解决这个问题。畸变校正的原理其实就是一个坐标系转换,然后在进行坐标系转换的时候,通过差值算法把对应像素上的颜色值算出来;也就是说你只要把它坐标值算对了,然后把它的颜色值找到了,往那个地方一填,这个畸变也就校正了。

再说到数学上,它其实一个是个矩阵计算。为了解决这个问题,我们最终找模组厂商要了一个他们的坐标系转换的参数。这个参数其实就是告诉我们,光从真实物理世界,打到我们成像器上的时候,那个位置会是什么坐标。它会告诉我们这两个位置,但不会告诉我们这两个位置的对应关系。所以我们要做的事情是先把这两个位置之间的变换公式提出来,也就是把转换矩阵给提出来。这样,当我们拍到了一张畸变的图像,用这个转换矩阵和畸变的图像进行一次矩阵运算,最终得到的就是一个真实的图像了。

4k 60帧

拿到这个转换矩阵之后,我们在PC上跑了一个数据,大概100毫秒能转换一张4k的图形,100毫秒也就意味着帧率只有10FPS,这放在视频领域里,10FPS的视频谁爱看呢?

发现计算性能根本达不到之后,我们就想到了DSP,但DSP的片上内存只有256KB,要做一张4k的图片的转换,根本就跑不起来。后来我们想了一个办法,把矩阵拆成了n个很小的100×100的小矩阵。做畸变校正的时候,把我们的图像根据参考矩阵的大小切成一小块一小块,通过DSP进行矩阵计算。DSP一片片的从主内存搬到片上内存进行运算之后,再搬回去主内存,再切第二块,再去运算之后再搬回去,就这么循环。结果是我们处理一张4k图片的时间是大概耗时12毫秒。简单计算一下,60帧绰绰有余了,这就是我们4k 60帧的由来。

自动跟踪

我们认为拍视频的时候,我们更关注里面的人物,会希望TA总是在视频中的C位。

4K@60智能云台从零到一

比如说学校运动会,我去看我小孩参加运动会的时候,我会希望镜头跟着TA走的,而我什么也不用干。TA围着操场跑的时候,这个摄像头也会跟着TA转动,而我不用动。这就是自动跟踪,自动跟踪有个基本前提,就是我们要先把目标识别出来,这就要用到AI算法了。我们最终选用了SSD模型,这是号称物体分类最快的两个模型之一,另一个是YOLO。

4K@60智能云台从零到一

我们看一下上图会发现这是一个比较复杂的一个计算,我们其实是要提出来每一帧里我们所关注的物体。比如上图视频里有个小女生,她在视频里运动的时候,实际上每一帧她的位置我们都会计算出来。

前面提到3519A上有个NPU,是海思平台给我们提供的一个AI芯片,里面跑了一些基本的网络模型,我们把SSD算法移植过去,最终就能把每一帧里面我们关心的物体,如:人、小猫、小狗和小孩都找出来,并标定TA们的位置。

再之后我们的主Core会根据当前图像和上一张图像计算出目标位移偏移量,同时会把这结果通过我们云台控制器,告诉摄像头,你要朝哪个方向走,你的加速度和角速度是多少等等;云台控制器就会驱动马达转向,并且是符合我们速度要求的转向,跟上我们的目标,确保目标总是C位。这样一来,如果拍摄的时候出现了一些精彩的瞬间,我们就都能抓住了。通常单反是做不到这一点的,手机也做不到。

4K@60智能云台从零到一

智能剪辑

智能剪辑最大的问题是我要知道我拍到了什么。这个可能是现在做视频AI算法,做CV的很多人都想做的一件事情;我们也在尝试认知相机拍到的东西。

我们选用了PeleeNet模型来做分类,也是号称最快的实时物体分类算法。这个算法能认识1000+种物体,它的作用其实要把每一帧里面的出现的它认识的物体全标下来。这会产生一堆的帧数据,这些数据我们会把它存起来,也就是通过这些物体的标签,对视频做了一个索引。

把视频标签化之后,下一步要做的就是剪辑,前面我们做好了每一帧的索引,那么在我去真正要剪辑他的时候,需要有一个聚类的过程。聚类的过程其实就是把很多琐碎的细的标签往一个场景上聚合。

4K@60智能云台从零到一

最终会得出一系列的场景标签,App会拿这些标签去云端询问一下:有没有符合这些场景的模板?如果有,你找几个给我,我来剪一剪试一下。

云端的目标是我们跟一些抖音达人和B站UP主合作,他们会帮我们做一些主题模板,比如:亲子、美食、聚餐、生日会和旅行的模板,或者海边、草原等的模板。他们通常会用他们的经验去做,比如在一个青春校园的模板里面,用什么样的音乐更贴切,用什么样的调色更有质感,加上什么样的转场会比较打动人等等。我们会把这个模板放到云端,给它加上一个主题,比如青春校园类,当App来查询模板时,用App聚类出来的标签跟云端的主题标签进行匹配就行了。

4K@60智能云台从零到一

在实际剪辑的时候,App还要通过场景标签反向查找,把标签对应的那些片段给抽出来,最终再去合成,这样就能得到一个我们认为剪出来还不错的片子。

当然,实际效果怎样,也欢迎大家去买我们产品验证一下。

3

未来的思考

4K@60智能云台从零到一

在今天之前,我们产品其实已经上市了有半年了。经过了一些用户的验证,包括很多用户的反馈,我们也做了更进一步的思考。

更高像素

因为早段时间雷总说要做一亿像素手机。我们在想是不是也可以做更高的像素。

帧率的问题

其实我们120帧已经能做那些慢动作的拍摄,但对一些更极限的玩家来讲,他们可能希望有更高的帧率,比如240帧。

大底和长焦的问题

大底的问题,比如我们拍星空,没有大底就拍不出来,因为他要足够的进光量。

续航

我们现在能拍两小时。我们觉得如果作为旅行拍摄,或者说作为一个短片的素材的拍摄,可能两小时不够,还要更长。

物体跟踪问题

刚才我们还提到一个关于物体跟踪的问题,物体跟踪里面我们现在做了人,小狗和小猫,但实际上我们可能想跟更多东西。我们希望能跟踪更多的动物,在野外拍的时候,能跟踪天鹅。

语义生成

我们也知道最近其实很多Paper都在讲语义生成,诸如AI写诗、AI写文章等。现在也有比较多的PR出来,大家也看到了,但实际应用可能还有差距。包括早段时间,微软还PR了一个AI画画的产品。我们其实是希望未来在这一块,我们能够让AI去创作,去剪辑短视频,当然这里面会有更多更细节的探讨。

LiveVideoStackCon 2021 ShangHai

我们准备好全新的内容

在上海欢迎您的到来

4K@60智能云台从零到一

LiveVideoStackCon 2021 上海站

北京时间:2021年4月16日-4月17日

点击 【阅读原文】 了解大会详情

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这