Facebook 开源图像处理库 Spectrum,优化移动端图像生成
点上方蓝字计算机视觉联盟获取更多干货
在右上方 ··· 设为星标 ★,与你不见不散
随着移动照相硬件的迅速发展,我们的手机捕捉和存储的文件越来越大。上传这些大文件会消耗移动数据;它们可能需要很长时间才能加载;有时,文件根本无法加载。为了使上传过程更加高效,我们开发了一个适用于 Android 和 iOS 的图像处理库Spectrum。借助 Spectrum,我们提高了应用中大规模图像上传的可靠性和质量。我们最近在droidcon SF大会上将 Spectrum 作为一个开源项目进行了展示,现在,我们在 GitHub 上正式发布Spectrum 1.0.0。
通向更好的移动图像生成之路
第一步在上传图像之前开始。通过转码减少文件大小,可以快速减少数据消耗,提高上传可靠性。这是一个简单的解决方案,但是,要在保证质量的同时减小尺寸需要深入理解各种处理步骤和图像格式。
使用平台提供的图像处理 API 是一种可能的解决方案。但是,大量的移动平台和不断发展的 API 会产生不同的输出。为了服务于广大开发人员,平台隐藏了我们为优化输出而希望控制的细节和参数。通常,常见任务(如 EXIF 元数据解释)会导致代码重复,进而妨碍维护和全局改进。使用最新的压缩库,如 MozJpeg,需要用 C/C++ 编写的原生代码。我们想让开发人员更容易发送较小的文件,同时保持对图像质量的控制,而不需要编写自定义的或难以维护的解决方案。
现代智能手机捕捉的图像分辨率很高,大文件使得某些移动网络上的上传不可靠。以全分辨率发送通常是一种浪费,因为内容传递网络(CDN)无论如何都会调整接收方的图像大小。
调整发送方设备上的图像大小可以减少发送图像所需的带宽,最小化整个管道的负载开销,改善端到端体验。剩下的挑战是如何在保持图像质量的同时受益于较小的文件大小。
Spectrum:构建图像处理基础设施
对于移动开发人员来说,Spectrum 使常见的图像操作变得简单、高效、一致。它的声明性 API 允许开发人员关注所需的输出属性,而不是单个步骤。其次,这使得 Spectrum 可以透明地选择最优的方式来满足转码请求。例如,如果有机会,Spectrum 会优先使用无损操作对 JPEG 图像进行裁剪和旋转。另一个例子是调整大小,Spectrum 会优化解码器采样和像素级完美调整(pixel-perfect resizing)之间的相互作用。
“菜谱(Recipes)”帮助开发人员为每个请求选择最佳的执行顺序。这些是由插件提供的。例如,JPEG 插件将提供 JPEG 图像无损裁剪和旋转菜谱。所有菜谱都在内部聚合并排序,这样,无损且高效的菜谱就位于顶部。对于每个请求,Spectrum 将迭代列表并执行第一个匹配(因此是最有效)的菜谱。最后一个方法是一个通用菜谱,它可以通过解码和编码图像来处理任何请求。
Spectrum 的内核是用 C++ 编写的,可以在 Android 和 iOS 应用之间共享,这使得我们的输出更加一致。它提供的Java和Objective-C API 只是对这个内核的简单包装,目的是简化开发。此外,C++ 内核提供了对内存分配的更多控制,通常会使计算密集型操作具有更高的执行速度。
与原生库(如MozJpeg)的集成使得 Spectrum 可以控制通用平台 API 之外的编码参数。它使得开发人员可以利用计算密集型编码,这需要更多的处理时间,但大大减少了文件大小。例如栅格量化和扫描优化。这在移动端是一个重要的权衡。在移动端,缓慢的网络连接会影响上传体验。它还使我们能够控制更高级的参数,如色度抽样,利用边缘锐化和插图提高图像质量。一致的 API 使得不是图像专家的开发人员也能够利用这些特性。
该库的内核是用 C++ 实现的。它将传入请求与一组可以实现图像操作的“菜谱”进行匹配。这里会优先考虑更高效的无损操作。插件提供了对图像格式和其他菜谱的支持。
我们希望 Spectrum 能像帮助 Facebook 实现更好的图像生成体验一样,让开发者受益。在我们的应用中,Spectrum 提高了整个应用程序大规模图像上传的可靠性和质量。与基线编码器相比,与 Mozilla JPEG 的默认集成使得上传文件的大小减少了 15%。我们很希望看到社区如何使用Spectrum 1.0.0库来改善应用程序的照片体验。
英文原文:Facebook open-sources Spectrum 1.0.0 for better mobile image production
END
声明:本文来源于网络,【InfoQ】
如有侵权,联系删除
加群交流
关注计算机视觉与人工智能技术,欢迎加入CV联盟群
扫描添加CV联盟微信拉你进群,备注:CV联盟
热文荐读
2018年12月精选文章目录一览
亲身经历2019年校招8个大厂心得体会,纯干货分享(大疆、百度...)
重磅!图森王乃岩团队最新工作—TridentNet:处理目标检测中尺度变化新思路
GANs最新综述论文: 生成式对抗网络及其变种如何有用【附pdf下载】
算法岗百里挑一热爆了,全球AI大厂薪酬大起底
史上最全!计算机科学领域顶会最佳论文大合集:微软研究院最多,清华排24MIT的周博磊博士如何解释深度学习模型(附PPT)
【资源下载】512页IBM沃森研究员Charu最新2018著作《神经网络与深度学习》(附下载链接)
人工智能相关领域的国际顶尖会议介绍
Facebook 开源图像处理库 Spectrum,优化移动端图像生成相关推荐
- Facebook开源图像处理库Spectrum,优化移动端图像生成
随着移动照相硬件的迅速发展,我们的手机捕捉和存储的文件越来越大.上传这些大文件会消耗移动数据:它们可能需要很长时间才能加载:有时,文件根本无法加载.为了使上传过程更加高效,我们开发了一个适用于Andr ...
- 漫步Facebook开源C++库Folly之string类设计
就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. AD:51CTO云计算架构师峰会 抢票进行中! 这里 ...
- 字节跳动成立抖音集团或在香港上市;微信公众号上线“快捷私信”功能;Facebook开源挑战GPT-3的语言模型|极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- 拯救万千学子于水深火热之中!Facebook开源无梯度优化工具
乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 机器学习啥最苦?十有八九找参数! 不少研究生,都被卡在这个环节上,久久不能毕业. 现在,圣诞节前,有了一个好消息! Facebook宣布,开 ...
- 继Facebook开源PyTorch3D后,谷歌开源TensorFlow 3D场景理解库
来源:机器之心本文约2000字,建议阅读5分钟谷歌于近日开源了一个基于 TF 框架的高度模块化和高效处理库 TensorFlow 3D. 继 2020 年初 Facebook 开源基于 PyTorch ...
- 【PySlowFast】Facebook开源算法代码库PySlowFast,轻松复现前沿视频理解模型
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 在近些年的视频理解研究中,Facebook AI Research 贡献了许多精彩 ...
- Facebook开源算法代码库,轻松复现前沿视频理解模型
在近些年的视频理解研究中,Facebook AI Research 贡献了许多精彩的工作.近日,FAIR视频团队在 ICCV 相关研讨会上开源了视频识别检测代码库 PySlowFast,并同时发布了预 ...
- Facebook开源算法代码库PySlowFast,轻松复现前沿视频理解模型
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自机器之心. 在近些年的视频理解研究中,Facebook AI Research 贡献了许多精彩的工作.近日,FAIR视频团队在 ICCV 相关 ...
- 继 Facebook 开源 PyTorch3D 后,谷歌开源 TensorFlow 3D 场景理解库
转自:机器之心 [导语]:继 2020 年初 Facebook 开源基于 PyTorch 的 3D 计算机视觉库 PyTorch3D 之后,谷歌也于近日开源了一个基于 TF 框架的高度模块化和高效处理 ...
最新文章
- LibreOJ 6279 数列分块入门 3(分块+排序)
- 超级计算机性能调查,调查:多数超级计算机使用Linux操作系统
- select计数语句_从零开始学 MySQL SELECT 语句详解
- 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
- ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小
- day31 java的多线程(1)
- java getcause_java - 如果在异常上调用getCause(),为什么还要处理Throwable - 堆栈内存溢出...
- 联通突然从4g变成3g了_老人机真不能用了?!联通逐渐关闭2G、3G信号服务
- c语言学习视频(学c语言看谁的视频)
- Lottie 动画AE+Bodymovin导出的JSON文件解读
- 实用win7桌面小工具
- 电脑wps可以语音录入吗_WPS怎么样?语音速记助你1分钟输入400字
- 笔记本如何正确安装对应显卡驱动
- 如何把win7官方补丁集成到win7iso镜像中
- Fortran 读取gps广播星历和精密星历
- 期权杠杆比率如何计算?
- excel2013 最大行数列数
- java分割图片为九宫格
- 2014年优秀动画片推荐:马来西亚动画片《Ribbit》
- Centos7- wget未找到命令,there are no enabled repos 解决办法
热门文章
- ssd内部是多个flash一起操作_广告设计中Flash图形动画的应用
- WP博客ajax,WordPress文章点击统计ajax版,兼容wp super cache缓存代码及插件
- ibiliplayer是什么_Bilibili视频播放页面接口整理(不定期更新)
- 高性能有限元计算服务器,结构有限元计算服务器配置
- 华为鸿蒙搭载哪些手机,华为鸿蒙系统支持哪些手机 可以装华为鸿蒙系统手机...
- html小球跳跃技术原理,HTML5在文本上跳跃的小球
- linux ora-39002,impdp ORA-39002,ORA-39166,ORA-39164的问题及解决
- mysql驱动rpm和jar_mysql5.7.11对应的JDBC驱动是哪个版本
- 小记一次考题:生成包含大写字母、小写字母、数字的8位密码
- 微信 小程序布局 scroll-view