6 분 소요

0. 들어가며

안녕하세요! 2025년 첫 포스팅은 OCR 관련 포스팅으로 돌아왔습니다.

23년도말 OCR 서비스 비교평가 포스팅이 제 예상보다 많은 분들에게 사랑(?) 받아 얼떨떨했는데요 약 1년이 지난 이 시점에, 좀더 어려운 난이도의 표와 손글씨가 혼재되어 있는 이미지의 데이터를 테이블화 시켜야 하는 Task를 수행하며 OCR서비스들을 다시 한 번 사용하게 되었습니다. 그 중, 꽤 괜찮은 성능을 보여준 Google Vision AI 사용법에 대해 차근차근 정리해보았습니다. OCR 관련 Google의 official documentation 에서 확인해보실 수 있습니다.

저는 Colab 노트북 환경에서 진행했습니다.

Google Cloud Vision API

📌 Google Cloud Vision API 소개

Google Cloud Vision API는 Google Cloud에서 제공하는 강력한 컴퓨터 비전 API로, 다양한 이미지 분석 기능을 지원하는 인공지능 서비스입니다. 머신러닝 기반의 Vision 모델을 활용하여 이미지 속 객체, 텍스트, 라벨, 얼굴, 로고, 랜드마크 등을 자동으로 인식하고 분석할 수 있습니다. 아래와 같이 여러 기능을 제공하고 있고, 저는 Text_DetectionDocument_Text_Detection 을 테스트 했습니다.

🚀 주요 기능

✅ OCR (Optical Character Recognition) 기능

  • TEXT_DETECTION: 이미지 속 텍스트(활자체) 추출
  • DOCUMENT_TEXT_DETECTION: 문서 내 텍스트 및 레이아웃 분석
  • 손글씨 인식 가능 (비정형 데이터도 일부 지원)

✅ 객체 및 이미지 분석

  • LABEL_DETECTION: 이미지 속 주요 객체 및 개념 태깅
  • OBJECT_LOCALIZATION: 이미지 내 여러 객체의 위치와 바운딩 박스 추출
  • LOGO_DETECTION: 브랜드 및 로고 감지

✅ 얼굴 및 감정 분석

  • FACE_DETECTION: 얼굴 감지 및 표정, 감정 분석

✅ 문서 및 제품 검색

  • WEB_DETECTION: 이미지 기반 웹 검색
  • PRODUCT_SEARCH: 제품 이미지 검색 및 매칭

1. API를 통한 호출 방식

1. 기존 API Key 방식

Google Cloud Vision API Key를 사용하여 REST API 방식으로 요청을 보낼 수 있습니다.

즉, HTTP 요청 (requests.post())을 직접 만들어 Vision API 엔드포인트 (https://vision.googleapis.com/v1/images:annotate )로 보냅니다.

  • 🔹 API Key 방식의 특징
    • API Key만 있으면 어디서든 호출 가능
    • requests.post()를 통해 수동으로 JSON 요청 생성 및 전송
    • 응답이 JSON 형태로 반환됨 (response.json())
import base64
import requests
import json

# ✅ API 엔드포인트 및 API 키 설정
API_KEY = google_api_key
VISION_API_URL = google_api_url

# ✅ OCR 처리할 이미지 파일 경로
image_path = "/content/sample_imag.jpeg"

# ✅ Step 1: 이미지 파일을 Base64 인코딩
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# ✅ Step 2: Google Vision API 요청 데이터 생성
def create_request(image_base64):
    return {
        "requests": [
            {
                "image": {"content": image_base64},
                "features": [
                    {"type": "DOCUMENT_TEXT_DETECTION"},  # 텍스트 인식 (OCR)
                ],
            }
        ]
    }

# ✅ Step 3: Google Vision API 호출
def call_google_vision_api(image_path):
    # 이미지 Base64 변환
    image_base64 = encode_image(image_path)

    # 요청 데이터 생성
    request_data = create_request(image_base64)

    # API 호출
    response = requests.post(VISION_API_URL, json=request_data)

    # 응답 처리
    if response.status_code == 200:
        return response.json()
    else:
        print(f"❌ API 요청 실패! 상태 코드: {response.status_code}")
        print(response.text)
        return None

# ✅ Step 4: OCR 결과 저장 및 출력
def save_and_print_ocr_results(ocr_response, output_text_path="full_text.txt", output_json_path="ocr_result.json"):
    if not ocr_response:
        print("❌ OCR 결과가 없습니다.")
        return

    # OCR 결과에서 텍스트 추출
    extracted_text = []
    for annotation in ocr_response["responses"][0].get("textAnnotations", []):
        extracted_text.append(annotation["description"])

    # 전체 텍스트 저장
    full_text = "\n".join(extracted_text)

    # ✅ 결과 출력
    print("\n🔹 Extracted OCR Text:\n")
    print(full_text)

    # ✅ 텍스트 저장
    with open(output_text_path, "w", encoding="utf-8") as text_file:
        text_file.write(full_text)
    print(f"\n✅ OCR 텍스트 저장 완료: {output_text_path}")

    # ✅ JSON 저장 (전체 응답)
    with open(output_json_path, "w", encoding="utf-8") as json_file:
        json.dump(ocr_response, json_file, indent=4, ensure_ascii=False)
    print(f"✅ OCR 결과 JSON 저장 완료: {output_json_path}")

# ✅ 실행
ocr_response = call_google_vision_api(image_path)
save_and_print_ocr_results(ocr_response)

2. 서비스 계정 인증 방식을 통한 사용 (좀더 안정적)

API호출 방식 보다 좀더 안정적이라고 보면 됩니다.

🔹 필요한 설정

✅ Google Cloud 프로젝트 생성 → Vision API 활성화

✅ 서비스 계정(JSON 키) 생성 → Google Drive에 업로드

✅ Colab에서 JSON 키 불러오기 → 환경변수 설정

🔹 OCR 실행

google-cloud-vision 설치 후 실행

✅ 이미지에서 텍스트 추출 및 시각화 가능

🎯 이제 실행해봅시다! 🚀

1️⃣ Google Drive에 JSON 키 업로드

2️⃣ Colab에서 마운트 → 키 복사

3️⃣ Google Vision API 실행

4️⃣ OCR 결과 확인 및 시각화

2-1. ✅ Colab에서 Google Cloud Vision API 사용 방법

Colab 노트북에서 Google Vision API를 사용하려면 Service Account 인증 방식을 사용해야 합니다.


🚀 1. Google Cloud 프로젝트 설정

1️⃣ Google Cloud 프로젝트 생성 및 API 활성화

  1. Google Cloud Console 접속
  2. 새 프로젝트 생성 (또는 기존 프로젝트 사용)

1

두 가지 세팅을 해주셔야 하는데, 결제 에서 카드 등록 해놓아야 하고(결제 부분은 생략하겠음!)

그 다음엔 IAM 및 관리자 에 들어가서 서비스 계정을 발급받아야 하는데 아래에서 자세히 설명하겠습니다

2

아, 그 전에 한 가지 해야할거!

콘솔 최상단에 있는 검색창에 “Cloud Vision API” 검색 후 Cloud Vision API 를 활성화 시켜주어야합니다.

3

아래와 같이 API 사용 설정됨 으로 보이면 설정 완료!

4


🚀 2. Service Account(JSON 키) 생성

2️⃣ 서비스 계정 생성 및 JSON 키 다운로드

  1. Google Cloud IAM 관리 이동 하면 아래와 같은 개요 페이지가 보일 겁니다

2-1

  1. 왼쪽 메뉴 중 중간쯤 있는 “서비스 계정 만들기” 클릭

    2-2

  2. 서비스 계정 이름 설정 (예: vision-api-access)

    2-3

  3. 역할(Role) 추가:
    • “Cloud Vision API User” 선택 해도 되고, 저는 그냥 개인 계정이라서 “소유자”로 지정했어요

      2-4

  4. 계속 → 완료 → 생성된 서비스 계정 클릭
  5. 방금 생성한 서비스 계정의 맨 우측에 작업을 누르면 키 관리 가 보이실 거에요 “키 관리” > “키 추가” > “새 키 만들기”

    2-5 2-6

  6. JSON 형식 선택 후 다운로드
    • vision-api-key.json 파일이 다운로드됨

비공개 키는 안전한 곳에 저장해두세요!

자 이제 환경 세팅은 다 끝났고, Colab 으로 돌아가서 API를 본격적으로 써봅시다


🚀 3. Colab 환경에서 Google Cloud Vision API 설정

3️⃣ Google Drive에 서비스 계정 키 업로드

  1. Google Drive에 vision-api-key.json 업로드

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "**vision-api-key.json"**


🚀 4. Google Cloud Vision API 클라이언트 설치 및 실행

4️⃣ google-cloud-vision 패키지 설치


!pip install --upgrade google-cloud-vision

🚀 5. Google Cloud Vision API 사용하기

5️⃣ Python 코드 실행 (OCR 텍스트 추출)

import io
import os
import json
from google.cloud import vision
from google.protobuf.json_format import MessageToDict  # JSON 변환 모듈

# ✅ 1. 서비스 계정 인증 설정 (Colab 환경)
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/content/vision-api-key.json"

# ✅ 2. Vision API 클라이언트 생성
client = vision.ImageAnnotatorClient()

# ✅ 3. OCR 적용할 이미지 경로
image_path = "/content/sample-image.png"  # ✅ OCR 적용할 이미지

# ✅ 4. 이미지 로드
with io.open(image_path, "rb") as image_file:
    content = image_file.read()
image = vision.Image(content=content)

# ✅ 5. OCR 요청 (문서 내 텍스트 검출)
response = client.document_text_detection(image=image)

# ✅ 6. OCR 결과 추출 및 출력
if response.text_annotations:
    extracted_text = response.text_annotations[0].description  # ✅ 전체 텍스트 가져오기
    print("\n🔹 Extracted OCR Text:\n")
    print(extracted_text)

    # ✅ 7. JSON 변환 후 저장 (🚨 기존 오류 해결)
    response_dict = MessageToDict(response._pb)  # ✅ `_pb` 사용하여 변환

    # ✅ 8. OCR 결과 저장 (텍스트)
    with open("ocr_result.txt", "w", encoding="utf-8") as text_file:
        text_file.write(extracted_text)
    print(f"\n✅ OCR 텍스트 저장 완료: ocr_result.txt")

    # ✅ 9. OCR 전체 결과 저장 (JSON)
    with open("ocr_result.json", "w", encoding="utf-8") as json_file:
        json.dump(response_dict, json_file, indent=4, ensure_ascii=False)
    print(f"\n✅ OCR 결과 JSON 저장 완료: ocr_result.json")

else:
    print("\n❌ OCR 결과 없음")


3. 결론/비교

📌 1. 두 코드의 차이점

버전 방식 인증 방법 요청 형식
1번 google.cloud.vision 라이브러리 사용 서비스 계정 JSON 파일 사용 (GOOGLE_APPLICATION_CREDENTIALS) vision.ImageAnnotatorClient() 클라이언트로 직접 호출
2번 requests를 이용한 REST API 호출 API 키 사용 (YOUR_GOOGLE_VISION_API_KEY) requests.post()를 이용한 HTTP 요청

📌 서비스 계정 인증 방식 vs. API Key 방식 비교


2. 기존 API Key 방식

기존 코드에서는 Google Cloud Vision API Key를 사용하여 REST API 방식으로 요청을 보냈습니다.

즉, HTTP 요청 (requests.post())을 직접 만들어 Vision API 엔드포인트 (https://vision.googleapis.com/v1/images:annotate )로 보냈습니다.

  • 🔹 API Key 방식의 특징
    • API Key만 있으면 어디서든 호출 가능
    • requests.post()를 통해 수동으로 JSON 요청 생성 및 전송
    • 응답이 JSON 형태로 반환됨 (response.json())

3. 현재 서비스 계정 인증 방식

현재는 Google Cloud Vision SDK를 사용하여 gRPC 또는 HTTP 방식으로 Google Cloud 서버와 직접 통신합니다.

즉, vision.ImageAnnotatorClient()를 통해 API 호출을 간편하게 처리할 수 있습니다.

  • 🔹 서비스 계정 인증 방식의 특징
    • GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 통해 인증
    • client.document_text_detection(image=image) 한 줄로 API 요청 가능
    • 직접 requests.post()로 API를 호출할 필요 없음
    • 응답은 JSON이 아니라 Python 객체 (AnnotateImageResponse) 형태로 반환됨
    • Google Cloud SDK 내부적으로 최적화된 방식 (gRPC 사용 가능)

❓ 4. 기존 requests.post() 방식이 필요 없는가?

그렇습니다!

서비스 계정 인증 방식을 사용하면 requests.post()와 JSON 요청을 직접 만들 필요가 없습니다.

대신, Google Cloud SDK의 vision.ImageAnnotatorClient()가 모든 요청을 자동으로 처리합니다.

📌 5. 결론: 어떤 방식을 선택해야 할까?

✔ 빠른 테스트 & 소규모 프로젝트 → API 키 방식 사용

✔ 보안이 중요한 환경 → 서비스 계정 인증 방식 사용

✔ 팀원 간 권한 관리 & 대량 데이터 처리 → 서비스 계정 사용 권장

🚀 보안이 중요한 경우, API 키 방식보다는 서비스 계정 인증 방식을 추천합니다 😊

마치며

  • 훌륭한 성능에 비해 생각보다 Reference 가 많지 않고 depreciated된 내용들이 혼재되어 있어 정리하면 좋을 것 같다는 생각이 들었던 Google Vision AI 서비스를 살펴보았습니다.

Reference

댓글남기기