파이썬 & 오픈소스 개발 Tip과 강좌

이곳은 파이썬과 여러 오픈소스 기반 프레임워크 관련 Tip과 강좌 게시판 입니다. 관련 개발을 진행하면서 알아내신 Tip이나 강좌와 새로운 소식을 적어 주시면 다른 공부하는 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출을 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 16_api_call.py를 생성하고 코드를 실행합니다.

 

Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출


웹서비스란 무엇인가요?

다른 웹서버나 웹서비스에서 호스팅되는 어플리케이션을 Python으로 호출 할 수 있습니다.

수 많은 웹서비스가 존재하고, Python에서 손쉽게 이 서비스들을 가져다 사용할 수 있습니다.

 

Slide2.JPG

 

이번 강좌에서는 전형적인 웹서비스인, Microsoft Azure Cognitive Services을 호출해 보도록 하겠습니다. 늘 이야기 하지만, 다른 서비스의 호출방식도 비슷합니다. 이 예제를 마치고 나면, 다른 웹서비스도 관련 문서를 통해 호출할 수 있을 것입니다.

 

그렇다면, 웹서비스의 API란 무엇인가?

Slide3.JPG

대부분의 웹서비스에서는 코드로 호출할 수 있는 여러 API가 제공됩니다. 우리가 사용할 Microsoft Azure Cognitive Services에도 앱과 웹사이트에 AI(인공지능) 기능을 추가하기 위해, 코드로 호출 할 수 있는 여러 API가 제공됩니다. 

우리는 이 강좌에서, 코드 예제를 통해 AI 기능을 제공하는 Computer Vision(컴퓨터 이미지 처리) API의 Analyze Image(이미지 분석) 함수를 호출할 것입니다.

 

API를 호출하기 위한 준비사항

  • API 키가 있어야 API 호출이 가능
  • 서비스의 address(주소) 또는 endpoint(끝점)
  • API 문서에서 제공하는 호출 할 메서드의 함수 이름
  • API 문서에서 제공하는 함수의 파라미터 정보
  • API 문서에서 제공하는 나열된 HTTP 헤더 정보

이런 정보들이 필요합니다. 차근차근 강좌에서 준비하니 걱정 안하셔도 됩니다.

 

API 키는 무엇인가요?

Slide4.JPG

이 API키는 웹서비스에서 발급한 인증키이고, 고유한 값입니다.

이렇게 웹서비스 API를 이용하기 위해서는 서비스 제공자가 발급한 키를 보통 발급 받은 후에 접근 가능합니다. 

 

그럼 API 호출을 위해 API 키를 얻도록 하겠습니다. 1분도 안걸리니 바로 따라 오시면 되며, 아무 facebook또는 github 또는 Microsoft id 중에 하나가 있으면 즉시 테스트 가능합니다. 추가적으로, 신용카드 입력 등도 전혀 필요치 않습니다.

 

AI - Cognitive Service 테스트를 위한 무료 API 키 발급

1. Microsoft Azure Cognitive Services 링크로 이동

cognitive_trial.png

하단의 API 키 가져오기 선택. (2021년 1월 화면입니다. 이후 화면이 약간 다르더라도 유사한 메뉴를 통해 찾아 가셔서 가입하시면 됩니다.)

 

2. 게스트 선택

cognitive_check_free.png

게스트를 선택합니다. 7일간 사용 가능하며, SQLER의 Python 강좌에서 검토하고 사용하기에 충분합니다.

 

3. Cognitive Service 약관 확인

cognitive_region.png

체크하고, 국가/지역은 한국을 선택 학고 다음을 클릭합니다.

 

4. 로그인 아이디 선택

cognitive_id.png

페이스북, github 마이크로소프트 id  중에서 하나를 선택해 로그인 합니다.

 

5. 서비스 가입 완료 후 API 주소(엔드포인트)와 키(API Key) 확인

cognitive_info.png

서비스 가입후 이렇게 서비스 Endpoint와 API 키를 확인 할 수 있습니다.

자 이제, 다음 내용을 진행할 준비가 완료되었습니다.

 

Cognitive Service - 인공지능 API를 호출하기 위한 HTTP 호출 "방식"

우리의 코드는 python의 "requests" 패키지를 이용해 HTTP "POST 방식"으로 API를 호출합니다.

GET 방식과 POST 방식에 대해서는 아래 내용을 참조하세요.

 

Slide5.JPG

 

Python의 requests 패키지 라이브러리

Slide6.JPG

복잡하게 고민할 필요 없습니다. 우리가 오늘 사용할 requests 패키지를 이용하면, 손쉬운 HTTP 요청과 응답 처리가 가능합니다.

 

Cognitive Service API 호출을 위해 requests 패키지 설치

지난 강좌에서 배운대로, pip 명령을 이용해 패키지를 python 환경에 설치합니다.

 

# bash shell에서 실행합니다.
pip install requests

(주의, conda environment를 사용 중이면, 현재 conda environment가 activate 되었는지 다시 확인하시고, pip로 패키지를 추가할때도, activate된 conda environment에서 설치해야 정상적으로 동작합니다. 참조링크: 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 1. Python 개발 환경 구성 )

 

이제 코드를 실행합니다

Cognitive Service API는 이미지 분석 API 서비스로, 이미지 파일을 전송하면 이미지를 분석하고 그 결과를 JSON 형태로 리턴하는 인공지능 서비스입니다.

 

이 API를 실행하기 위해 아래의 호출 코드에서 vision_service_address를 가입 후 받은 "Endpoint"로 잡아 주시고, SUBSCRIPTION_KEY도 가입 후 받은 "API 키" 중에 하나를 넣어 주시면 됩니다.

# 이 코드에서는 Python으로 손쉽게 Computer Vision API를 호출하는 방법을 소개해 드립니다.
# Comupter Vision 이미지 분석 API method에 대한 문서는 이곳에서 참고하세요.
# https://westus.dev.cognitive.microsoft.com/docs/services/5adf991815e1060e6355ad44/operations/56f91f2e778daf14a499e1fa

# requests 라이브러리를 사용하여 Python에서 간단하게 REST API 호출을 진행합니다.
import requests

# 웹 서비스의 응답(Response)를 처리하려면 json 라이브러리가 필요합니다.
import json

# SUBSCRIPTION_KEY(강좌의 절차를 통해 받은 API_KEY)를 자신의 Computer Vision 서비스의 키로 수정하세요.
SUBSCRIPTION_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 아래 Vision_service_address를 자신에게 할당된 Computer Vision API 서비스의 주소로 수정해야 합니다.
# 유료 가입 계정과 7일 체험 계정의 endpoint가 다를 수 있습니다. 맨 뒤의 "/v2.0/"을 확인하세요.
vision_service_address = "https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/
"

# 호출하려는 API 함수의 이름을 주소에 추가합니다.
address = vision_service_address + "analyze"

# analyze image 함수의 문서에 따르면 세 가지의 Optional(선택적) 파라미터가 있습니다 : language, details, visualFeatures 파라미터
parameters  = {'visualFeatures':'Description,Color',
               'language':'en'}

# 분석할 이미지가 포함된 파일을 열어서 파일 오브젝트로 가져옵니다.
image_path = "./TestImages/PolarBear.jpg"
image_data = open(image_path, "rb").read()

# analyze image 함수 문서에서 기술한대로, HTTP 헤더에 구독 키와 content-type을 지정합니다.
# content-type 값은 "application/octet-stream" 입니다.
headers    = {'Content-Type': 'application/octet-stream',
              'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY}

# analyze image 함수 문서에서 가이드 하는 것처럼, HTTP POST 방식으로 함수를 호출합니다.
response = requests.post(address, headers=headers, params=parameters, data=image_data)

# HTTP 호출에서 오류가 생기면, 예외를 발생 시킵니다.
response.raise_for_status()

# 리턴 받은 JSON 결과를 출력합니다.
results = response.json()
print(json.dumps(results))

실행하면 이런 결과가 출력되는 것을 보실 수 있습니다. 

 

python call_api.py 

===실행결과===

{"color": {"dominantColorForeground": "White", "dominantColorBackground": "White", "dominantColors": ["White"], "accentColor": "595144", "isBwImg": false, "isBWImg": false}, "description": {"tags": ["bear", "polar", "animal", "mammal", "water", "outdoor", "large", "walking", "snow", "standing"], "captions": [{"text": "a polar bear in the water", "confidence": 0.7933424407633173}]}, "requestId": "0231629e-6ae6-48e9-93c5-5bd6fe0fcf31", "metadata": {"height": 221, "width": 220, "format": "Jpeg"}}

 

출력된 JSON 결과를 정돈된 형태로 보려면, Online JSON Viewer (stack.hu)과 같은 JSON linting 서비스에 결과를 붙어넣고 "Format"을 누르거나 viewer 탭에서 더 prettify된 결과를 확인 가능합니다.

 

수고 많으셨습니다.

 

출력된 결과인 JSON 포맷에 대한 부분은 다음 강좌에서 결과와 함께 상세히 소개해 드리겠습니다.

 

참조링크

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/python-for-beginners/16 - Calling APIs at master · CloudBreadPaPa/c9-python-getting-started (github.com)

Cognitive Services APIs Reference (microsoft.com)

Computer Vision이란? - Azure Cognitive Services | Microsoft Docs

 

 

No. Subject Author Date Views
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 307
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 146
102 Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 75
101 Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 95
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 81
99 Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 73
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 23
97 Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 37
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 47
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 62
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패드워드) 관리 - dotenv 코난(김대우) 2021.01.02 32
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 28
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 61
» Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 51
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 35
89 Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 27
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 25
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 26
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 33
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 28
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 39





XE Login