论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
移动端开发
›
IOS
›
Core Image:iOS图像处理技术追踪
Core Image:iOS图像处理技术追踪
梦应逍遥
金牌会员
|
2024-6-15 00:22:22
|
显示全部楼层
|
阅读模式
楼主
主题
513
|
帖子
513
|
积分
1539
图四:断点调试时Core Image对每帧的处理流程
基于Metal构建Core Image Kernel
==============================
利用CI Kernel有诸多上风,包括上文提及的收缩runtime编译时间、高性能语言特性(如gather-reads、group-writes、半精度浮点数)、高效开发体验(如缩进查抄、缩进高光)。基于Metal构建CI Kernel有5步流程,会在下文进行逐一介绍。
▐
在项目中增加自定义构建规则
苹果官方保举在项目target中增加两项自定义构建规则。第一个构建规则针对以“.ci.metal”为后缀名的文件。该构建规则会创建一个以“.ci.air”为后缀名的二进制输出文件。
图五:针对“*.ci.metal”文件的构建规则
第二个构建规则针对以“.ci.air”为后缀名的文件(上一个构建规则的输出结果)。该构建规则会在app的资源文件夹内创建以“.ci.metallib”为后缀名的输出文件。
图六:针对“*.ci.air”文件的构建规则
▐
在项目中增加.ci.metal资源
在Xcode提供的创建面板中选择Metal File即可。开发者对Metal File进行定名时需要以“.ci”作为后缀名,这样项目中新天生的文件会以“.ci.metal”作为后缀名。
▐
编写Metal Kernel
便携Metal Kernel需要include CoreImage.h头文件,用来利用Metal和Core Image提供的各种类。官方提供的范例编写了一个CIColorKernel,输入参数为coreimage::samle_t对象(表示输入图片的一个像素)、time和coreimage::destination对象,返回float4像素。
图七:苹果官方提供的代码范例:Metal Kernel编写
苹果官方为开发者提供了描述CI Kernel中Metal Shader语言的文档,详情见「 Metal Shading Language for Core Image Kernels」① 。
▐
加载Kernel并应用于新图像(基于Swift)
Kernel会被CI滤镜的子类利用。苹果官方保举开发者在实例化滤镜的CIKernel对象时利用静态属性(static property),这种环境下加载metallib资源的工作仅会实行一次(在首次需要时)。CI滤镜的子类也必须重载输出图片的属性,Kernel将在getter中进行图像处理并创建新图像。
图八:苹果官方提供的代码范例:Kernel加载与利用
Core Image的Debug支持
======================
苹果官方在WWDC20详细介绍了Debug特性:CI_PRINT_TREE。
▐
什么是CI_PRINT_TREE
CI_PRINT_TREE的底子框架与Xcode提供的Core Image Quick Look支持雷同。Core Image Quick Look为开发者提供了快捷可视化的Core Image图片(详见上文图三),而CI_PRINT_TREE支持几种不同的模式和选项用来查看Core Image怎样优化和渲染图像。
▐
怎样启用CI_PRINT_TREE
苹果官方提供了CI_PRINT_TREE的两种启动方式。最常用的方法是编辑Xcode target scheme,在Arugments窗体下的环境变量列表中参加CI_PRINT_TREE并设置值。另一种方法是在Terminal.app中通过下令行启动CI_PRINT_TREE(需要在实行应用步伐前设定)。
图九:启用CI_PRINT_TREE的两种方式
▐
怎样控制CI_PRINT_TREE
CI_PRINT_TREE的字符串格式为“ ”
**graph type:**表示Core Image render的多少stage,包括type-1初始图像(有助于查看被利用的色彩空间)、type-2优化后的图像(有助于查看core image对render的优化结果)、type-4级联图像(有助于查看各stage怎样级联于GPU步伐,以便了解render需要多少中间缓存)以及type-7(输出图像type1、2和4)。
图十:苹果官方对graph type四个stage的描述
**output type:**输出格式可以是pdf或png。在macOS上trees会被存储在临时项目文件夹,在iOS上trees会被存储在文档(Documents)目次下。假如output type没有确定,core image会把tree以紧凑文本格式输出在标准输出(stdout)。通过设置CI_LOG_FILE=“oslog”,文本也可以前往Console.app(在iOS开发中更为方便)。
**options:**对于CI_PRINT_TREE,开发者可以设定额外的选项。如通过设定context==name来限定输出(仅输出名字雷同的context),或是通过设定frame-n来框定详细输出context的哪一帧。更多option及详情请见图十一。设定option对debug能提供很大帮助,但也需谨慎利用,由于生产这些文件需要额外的时间和内存。
图十一:苹果官方提供的option
图十二:type设定为7时tmp文件夹下的文件
▐
怎样获得CI_PRINT_TREE文件
在macOS中,开发者只需要进入“/tmp”文件夹就能找到天生的CI_PRINT_TREE文件。需要注意的是沙盒应用会利用特有的临时存储文件夹。
在iOS中,开发者需要将Custom iOS Target Properties中的“Application supports iTunes file sharing”项设为YES(图十三)。这样天生的CI_PRINT_TREE文件可以在连接中的iOS设备上被找到并拖拽至macOS存储中。
图十三:Custom iOS Target Properties中进行设置
▐
怎样解释CI_PRINT_TREE文件
读CI_PRINT_TREE时,需要遵循以下规则:
输入在底层,输出在顶层
绿色节点代表卷曲内核(warp kernel),赤色节点代表颜色内核(color kernel)
图十四:绿色节点与赤色节点示例
在树的初始位置(initial tree)很容易找到颜色搭配节点(colormatch nodes),内里记载了搭配前后的色彩空间名称。苹果官方提供的案例为ITUR_2100_HLG_to_workingspace,即HLG色彩空间转化为Core Image线性色彩空间。
图十五:苹果官方案例中initial tree对色彩空间的描述
每个节点会显示Region of Interest(ROI),表示该节点在render中被利用的范围。
假如开发者在CI_PRINT_TREE控制字符串中选择type-4并在option中设定dump-intermediates,产生的级联图片会展示中间缓存的每一次pass(除了output pass)及其耗时、像素点数目和像素点格式(用来查找耗时大、占内存大的pass)。这对render内追踪错误非常有帮助。假如树中没有展示中间图,那么说明这张图在先前渲染的时候已被缓存,因此Core Image没有渲染它的必要。
图十六:设定dump-intermediates的debug结果展示
Core Image在手淘图片库中的应用大概
==========================
手淘图片库中的CDN图片适配处理库(TBCDNImage)的焦点目标是为不同终端设备、网络环境下的图片展示提供最优解。目前思量的维度重要是终端设备硬件和网络状态,思量的参数则是图片尺寸、压缩比率、锐化等图片属性。随着苹果在Core Image、端智能(CoreML)、硬件支持(自研芯片)等方面进行技术提升,手淘的CDN图片适配处理库可以思量增加“图片内容”作为新的维度,增加亮度、对比度、滤镜、图片种类等新参数。以下为部分应用场景:
辨认亮度较暗的图片,提升亮度做CDN图片适配处理
判定图片内容种类(如美食),根据不同内容种类的图片增加适合的滤镜做CDN图片适配处理
根据移动终端设备屏幕亮度(或深/淡色模式)修改图片色调做CDN图片适配处理,达到护眼结果
===
对Core Image技术的展望
====================
总结全文,WWDC20对Core Image技术的提升重要在三方面:
优化CI对视频/动图的支持,包括开发流程简化、逐帧处理性能提升等。
允许开发者更自由的构建Core Image Kernel,使CI的殊效处理更加丰富
那么怎样才能正确的掌握Redis呢?
为了让大家可以或许在Redis上可以或许加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
并发编程面试题汇总
JVM面试题汇总
Netty常被问到的那些面试题汇总
Tomcat面试题整理汇总
Mysql面试题汇总
Spring源码深度解析
Mybatis常见面试题汇总
Nginx那些面试题汇总
Zookeeper面试题汇总
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
Mysql面试题汇总
Spring源码深度解析
Mybatis常见面试题汇总
Nginx那些面试题汇总
Zookeeper面试题汇总
RabbitMQ常见面试题汇总
JVM常频面试:
[外链图片转存中…(img-CmEodzbC-1714283123216)]
Mysql面试题汇总(一)
[外链图片转存中…(img-PgZuW5j5-1714283123216)]
Mysql面试题汇总(二)
[外链图片转存中…(img-shlfVVNf-1714283123216)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-SNl1P2DK-1714283123217)]
本文已被CODING开源项目:【一线大厂Java面试题解析+焦点总结学习笔记+最新讲解视频+实战项目源码】收录
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
梦应逍遥
金牌会员
这个人很懒什么都没写!
楼主热帖
HarmonyOS应用开辟高级认证考试答案三- ...
云计算稽核 - 分析电子银行需求采用微 ...
如何将github copilot当gpt4用
从零手写实现 nginx-25-directive map ...
Percona Toolkit 神器全攻略(复制类) ...
华为云数据库首席专家谈分布式数据应用 ...
防患于未然,智能监控新视角:EasyCVR ...
Flutter/Dart第02天:Dart基础语法(建 ...
《深入理解Java虚拟机》读书笔记:Clas ...
C#深拷贝方法
标签云
挺好的
服务器
快速回复
返回顶部
返回列表