iOS 文本&二维码识别

在 WWDC 2022,苹果发布了VisionKit 中的 DataScannerViewController,这是一个可以在本地无网络状态下识别文本以及条形码的视图控制器,它的相应速度以及精度都是比较高的,他可以支持汉语(简繁版均支持)、英语、日语、韩语、法语、意大利语、德语、西班牙语、葡萄牙语等 9 种语言。 WWDChttps://developer.apple.com/videos/play/wwdc2022/10026/

使用限制:
iOS 设备必须是 A12 或者更新的新版、系统必须为 iOS16 以及以上版本
官方文档

1. 如何扫码以及识别文字

1.1 检查设备

就像上面提到的一样,只有安装了 A12 以及更新芯片的设备才可以使用 DataScannerViewController,所以在使用前需要检查:

import VisionKit

// 检查设备是否支持
guard DataScannerViewController.isSupported else {
    print("This device is NOT supported")
    return
}

下面这些设备是 2018年发布,是第一批安装 A12 芯片的设备:

  1. iPhone XS
  2. iPhone XS Max
  3. iPhone XR
  4. 5代 iPad Mini
  5. 3 代 iPad Air
  6. 8 代 iPad

如果 DataScannerViewController 在 App 中是一个必不可少的功能,则可以通过在 Info.plist 文件的 “Required device capabilities” 中添加 “iPhone / iPad Minimum Performance A12” 来限制 App 只可以在安装 A12 芯片的设备中使用
在这里插入图片描述

1.2 请求相机权限

在 Info.plist 文件中添加 「Privacy — Camera Usage Description」Key,并补充描述信息

在这里插入图片描述

然后根据下面的代码请求相机权限:

AVCaptureDevice.requestAccess(for: .video) { granted in

    guard granted else {
    	print("相机权限未授权. 请在设置中添加权限")
    	return
    }

	/// NOTE: 需要特别注意,需要在主线程中展示 DataScannerViewController,否则可能出现 runtime 错误
    DispatchQueue.main.async { [weak self] in
        guard let strongSelf = self else { 
        	return
        }
        strongSelf.showDataScannerViewController()
    }
}

如何设置请求权限信息支持多语言:

  1. 创建 InfoPlist.strings
  2. 使用本地化 key NSCameraUsageDescription 填写多语言文本
    官方论坛

1.3 创建 DataScannerViewController

DataScannerViewController 有七个属性可以在初始化时进行配置,并且这些属性都是只读的,在执行的时候是不可以修改的。

  1. recognizedDataTypes
    支持识别的数据类型,是一组 Option 数据类型,包括文本、条形码、二维码等

  2. qualityLevel
    .balanced 平衡
    .fast 快速
    .accurate 精确

  3. recognizesMultipleItems 默认为 false

  4. isHighFrameRateTrackingEnabled 默认为 true

  5. isPinchToZoomEnabled 默认为 true

  6. isGuidanceEnabled 默认为 true
    在这里插入图片描述

  7. isHighlightingEnabled 默认为 false

// 创建 `DataScannerViewController`
let dataScannerViewController = DataScannerViewController(recognizedDataTypes: [.text(), .barcode()],
                                                          qualityLevel: .accurate,
                                                          recognizesMultipleItems: true,
                                                          isHighFrameRateTrackingEnabled: true,
                                                          isPinchToZoomEnabled: true,
                                                          isGuidanceEnabled: true,
                                                          isHighlightingEnabled: true)  

1.4 使用

我们可以在视图控制器中,通过模态推出 dataScannerViewController 来开始扫描文本和条形码

present(dataScannerViewController, animated: true) {
    do {
        // 开始扫码
        try dataScannerViewController.startScanning()
        
    } catch {
        print("Error on scanning: \(error.localizedDescription)")   
    }
}

1.5 效果

这些文本和条形码都可以被识别
请添加图片描述

2. 如何获取识别的内容

我们需要实现 DataScannerViewController 的代理 DataScannerViewControllerDelegate,来监听被识别的文本和条形码,

// Set the delegate to your `UIViewController`
dataScannerViewController.delegate = self

extension YourOwnViewController: DataScannerViewControllerDelegate {

}

只要监测到任何可以识别的文本或者二维码,都会触发 didAdd 回调方法

/// Called when the the scanner recognizes new items in the scene.
/// - Parameters:
///   - dataScanner: The DataScannerViewController object providing the update.
///   - addedItems: The newly recognized items.
///   - allItems: The new complete collection of items remaining after adding `addedItems`.
func dataScanner(_ dataScanner: DataScannerViewController, didAdd addedItems: [RecognizedItem], allItems: [RecognizedItem]) {
    addedItems.forEach { recognizedItem in
        switch recognizedItem {
        case .text(let text):
            print("DataScannerViewControllerDelegate: didAdd new items - \(text.transcript)")
            
        case .barcode(let barcode):
            print("DataScannerViewControllerDelegate: didAdd new items - \(barcode.payloadStringValue ?? "")")
            
        }
    }
}

然而,只要新的视频帧被扫描,新识别的内容会更新或者移除已被识别的文本或者条形码。所以,我们也需要实现 didUpdate 以及 didRemove 的回调

/// Called when the the scanner updates the geometry or content of an item previously recognized in the scene.
/// - Parameters:
///   - dataScanner: The DataScannerViewController object providing the update.
///   - updatedItems: the items that have been updated.
///   - allItems: The complete collection of items.
func dataScanner(_ dataScanner: DataScannerViewController, didUpdate updatedItems: [RecognizedItem], allItems: [RecognizedItem]) {
    updatedItems.forEach { recognizedItem in
        switch recognizedItem {
        case .text(let text):
            print("DataScannerViewControllerDelegate: didUpdate updated items - \(text.transcript)")
            
        case .barcode(let barcode):
            print("DataScannerViewControllerDelegate: didUpdate updated items - \(barcode.payloadStringValue ?? "")")
            
        }
    }
}
/// Called when the scanner no longer sees a previously recognized item in the scene.
/// - Parameters:
///   - dataScanner: The DataScannerViewController object providing the update.
///   - removedItems: The items that were removed.
///   - allItems: The new complete collection of items remaining after removing `removedItems`.
func dataScanner(_ dataScanner: DataScannerViewController, didRemove removedItems: [RecognizedItem], allItems: [RecognizedItem]) {
    removedItems.forEach { recognizedItem in
        switch recognizedItem {
        case .text(let text):
            print("DataScannerViewControllerDelegate: didRemove removed items - \(text.transcript)")
            
        case .barcode(let barcode):
            print("DataScannerViewControllerDelegate: didRemove removed items - \(barcode.payloadStringValue ?? "")")
            
        }
    }
}

3. 总结

DataScannerViewController 是内置在 VisionKit 中的 UIViewController。它是通过 Google Cloud Vision 的 API 以及 Amazon Rekognition API 的服务来实现的,可以监测 9 种语言以及条形码和二维条形码,监测速度又快又准,不过目前只可以运行在 A12 芯片以及 iOS 16以及以上版本的系统

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 二维码识别工具v3.27是一款功能强大的软件程序,用于识别和解码二维码。 该工具使用先进的图像处理算法和识别技术,可以快速准确地读取和解码二维码。用户只需将相机对准二维码,该工具即可自动识别并提取二维码中的信息。无论是在产品包装上的二维码还是在广告海报上的二维码,该工具都能轻松解码。 二维码识别工具v3.27具有以下主要特点: 1. 快速高效:该工具使用高速图像处理算法,能够在几秒钟内完成二维码识别和解码,大大提高了工作效率。 2. 多格式支持:该工具不仅支持常见的二维码格式,如QR Code和Data Matrix,还支持其他二维码格式,如PDF417和MaxiCode,能够满足不同用户的需求。 3. 自动校正:该工具具备自动校正功能,能够根据图像的倾斜角度进行自动调整,确保二维码的准确识别。 4. 数据提取:除了识别和解码二维码外,该工具还能提取二维码中的信息并进行展示和导出,方便用户进行后续的数据处理和分析。 5. 用户友好:该工具界面简洁明了,操作简单方便,即使对于没有技术经验的用户也能够轻松上手使用。 总之,二维码识别工具v3.27是一款功能齐全、操作简单、效率高的二维码识别软件,广泛应用于各行各业,方便用户快速准确地读取和解码二维码中的信息。 ### 回答2: 二维码识别工具v3.27是一款功能强大的工具,主要用于快速识别和解码二维码。它具有以下几个特点和功能。 首先,它具有高效快速的识别速度。通过优化算法和硬件支持,该工具能够在瞬间识别并解码二维码,提供快速的反馈结果,大大节省了用户的时间。 其次,它支持多种类型的二维码。无论是普通的URL链接、文本信息、电话号码、电子邮件地址,还是名片、地图定位等复杂类型的二维码,该工具都能够准确识别并提供丰富的解码信息。 另外,该工具还具有强大的图像处理能力。无论是二维码在图像中的旋转、变形、模糊,还是光线不均匀、背景复杂等干扰因素,该工具都能够通过图像处理技术进行优化,提高识别准确度。 此外,二维码识别工具v3.27还提供了用户友好的操作界面。不仅界面简洁直观,操作便捷,而且还支持多语言切换和个性化设置,满足不同用户的需求。 最后,该工具还具有多平台兼容性。不论是在Windows、MacOS、Android还是iOS等操作系统上,该工具都能够稳定运行,为用户提供一致的使用体验。 总之,二维码识别工具v3.27是一款功能强大、操作简便、多平台兼容的工具,能够满足用户对于快速、准确解码二维码的需求。 ### 回答3: 二维码识别工具v3.27是一款用于扫描和解码二维码的工具软件。它具有快速、准确、稳定的特点。 首先,二维码识别工具v3.27具有快速的扫描速度。它使用先进的图像处理算法和高效的二维码识别引擎,可以在短时间内迅速完成对二维码的扫描与解码。用户只需要用手机或者摄像头对准二维码,点击扫描按钮,即可在几秒钟内获得扫描结果。 其次,二维码识别工具v3.27具有准确的识别能力。它可以识别多种类型的二维码,包括普通二维码、动态二维码、彩色二维码等。不论二维码的尺寸大小、颜色多样性、形状复杂性如何,该工具都能够准确地识别,并解码成相应的信息。这使得用户在使用该工具时能够获得更加准确和可靠的识别结果。 最后,二维码识别工具v3.27具有稳定的性能。它经过了多次的测试和优化,保证在各种设备上都能稳定运行,并且不易出现崩溃或卡顿的情况。用户可以放心使用该工具进行二维码的扫描和解码,无需担心使用过程中会遇到各种问题。 综上所述,二维码识别工具v3.27是一款功能强大、快速准确、稳定可靠的工具软件,能够满足用户在不同场景下对二维码扫描和解码的需求。无论是个人用户还是企业用户,都可以通过使用该工具来提高工作效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值