데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      손글씨에 강한 Google Cloud Vision AI 사용법 총정리

      오순도순 25.02.11
      14,581 7 1
      DEVOTEE 요약
      본 블로그에서는 Google Cloud Vision API를 사용하여 OCR 작업을 수행하는 방법을 소개합니다. API Key 방식과 서비스 계정 인증 방식의 차이를 설명하고, Colab 환경에서 Google Cloud Vision API를 설정 및 사용하는 과정을 설명합니다. 두 가지 방식을 비교하여 프로젝트의 필요에 따라 적절한 방식을 선택하도록 안내합니다.
      DEVOTEE 추천 블로그

      0. 들어가며

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


      23년도말 OCR 서비스 비교평가 포스팅이 제 예상보다 많은 분들에게 사랑(?) 받아 얼떨떨했는데요

      약 1년이 지난 이 시점에, 좀더 어려운 난이도의 표와 손글씨가 혼재되어 있는 이미지의 데이터를 테이블화 시켜야 하는 Task를 수행하며 OCR서비스들을 다시 한 번 사용하게 되었습니다.

      그 중, 꽤 괜찮은 성능을 보여준 Google Cloud Vision API 사용법에 대해 차근차근 정리해보았습니다.

      OCR 관련 Google의 official documentation 에서 확인해보실 수 있습니다.


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


      📌 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: 제품 이미지 검색 및 매칭

      자 이제 본격적으로 사용법에 대해 소개해보겠습니다. 먼저 API를 통한 호출 방식과 서비스 계정 인증을 통한 방식을 살펴보려 합니다.


      1. API를 통한 호출 방식

      1. 기존 API Key 방식

      기존 코드에서는 Google 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. 서비스 계정 인증 방식을 통한 사용

      🔹 필요한 설정

      ✅ 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. 새 프로젝트 생성 (또는 기존 프로젝트 사용)



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

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

      3

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

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

      4

      API 사용 설정됨 으로 보이면 설정 완료!

      🚀 2. Service Account(JSON 키) 생성

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

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

      2-1

      • 왼쪽 메뉴 중 중간쯔음 있는 "서비스 계정 만들기" 클릭

        2-2

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

      2-3

      • 역할(Role) 추가:

        • "Cloud Vision API User" 선택 해도 되고, 저는 그냥 개인 계정이라서 “소유자”로 지정했어요

      2-4

      • 계속 → 완료 → 생성된 서비스 계정 클릭

      • 방금 생성한 서비스 계정의 맨 우측에 작업을 누르면 키 관리 가 보이실 거에요"키 관리" > "키 추가" > "새 키 만들기"

        2-5

      2-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

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      오순도순 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기