Swift之Vision 图像识别框架

Swift之Vision 图像识别框架

  • 2017年苹果大大又推出了新机型iPhone 8和iPhone 8Plus, 这还不是重点, 重点是那一款价值9000RMB的iPhone X, 虽说网上吐槽声从未停止过, 但是我觉得还是不错的哈!
  • 软件方面, 苹果大大也推出了iOS 11, 经本人iPhone 7手机亲测, 耗电快外加通知栏改不完的bug
  • 当然了随着iOS 11的推出, 也随之推出了一些新的API,如:ARKitCore MLFileProviderIdentityLookupCore NFCVison 等。
  • 这里我们还要说的就是Apple 在 WWDC 2017 推出的图像识别框架–Vison官方文档
  • Demo地址

一. Vision应用场景

  • Face Detection and Recognition : 人脸检测
    • 支持检测笑脸、侧脸、局部遮挡脸部、戴眼镜和帽子等场景,可以标记出人脸的矩形区域
    • 可以标记出人脸和眼睛、眉毛、鼻子、嘴、牙齿的轮廓,以及人脸的中轴线
  • Image Alignment Analysis: 图像对比分析
  • Barcode Detection: 二维码/条形码检测
    • 用于查找和识别图像中的条码
    • 检测条形码信息
  • Text Detection: 文字检测
    • 查找图像中可见文本的区域
    • 检测文本区域的信息
  • Object Detection and Tracking: 目标跟踪
    • 脸部,矩形和通用模板

二. Vision支持的图片类型

1. Objective-C中

  • CVPixelBufferRef
  • CGImageRef
  • CIImage
  • NSURL
  • NSData

2. Swift中

  • CVPixelBuffer
  • CGImage
  • CIImage
  • URL
  • Data

具体详情可在Vision.frameworkVNImageRequestHandler.h文件中查看

三. Vision之API介绍

  • 使用在vision的时候,我们首先需要明确自己需要什么效果,然后根据想要的效果来选择不同的类
  • 给各种功能的 Request 提供给一个 RequestHandler
  • Handler 持有需要识别的图片信息,并将处理结果分发给每个 Requestcompletion Block
  • 可以从 results 属性中得到 Observation 数组
  • observations数组中的内容根据不同的request请求返回了不同的observation
  • 每种ObservationboundingBoxlandmarks等属性,存储的是识别后物体的坐标,点位等
  • 我们拿到坐标后,就可以进行一些UI绘制。

1. RequestHandler处理请求对象

  • VNImageRequestHandler: 处理与单个图像有关的一个或多个图像分析请求的对象
    • 一般情况下都是用该类处理识别请求
    • 初始化方法支持CVPixelBuffer, CGImage, CIImage, URL, Data
  • VNSequenceRequestHandler: 处理与多个图像序列有关的图像分析请求的对象
    • 目前我在处理物体跟踪的时候使用该类
    • 初始化方法同上

2. VNRequest介绍

  • VNRequest: 图像分析请求的抽象类, 继承于NSObject
  • VNBaseImageRequest: 专注于图像的特定部分的分析请求

- 具体分析请求类如下:

VNImageBasedRequest.png

3. VNObservation检测对象

  • VNObservation: 图像分析结果的抽象类, 继承与NSObject

- 图像检测结果的相关处理类如下:

VNObservation.png

四. 实战演练

1. 文本检测

  • 方式一: 识别出具体的每一个字体的位置信息
  • 方式二: 识别一行字体的位置信息

- 如图效果:

WechatIMG3.jpeg

WechatIMG5.jpeg

1.1 现将图片转成初始化VNImageRequestHandler对象时, 可接受的的CIImage
//1. 转成ciimage
guard let ciImage = CIImage(image: image) else { return }
1.2 创建处理请求的handle
  • 参数一: 图片类型
  • 参数二: 字典类型, 有默认值为[:]
let requestHandle = VNImageRequestHandler(ciImage: ciImage, options: [:])
1.3 创建回调闭包
  • 两个参数, 无返回值
  • VNRequest: 是所有请求Request的父类
public typealias VNRequestCompletionHandler = (VNRequest, Error?) -> Swift.Void
  • 具体代码如下:
//4. 设置回调
let completionHandle: VNRequestCo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值