SSAMKO의 개발 이야기

[google API] 이미지에서 텍스트 추출하기 - OCR 본문

Python

[google API] 이미지에서 텍스트 추출하기 - OCR

SSAMKO 2021. 1. 9. 12:39
반응형

Google에서는 인공지능을 활용한 다양한 API를 제공하고 있는데, 매력적인 점은 개인적으로 사용할때는 대부분의 AI를 무료로 사용할 수 있다는 것이다.

(개인사용자에게 무료로 제공하는 것은 아니고, 무료로 사용할 수 있는 일 할당량 혹은 월 할당량이 존재함)

 

그중에서 이미지에서 텍스트를 추출할 수 있는 API의 사용법을 알아보자.

필자는 쇼핑몰 상세이미지에서 텍스트를 추출하기 위해 사용했었는데, 퀄리티가 정말 매우매우 높다. 한글의 정확도도 99%정도로 매우 정확하고, 언어를 알아서 감지해주므로 다양한 언어가 있더라도 문제가 없다.

 


사용 예시

출처: 쇼핑엔티

위 이미지에서 텍스트를 추출하면

고급스러운 합성가죽
고급스러움이 느껴지는 가죽으로
이물질이 묻어도 쉽게 제거가 가능하며,
정교한 박음질로 마감처리 되었습니다.
사이드 지퍼와 밴딩처리
사이드 안쪽에는 지퍼형태로
신고벗기 편안하며, 겉 사이드에는
고급스러운합성가죽고급스러움이느껴지는가죽으로이물질이묻어도쉽게제거가가능하며,정교한박음질로마감처리되었습니다.사이드지퍼와밴딩처리사이드안쪽에는지퍼형태로신고벗기편안하며,겉사이드에는

 

위와 같이 완벽하게 추출이 되는 것을 확인할 수 있습니다.

 


 

먼저, 이 API사용을 위해서는 GCP 프로젝트가 하나 있어야 한다. 

그리고, API사용을 위한 Application credentail 파일을 가지고 있어야한다. (인증 방법은 몇가지가 존재한다.)

 

로컬 이미지에서 텍스트 추출

def detect_text(path):
    """Detects text in the file."""
    from google.cloud import vision
    import io
    BASE_DIR = 'private'
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=os.path.join(BASE_DIR,"ssamko-service-f********6.json")
    client = vision.ImageAnnotatorClient()

    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision.Image(content=content)

    response = client.text_detection(image=image)
    texts = response.text_annotations
    text_list = list(map(lambda x: x.description, texts))

    if response.error.message:
        raise Exception(
            '{}\nFor more info on error messages, check: '
            'https://cloud.google.com/apis/design/errors'.format(
                response.error.message))

    return text_list

위 함수를 사용하면 이미지를 통해 추출한 텍스트가 리스트 형태로 반환된다.

path 인자에 이미지 파일의 경로를 넣어주면 된다.

원격 이미지(웹 또는 GCS)에서 텍스트 추출

def detect_text_uri(uri):
    """Detects text in the file located in Google Cloud Storage or on the Web.
    """
    from google.cloud import vision
    BASE_DIR = 'private'
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=os.path.join(BASE_DIR,"ssamko-service-f******6.json")
    client = vision.ImageAnnotatorClient()
    image = vision.Image()
    image.source.image_uri = uri

    response = client.text_detection(image=image)
    texts = response.text_annotations
    text_list = list(map(lambda x: x.description, texts))

    if response.error.message:
        raise Exception(
            '{}\nFor more info on error messages, check: '
            'https://cloud.google.com/apis/design/errors'.format(
                response.error.message))

    return text_list

단, 원격 추출의 경우에는 이미지 주소에서 다운로드가 원활하지 않을경우 에러가 발생하니 유의.

 

텍스트를 추출하는 것 외에도 이미지에서 해당 텍스트가 차지하고 있던 위치(vertices)등을 반환받을 수도 있다. 

자세한 내용은 공식 페이지를 참고

cloud.google.com/vision/docs/ocr

 

이미지의 텍스트 감지  |  Cloud Vision API  |  Google Cloud

이 API를 모바일 앱에서 사용하는 경우 Firebase용 ML Kit를 사용해 보세요. 이 키트는 Cloud Vision 서비스를 사용하기 위한 네이티브 Android 및 iOS SDK와 함께 커스텀 ML 모델을 사용하는 기기별 ML Vision API

cloud.google.com

 

반응형
Comments