logo头像

学如逆水行舟

iOS MachineLearning 系列(8)—— 图片热区分析

iOS MachineLearning 系列(8)—— 图片热区分析

对图片进行热区分析可以帮助我们图片中可能会受关注的区域,也可以获取到图片中需要被关注的事物的区域。

Vision框架中提供了两种热区分析的方式。

  • 关注区分析
  • 对象区分析

1 - 关注区分析

关注区分析请求使用VNGenerateAttentionBasedSaliencyImageRequest创建,此类没有特殊需要配置的,其继承自VNImageBasedRequest类,因此可以直接使用VNImageRequestHandler句柄来进行发起。返回的分析结果为VNSaliencyImageObservation对象,定义如下:

1
2
3
4
open class VNGenerateAttentionBasedSaliencyImageRequest : VNImageBasedRequest {
// 关注区对象
open var results: [VNSaliencyImageObservation]? { get }
}

VNSaliencyImageObservatio定义如下:

1
2
3
open class VNSaliencyImageObservation : VNPixelBufferObservation {
open var salientObjects: [VNRectangleObservation]? { get }
}

下图展示了关注区分析的效果:

可以看到,分析出的关注区基本是图片中内容最丰富的区域,也是我们在观察图片时最先关注到的。需要注意,分析出的关注区不一定会完整的包含图片中的物体。

2 - 物体区分析

物体区分析与关注区分析唯一的区别在于请求的创建,物体区分析使用VNGenerateObjectnessBasedSaliencyImageRequest类进行创建。下图演示了物体区分析的效果。

可以看到,针对猫狗的那张图片,关注区分析得到的结果是相对居中的位置,物体区分析得到的结果会完整的包含猫狗的边界。

在实际应用中,我们可以通过这些分析能力来对图像的部分进行视觉增强。

完整的示例代码可以在如下地址找到:

https://github.com/ZYHshao/MachineLearnDemo

备注:Vision框架中的很多AI能力可能无法在模拟器上很好的进行。