2021년 2월 카카오브레인에서 다양한 한글 자연어 처리를 위해 통합된 형태의 자연어 프레임워크인 pororo를 오픈소스로 공개했습니다. pororo는 Platform Of neuRal mOdels for natuRal language prOcessing의 약어이며 HuggingFace와 같은 목적으로 개발되었다고 보시면 됩니다. 다만 pororo는 한국어에 대해 좀 더 최적화 되어 있고 음성 인식 등 오디오 처리도 함께 지원한다는 장점이 있습니다.

출처 : kakaobrain pororo Github

더보기

pororo의 기술 문서에서 설명하고 있는 주요 태스크입니다.

  • Text Classification
    • Automated Essay Scoring
    • Age Suitability Prediction
    • Natural Language Inference
    • Paraphrase Identification
    • Review Scoring
    • Semantic Textual Similarity
    • Sentence Embedding
    • Sentiment Analysis
    • Zero-shot Topic Classification
  • Sequence Tagging
    • Contextualized Embedding
    • Dependency Parsing
    • Fill-in-the-blank
    • Machine Reading Comprehension
    • Named Entity Recognition
    • Part-of-Speech Tagging
    • Semantic Role Labeling
  • Seq2Seq
    • Constituency Parsing
    • Grammatical Error Correction
    • Grapheme-to-Phoneme
    • Phoneme-to-Grapheme
    • Machine Translation
    • Paraphrase Generation
    • Question Generation
    • Text Summarization
    • Word Sense Disambiguation
  • Misc
    • Automatic Speech Recognition
    • Image Captioning
    • Collocation
    • Lemmatization
    • Morphological Inflection
    • Optical Character Recognition
    • Speech Synthesis
    • Tokenization
    • Word Translation
    • Word Embedding

pororo가 다양한 기능을 제공하지만 그 중 필요한 OCR(Optical Character Recognition) 기능만을 추출하여 간단하게 사용할 수 있도록 만들었습니다. pororo OCR은 Text Detection을 위해 NAVER Clova AI의 CRAFT(Character Region Awareness for Text Detection) 모델을 사용하고 있습니다. 그리고 Recognition 은 CLOVA AI에서 제공하는 deep-text-recognition-benchmark라는 오픈소스 프로젝트를 이용하였는데 EasyOCR에서 사용하고 있는 기본 모델과 동일한 네트워크 구조('None-VGG-BiLSTM-CTC')를 갖는 Pre-trained Model을 이용한 것으로 보입니다.


Install

pip를 이용하여 설치가 가능합니다. 만약 OCR 기능만을 사용할 것이라면 제 Github의 소스를 내려받아서 사용하시길 추천드립니다. pororo 라이브러리에서 제공하는 모든 기능(BERT, Transformer 등)이 작동되기 위해 환경설정 시 최신 버전 문제로 잘되지 않을 수 있기때문입니다.

pip install pororo

Import Packages

from pororo import Pororo

OCR (Optical Character Recognition)

ocr = Pororo(task="ocr", lang="ko") 선언하면 최초에 한번은 Model 다운로드를 진행합니다. 다운로드 경로는 Windows의 경우 C:/pororo/misc, Mac OS의 경우는 ~/.pororo/misc 입니다.

테스트는 아래 이미지를 이용합니다.

IMAGE_PATH = "assets/images/test_image_1.jpg"
ocr = Pororo(task="ocr", lang="ko")
ocr(IMAGE_PATH)

Output:

['메이크업존 MAKEUP ZONE', '드레스 피팅룸 DRESS FITTING ROOM', '포토존 PHOTO ZONE']

detail 값을 True로 설정하면 좌표값을 함께 Return 합니다.

ocr = Pororo(task="ocr", lang="ko")
ocr(IMAGE_PATH, detail=True)

Output:

{'description': ['메이크업존 MAKEUP ZONE',
  '드레스 피팅룸 DRESS FITTING ROOM',
  '포토존 PHOTO ZONE'],
 'bounding_poly': [{'description': '메이크업존 MAKEUP ZONE',
   'vertices': [{'x': 164, 'y': 250},
    {'x': 332, 'y': 250},
    {'x': 332, 'y': 322},
    {'x': 164, 'y': 322}]},
  {'description': '드레스 피팅룸 DRESS FITTING ROOM',
   'vertices': [{'x': 144, 'y': 566},
    {'x': 360, 'y': 566},
    {'x': 360, 'y': 640},
    {'x': 144, 'y': 640}]},
  {'description': '포토존 PHOTO ZONE',
   'vertices': [{'x': 504, 'y': 566},
    {'x': 640, 'y': 566},
    {'x': 640, 'y': 638},
    {'x': 504, 'y': 638}]}]}

상황마다 다르긴 하지만 한글의 경우에는 Tesseract 보다 높은 인식율을 보였습니다. 다만 텍스트 영역을 찾기위해 CRAFT모델을 사용하는데 만약 GPU가 없다면 속도가 느리니 (1장 당 11초 ~ 18초) 참고하시기 바랍니다.


Source

[ Github ] Kakaobrain pororo 라이브러리를 이용한 OCR

반응형