转到控制台

在 iOS 上使用机器学习套件识别图片中的文字 (OCR)

利用机器学习套件,您可以使用基于设备的模型或云端模型识别图片中的文字。要了解每种方法的优势,请参阅概览

准备工作

  1. (EAP) 通过运行 CPDC EAP 网站中所示的命令,对 Git 进行身份验证并获取 Cookie。
  2. (EAP) 将 EAP 代码库添加到项目的 Podfile 中:
    source ‘https://cpdc-eap.googlesource.com/spec.git’
  3. 完成将 Firebase 添加到您的 iOS 项目中的步骤。除核心库之外,在 Podfile 中添加机器学习套件库:
    pod 'FirebaseML'
  4. (EAP) 在应用中,导入 FirebaseML 模块:

    Swift

    import FirebaseML

    Objective-C

    @import FirebaseML;

现在,您就可以使用基于设备的模型云端模型识别文字了。

基于设备的文字识别

运行文本检测器

要识别图片中的文字,请将图片作为 CMSampleBufferRef 传递给 VisionTextDetectordetect(buffer:metadata:) 方法,或将图片作为 UIImage 传递给 detect(image:metadata:) 方法。

  1. 获取 VisionTextDetector 的一个实例:

    Swift

    do {
      let textDetector = try FirebaseMachineLearning.machineLearning().textDetector()
    } catch let error as NSError {
      print("Error: \(error)")
    }
    

    Objective-C

    NSError *textError;
    FIRMachineLearning *machineLearning = [FIRMachineLearning machineLearning];
    FIRVisionTextDetector *textDetector = [machineLearning textDetectorWithError:&textError];
    
    if (textError != nil) {
      NSLog(@"Text detector creation error: %@", textError.localizedDescription);
    }
    
  2. 如果图片的第一行和第一列未定向于左上角,则可以通过创建 VisionImageMetadata 对象来指定图片的方向:

    Swift

    let metadata = VisionImageMetadata()
    metadata.orientation = VisionDetectorImageOrientation.topRight
    

    Objective-C

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    metadata.orientation = FIRVisionDetectorImageOrientationTopRight;
    
    如果图片的第一行和第一列定向于左上角,则只需传递 nil,而非元数据对象。
  3. 然后,将图片传递给 detect(buffer:metadata:)detect(image:metadata:) 方法:

    Swift

    do {
      textBlocks = try textDetector.detect(buffer: buffer!, metadata: nil)  // or detect(image:...)
    } catch let error as NSError {
      print("Error: \(error)")
    }
    

    Objective-C

    NSError *textDetectError = nil;
    NSArray> *textBlocks =
        [textDetector detectInBuffer:buffer  // or detectInImage:...
                            metadata:nil
                               error:&textDetectError];
    if (textDetectError != nil) {
      NSLog(@"Text detection error: %@", textDetectError.localizedDescription);
      return 0;
    }
    

从识别出的文本块中提取文本

如果文字识别操作成功,它将返回一组 VisionTextBlockFeature 对象。每个 VisionTextBlockFeature 对象代表一个在图片中检测出的矩形文本块(例如,打印出的一段文字)。对于每个 VisionTextBlockFeature,您可以获取该文本块的边界坐标以及该文本块中包含的文本:

Swift

let block = textBlocks[0]
let text = block.recognizedText
let corners = block.cornerPoints

Objective-C

FIRVisionTextBlockFeature *block = textBlocks[0];
NSString *text = block.recognizedText;
NSArray *corners = block.cornerPoints;

此外,对于每个 VisionTextBlockFeature,您可以获取构成该文本块的文本行以及构成每行文本的元素(例如字符或标点符号):

Swift

let line = block.lines[0]
let lineText = line.recognizedText
let lineCorners = line.cornerPoints

let elem = line.elements[0]
let elemText = elem.recognizedText
let elemCorners = elem.cornerPoints

Objective-C

FIRVisionTextLineFeature *line = block.lines[0];
NSString *lineText = line.recognizedText;
NSArray *LineCorners = line.cornerPoints;

FIRVisionTextElementFeature *elem = line.elements[0];
NSString *elemText = elem.recognizedText;
NSArray *elemCorners = elem.cornerPoints;

Cloud 文字识别

即将推出!