★ 아직 많이 부족합니다. 댓글을 통한 가르침 환영입니다. ★

 

이번에는 머신러닝에 대한 포스팅을 해볼까 합니다.

 

저의 개발환경은 [Python 3.5.4 / Pycharm IDE / Anaconda3 ]를 사용 중입니다.

 

하지만, 조금 쉽게 접근하기 위해 머신러닝에 대한 내부 구현이 어떻게 되어있는지 알 필요없이 마이크로소프트의 클라우드에서 제공하는 머신러닝 API를 활용하여 원하는 결과값을 얻도록 해보는 것이 목표입니다.

 

먼저, 마이크로소프트 클라우드 서비스인 Azure(https://portal.azure.com)에 접속합니다.

 

마이크로소프트 계정으로 로그인을 하시면 다음과 같은 페이지가 보이게 됩니다

 

 

여기서 왼쪽에 새로만들기를 누르고, 검색에 Cognitive Service를 입력하면 해당 서비스가 보이는 것을 확인할 수 있습니다.

 

 

Cognitive Service에 대한 부분은 다음 링크에서 더욱 자세하게 살펴보실 수 있습니다.

 

https://azure.microsoft.com/ko-kr/services/cognitive-services/

 

그럼 계속해서 해당 서비스를 만들고, 이용해보도록 하겠습니다.

 

이름과, 구독수준, 사용할 API, 가격은 무료, 위치는 다양하지만 미국 서부 2로 하였고, 리소스 그룹을 정해주고, 대시보드에 고정을 눌러줍니다.

 

 

이렇게 만들면, 대시보드에 Cognitive Service가 나타나게 됩니다.

 

사용할 API는 Computer Vision API로, https://azure.microsoft.com/ko-kr/services/cognitive-services/computer-vision/ 에서 더욱 자세히 확인하실 수 있습니다.

 

이렇게 Cognitive Service를 만들었으면, 다음 화면이 보이게 됩니다.

 

여기서는 사용할 구독 키 발급과 각종 API 레퍼런스 문서, SDK 등을 확인하실 수 있습니다.

 

 

먼저, 코드 작성하기 앞서 API 사용에 필요한 구독 키를 Keys 버튼을 눌러 확인하겠습니다.

 

 

(저의 구독키 중 첫 번째 알파벳을 제외하고 가렸습니다)

 

위나 아래의 둘 중 아무거나 구독 키를 사용하시면 됩니다. 저는 위의 구독키를 활용하도록 하겠습니다.

 

이렇게 구독키를 확인했으면 Computer Vision APi를 활용에 있어 제공되는 튜토리얼 코드를 참고해서 작성하도록 하겠습니다.

 

https://docs.microsoft.com/ko-kr/azure/cognitive-services/computer-vision/quickstarts/python

 

위의 사이트에 들어가시면 Python 3.6으로 작성된 튜토리얼 코드를 확인하실 수 있습니다.

 

1
2
3
4
########### Python 3.6 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64, json
 
subscription_key = '자신의 구독 키'
cs

 

위와 같이 자신의 구독 키로 대체해 준 후,

 

1
uri_base = 'westus2.api.cognitive.microsoft.com'
cs

 

Cognitive API를 만들 때, 미국 서부 2로 설정했으므로 위와 같이 바꿔줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
headers = {
    'Content-Type''application/json',
    'Ocp-Apim-Subscription-Key': subscription_key,
}
 
params = urllib.parse.urlencode({
    'visualFeatures''Categories,Description,Color',
    'language''en',
})
 
body = "{'url':'https://upload.wikimedia.org/wikipedia/commons/1/12/Broadway_and_Times_Square_by_night.jpg'}"
 
try:
    conn = http.client.HTTPSConnection(uri_base)
    conn.request("POST""/vision/v1.0/analyze?%s" % params, body, headers)
    response = conn.getresponse()
cs

 

나머지는 동일하게 적어주고, 14번째 줄에 인자값을 설정한 미국 서부의 값인 uri_base로 바꿔줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
  data = response.read().decode('utf-8')
 
    # 'data' contains the JSON data. The following formats the JSON data for display.
    parsed = json.loads(data)
    print ("Response:")
    print (json.dumps(parsed, sort_keys=True, indent=2))
    conn.close()
 
except Exception as e:
    print('Error:')
    print(e)
cs

 

그리고 나머지 코드입니다.

 

저는 튜토리얼에서 제공되는 코드가 동작하지 않아 첫 번째 줄에 .decode('utf-8')을 붙여줌으로써 발생되는 에러를 해결했습니다.

 

출력해보면 이미지의 분석 결과가 출력되는 것을 알 수 있습니다.

 

이렇게 전체 코드가 작성되었는데 분석을 시도한 URL의 이미지를 직접보며, 어떻게 분석되었는지 조금 확인해볼까 합니다.

 

그러기 위해서는 라이브러리 2개를 설치해줍니다.

 

conda install scikit-image 

 

conda install -c conda-forge matplotlib 

 

이 후, try문의 코드를 다음과 같이 수정합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
try:
    conn = http.client.HTTPSConnection('westus2.api.cognitive.microsoft.com')
    conn.request("POST""/vision/v1.0/analyze?%s" % params, body, headers)
    response = conn.getresponse()
    data = response.read().decode('utf-8')
    parsed = json.loads(data)
    print ("Response:")
    #print (json.dumps(parsed, sort_keys=True, indent=2))
    print(parsed['description'])
    img = io.imread('https://upload.wikimedia.org/wikipedia/commons/1/12/Broadway_and_Times_Square_by_night.jpg')
    plt.imshow(img)
    plt.show()
 
cs

 

코드를 실행 해보면

 

 

1
2
3
Response:
{'tags': ['outdoor', 'building', 'street', 'city', 'busy', 'people', 'filled', 'traffic', 'many', 'table', 'car', 'group', 'walking', 'bunch', 'crowded', 'large', 'night', 'light', 'standing', 'man', 'tall', 'umbrella', 'riding', 'sign', 'crowd'],
 'captions': [{'text': 'a group of people on a city street filled with traffic at night', 'confidence': 0.8241405091548035}]}
cs

 

와 같이 이미지를 출력하고, 해당 이미지의 tag 값들과 그 이미지를 분석한 caption 값 그리고 그 확률을 출력하는 것을 확인할 수 있습니다.

 

추가적으로 다른 이미지를 분석하고 싶다면,

 

1
body = "{'url':'원하는 이미지 URL'}"
cs

 

의 URL 부분을 원하는 이미지의 URL로 수정하고

 

1
img = io.imread('원하는 이미지 URL')
cs

 

해당 부분의 URL 또한 수정하여 출력 결과를 확인하시면 됩니다.

 

이렇게 마이크로소프트 클라우드에서 제공하는 cognitive API를 활용해 이미지를 분석해보았습니다.

+ Recent posts