개요
오늘은 현재 코드에서 AI를 활용해 이미지 분석을 진행 해보겠다. 일단 코드 구조의 반영은 나중으로 미루고 직접 AI를 사용해보자.
AI를 사용하기 위해서 구글 Cloud Vision API에서 예시 코드를 받아 작성해보자개요
오늘은 현재 코드에서 AI를 활용해 이미지 분석을 진행 해보겠다. 일단 코드 구조의 반영은 나중으로 미루고 직접 AI를 사용해보자.
AI를 사용하기 위해서 구글 Cloud Vision API에서 예시 코드를 받아 작성해보자
먼저 Vision API를 사용하기 위해서는 권한을 요청하고 승인을 받아야 한다. 링크로 접속해서
위와 같이 Vision AI 무료로 사용해 보기를 클릭하면
요렇게 가입할 수 있는 창이 뜨는데 하위 서비스 약관 체크 박스를 모두 체크하고 넘어가면 된다.
그럼 개인정보와 신용카드 정보를 입력하는 창이 뜨는데, 이를 다 입력해서 가입을 완료해야 한다. 이렇게 하는 이유는 자동 가입을 방지하기 위함이지 무료로 크레딧을 주기 때문에 신용 카드 정보를 입력한다고 해서 비용이 부과되거나 하지는 않는다고 한다.
모든 정보를 잘 입력하고 넘어오게 되면 "API 및 서비스" 라는 메뉴가 있다. 저기서 "사용 설정된 API 및 서비스" 로 넘어가게 되면 "API 및 서비스 사용 설정" 이라는 메뉴가 있다 클릭 해주자.
클릭을 해주면 검색 창이 있는데 여기서 vision API 라고 검색해주면 아래와 같이 나온다.
이 링크에서는 python을 이용한 라이브러리에 대한 설명이 나와있다. 코드 예제는 링크에 구글에서 친절하게 제공해주니 참고하면 되겠다.
# 코드 예제
# Imports the Google Cloud client library
from google.cloud import vision
def run_quickstart() -> vision.EntityAnnotation:
"""Provides a quick start example for Cloud Vision."""
# Instantiates a client
client = vision.ImageAnnotatorClient()
# The URI of the image file to annotate
file_uri = "gs://cloud-samples-data/vision/label/wakeupcat.jpg"
image = vision.Image()
image.source.image_uri = file_uri
# Performs label detection on the image file
response = client.label_detection(image=image)
labels = response.label_annotations
print("Labels:")
for label in labels:
print(label.description)
return labels
다시 Vision API로 들어가게 되면 사용자 인증 정보 만들기라는 버튼이 생긴걸 알 수 있다. 이를 클릭해서 사용자 인증 정보를 생성해야 외부에서 Google로 접근할 때 인증을 허용해줄수 있다.
단순히 외부에서 접근만 허용해줄 것이기 때문에 애플리케이션 데이터로 선택하면 된다. 사용자 데이터의 경우 Google의 OAuth를 이용해 클라이언트의 Google ID를 이용하겠다는 이야기이고, 사용자 데이터를 사용하기 위해서는 애플리케이션의 승인을 받아야 해 2~4 주 정도 시간이 걸릴수 있다고 한다.
나는 API 만 사용하면 되기에 애플리케이션 데이터로 설정했다.
서비스 계정을 생성하게 되면 위와 같이 특정 이메일과 이름이 있는 서비스 계정을 확인할 수 있다.
방금 생성한 서비스 계정으로 들어가서 키 탭을 클릭하면 새 키 만들기라는 항목이 있다. 이를 통해 json 형식의 키 파일을 다운로드 받아 API 호출에 사용할 것이다.
# 음식 사진 판별 함수
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = AI_KEY_PATH
def ai_food_or_not(img_file_uri):
client = vision.ImageAnnotatorClient()
image = vision.Image()
image.source.image_uri = img_file_uri
response = client.label_detection(image=image)
labels = response.label_annotations
print(labels)
label_description = []
for label in labels:
label_description.append(label.description)
is_it_food = True if label_description[0].lower() == "food" or label_description[1].lower() == "food" else False
return is_it_food
일단 위와 같이 코드를 구성했다. 물론 import 항목은 제외 했는데, 여기서 주의해야 할 점은 GOOGLE_APPLICATION_CREDENTIALS 를 통해 키로 만들었던 json 파일을 첨부하지 않으면 Auth 에러가 발생하게 된다.