콘솔로 이동

iOS에서 ML Kit를 사용한 이미지 속 텍스트 인식(OCR)

ML Kit를 통해 기기별 모델 또는 클라우드 모델을 사용하여 이미지 속의 텍스트를 인식할 수 있습니다. 각 방법의 이점에 대해 알아보려면 개요를 참조하세요.

시작하기 전에

  1. (EAP) CPDC EAP 사이트에 표시된 명령어를 실행하여 Git에 대한 쿠키를 인증하고 가져옵니다.
  2. (EAP) 프로젝트의 Podfile에 EAP 저장소를 추가합니다.
    source ‘https://cpdc-eap.googlesource.com/spec.git’
  3. iOS 프로젝트에 Firebase 추가의 단계를 완료합니다. Podfile에 코어 라이브러리 외에 ML Kit 라이브러리도 추가합니다.
    pod 'FirebaseML'
  4. (EAP) 앱에서 FirebaseML 모듈을 가져옵니다.

    Swift

    import FirebaseML

    Objective-C

    @import FirebaseML;

이제 기기별 모델 또는 클라우드 기반 모델을 사용하여 텍스트를 인식할 수 있습니다.

기기별 텍스트 인식

텍스트 감지기 실행

이미지 속 텍스트를 인식하려면 이미지를 CMSampleBufferRef으로 VisionTextDetectordetect(buffer:metadata:) 메소드에 전달하거나 이미지를 UIImagedetect(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;

클라우드 텍스트 인식

곧 제공될 예정입니다.