用于Firebase
的ML套件
OCR
将已打印文档的图像(通常由图像扫描仪捕获)转换为字符串的软件。
Firebase的ML套件
ML Kit是一种移动SDK,可提供Google的机器学习功能(如Android和iOS应用)。
文本识别
ML Kit的文本识别API允许您识别来自拉丁语的语言的文本(基于云的文本识别允许您识别更多语言的文本)。
文本识别可以自动处理信用卡,收据和名片上的数据输入麻烦。您还可以使用基于云的API从文档中的照片中提取文本。这使您可以改善可访问性和翻译文档。例如,您可以阅读火车上的号码,并让应用跟踪实际对象。
使用mekari等身份验证功能或OCR功能。如果您将ML Kit用于Firebase,看来OCR处理可以轻松完成,因此我尝试了一下。
提前准备
创建Firebase项目
如果没有google-services.json,它将无法正常运行,因此请在Firebase控制台中创建一个项目并添加一个应用。添加应用程序后,将创建google-services.json,因此请下载并将其添加到您的应用程序项目中。首先,该区域将用于Firebase,因此我将其省略。
启用基于云的API
这次我们将使用基于云的模型,因此启用基于云的API。
将Firebase项目计划升级到Blaze计划,并从"启用基于云的API"中启用基于云的API。
安装ML Kit库
应该使用CocoaPods安装ML Kit库。在您的podfile中包括ML Kit库。如果您还希望使用设备上的API进行文本识别,则最低要求为以下三个条件。
1 2 3 | pod 'Firebase/Analytics' pod 'Firebase/MLVision' pod 'Firebase/MLVisionTextModel' |
准备基础应用程序
首先,创建一个使用相机拍摄照片的应用程序。
UI看起来像这样。使用"拍照"按钮启动相机,然后在"识别的文本视图"中绘制识别的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import UIKit class ViewController: UIViewController { @IBOutlet weak var recognizedTextView: UITextView! @IBAction func takePhotoButtonTouchUpInside(_ sender: Any) { if UIImagePickerController.isSourceTypeAvailable(.camera) { let imagePickerController = UIImagePickerController() imagePickerController.sourceType = .camera imagePickerController.delegate = self self.present(imagePickerController, animated: true, completion: nil) } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } |
ViewController的实现如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | extension ViewController: UIImagePickerControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { guard let image = info[.originalImage] as? UIImage else { return } picker.dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) } } extension ViewController: UINavigationControllerDelegate { } |
UIImagePickerControllerDelegate和UINavigationControllerDelegate的实现如下所示。
实现文本识别处理
最后是主要主题。
首先,导入Firebase。
1 | import Firebase |
接下来,在ViewController中实现文本识别处理方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | private func recognizeTextInCloud(in image: UIImage) { let metadata = VisionImageMetadata() metadata.orientation = .rightTop let visionImage = VisionImage(image: image) visionImage.metadata = metadata let options = VisionCloudTextRecognizerOptions() let cloudTextRecognizer = Vision.vision().cloudTextRecognizer(options: options) cloudTextRecognizer.process(visionImage) { text, error in guard error == nil, let text = text else { print("Text recognizer failed with error: " + "\(error?.localizedDescription ?? "No Results")") return } self.recognizedTextView.text = text.text } } |
是的,仅此。上面的代码是基于云的文本识别。
对于设备上的文本识别,在实例化TextRecognizer对象时,只需使用onDeviceTextRecognizer()而不是cloudTextRecognizer(options :)。
您要做的就是将相机拍摄的照片通过文本识别处理方法。
1 2 3 4 5 6 7 8 9 10 11 | func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { guard let image = info[.originalImage] as? UIImage else { return } self.recognizeTextInCloud(in: image) picker.dismiss(animated: true, completion: nil) } |
像这样。
尝试移动
当我像这样拍照时...
符号可疑,但它可以相当准确地识别字符!
我认为,这可能会接近Mel-ri风格的身份验证功能!