๐ 2020 IBM hackathone : Call for Code Korea ๐
ํ๋ช : 1818
ํ์ฅ : ๊นํธ์ฐ
ํ์ : ๊ณฝ์ธ๊ฒฝ, ๋ฐํ์ฐ, ์ต๋ฏธ๋ฆฌ, ์ต์ ์
์ฃผ์ : AI๊ธฐ๋ฐ ๊ณต๊ณต์ ํ ์ฐ๊ฒฐ ์๋น์ค โ1818โ
0. ์ฝ ํฌ ์ฝ๋(Call for code) ๋?
โ์ฝ ํฌ ์ฝ๋(Call for Code)โ ๊ธ๋ก๋ฒ ์ฑ๋ฆฐ์ง๋ ์ธ๊ณต ์ง๋ฅ, ๋ธ๋ก์ฒด์ธ, ํด๋ผ์ฐ๋, IoT ๋ฑ์ ์ ๋ณดํต์ ๊ธฐ์ (ICT)์ ํ์ฉํ์ฌ ๊ฐ์ฅ ์ฌ๊ฐํ ๋ฌธ์ ๋ก ๋๋๋ ๊ธ๋ก๋ฒ ์ด์์ ํด๋ฒ์ ์ฐพ๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์ ๋ํ์ ๋๋ค.
3๋ ์งธ๋ฅผ ๋ง์ดํ๋ 2020๋ , ์ฝ๋ก๋19์ ๊ธฐํ๋ณํ์ ์๋ฃจ์ ์ ๋ง๋๋ โ2020 ์ฝ ํฌ ์ฝ๋ ํ๊ตญ ํด์ปคํคโ์ ์ฐธ๊ฐํ ๋ฅ๋ ฅ ์๋ ๊ฐ๋ฐ์์ ๊ธฐํ์, ๋์์ด๋๋ฅผ ์ฐพ์ต๋๋ค.
ํจ๊ป ํ๋ก์ ํธ๋ฅผ ์ํํ ํ์๊ณผ ์ ๋ฌธ๊ฐ ๋ฉํ ๋ฅผ ๋ง๋๊ณ ์ฝ๋ก๋19, ๊ธฐํ๋ณํ์ ๋ํ ์จ๋ผ์ธ ๊ต์ก์ ํตํด ์ฌํ๋ฌธ์ ์ ๋ฌธ๊ฐ, ICT ์ ๋ฌธ๊ฐ์ ์ด๋ค ์ฌํ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ICT๋ก ํ์ด๋๊ฐ ์ ์์์ง ํจ๊ป ์ด์ผ๊ธฐ ๋๋ ๋ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด ์ฌํ๊ฐ ํ์๋ก ํ๋ ์์ฉํ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ์ง์ ๋ง๋ค์ด๋ณด์ธ์. ๋น์ ์ด ๋ง๋ ์ฝ๋๊ฐ ์ธ์์ ๊ตฌํ ์ ์๋ ํน๋ณํ ๊ธฐํ, ์ง๊ธ ๋์ ํ์ธ์!
Korea Hackathon์ IBM Korea, ์์ธ์, ์์ธํ์ ํํฌ, ์์ธ์ด๋ ธ๋ฒ ์ด์ ํน๋ฉ์ด ํจ๊ปํฉ๋๋ค.
โ์ฝ๋ก๋19โ์ ๋ง์๊ธฐ
์์ : ๊ธด๊ธ ์ปค๋ฎค๋์ผ์ด์ ์์คํ , ์๊ฒฉ ๊ต์ก ์ง์, ์ง์ญ ์ฌํ ํ๋ ฅ ๊ตฌ์ถ, ๊ธฐ๋ถ๊ธ ํ๋ซํผ ๋ฑ
โ๊ธฐํ๋ณํโ์ ๋ง์๊ธฐ
์์ : ์ํ๊ฒฝ์ ์ง์ ํ๋ซํผ, ์ฌ๋ ๋ณต์์ ์ํ ์๋น์ค, ์๋์ง / ๋ฌผ ์ง์ ๊ฐ๋ฅ์ฑ ์ง์ ๋ฑ
1. ์ ์ฒด ์ผ์
Step | Date | Property |
---|---|---|
์ฐธ๊ฐ ์ ์ฒญ ๋ฐ ์์ด๋์ด ์ ์ถ | 2020.04.23 ~ 05.13 | ์ฐธ๊ฐ ์ ์ฒญ 5์ธ ์ดํ์ ํ ๋๋ ๊ฐ์ธ ๊ตฌ์ฑ ๊ฐ๋จํ ์์ด๋์ด ์ ์ |
ย | 2020.05.12 | ์ต์ข ์ฐธ๊ฐ์ ๋ฐํ * ์ดํ ์ธ๋ถ ์ผ์ ๋ฐ ์งํ๋ฐฉ์ ๊ฐ๋ณ ์๋ด ์์ |
์จ๋ผ์ธ ๊ต์ก ์ธ์ ๋ฐ ํ๊ตญ ํด์ปคํค ์งํ | 2020.05.14 ~ 05.29 | 3ํ ์จ๋ผ์ธ ๊ต์ก ์ธ์ ๋ฐ ๊ฐ์ธ ์ฐธ์ฌ์ ํ ๊ตฌ์ฑ ์ฝ๋ก๋19 / ๊ธฐํ๋ณํ / Starter Kit ์ธ์ ๋ณ ์ ๋ฌธ๊ฐ ๋ฐ์ ๋ฐ ์ง์์๋ต |
ย | 2020.06.12 ~ 06.13 | Korea Virtual Hackathon ์ ๋ฌธ๊ฐ ๋ฉํ ์ ํจ๊ป ๋ฌด๋ฐ 2์ผ ํด์ปคํค ์งํ ์์ธ์์ฅ์, ํ๊ตญIBM ์ฌ์ฅ์ ํ์ฐฝ |
1818 ํ ์ผ์
ํ์ | ๋ ์ง | ์ฃผ์ |
---|---|---|
1์ฐจ | 2020.04.29 | ์ฃผ์ ์ ๋ฐ๋ฅธ ๊ฐ์ ์์ด๋์ด ๊ตฌ์ ํ์ |
2์ฐจ | 2020.05.03 | ์์ด๋์ด 2๊ฐ์ฉ ์ ํ ํ ์ธ๋ถ ๊ธฐ์ ์กฐ์ฌ |
3์ฐจ | 2020.05.07 | ์์ด๋์ด ์ ํ ํ์ |
4์ฐจ | 2020.05.24 | ์์ด๋์ด ์ฌ์ ๋น ํ์ |
5์ฐจ | 2020.05.27 | ์์ด๋์ด ๊ตฌ์ฒดํ ํ ์ธ๋ถ ์ผ์ ์ ๋ฆฌ |
6์ฐจ | 2020.06.01 | IBM ํด๋ผ์ฐ๋ ์ ์ ๋ฐ ๊ณต๋ถ (Speech to Text) |
7์ฐจ | 2020.06.08 | ์งํ ์ํฉ ๊ณต์ ๋ฐ ๊ณตํต ๊ณผ์ ํ์ |
8์ฐจ | 2020.06.09 | ์งํ ์ํฉ ๊ณต์ ๋ฐ ๊ณตํต ๊ณผ์ ํ์ |
9์ฐจ | 2020.06.10 | ๊ฐ์ธ ๊ณต๋ถ ๋ฐํ์ผ๋ก ๊ฒฐ๊ณผ๋ฌผ ์ ์(๋ฏธ๋ฆฌ, ํธ์ฐ, ์ธ๊ฒฝ) |
10์ฐจ | 2020.06.11 | ๊ฐ์ธ ๊ณต๋ถ ๋ฐํ์ผ๋ก ๊ฒฐ๊ณผ๋ฌผ ์ ์(์ ์, ํ์ฐ) |
ํ 1818 | ๋ ธ์ ํ์๋ก | https://www.notion.so/ibmhackathonssafy03/7b32393d451f478995235f1015990835 |
2. ํ ๊ตฌ์ฑ
Person | ์ญํ | ์ธ๋ถ์ฌํญ |
---|---|---|
๊นํธ์ฐ | ํ์ฅ, ๊ฐ๋ฐ | ๋ชจ๋ ํํธ ๋ณด์กฐ, ๋ฐฑ์๋ ๊ฐ๋ฐ |
๊ณฝ์ธ๊ฒฝ | ๋์์ด๋, ๊ฐ๋ฐ | ์๋น์ค ํ๋ซํผ ๋์์ธ, ๋ฐฑ์๋ ๊ฐ๋ฐ |
๋ฐํ์ฐ | ๊ฐ๋ฐ | ํ๋ก ํธ, ๋ฐฑ์๋ ๊ฐ๋ฐ |
์ต๋ฏธ๋ฆฌ | ๊ธฐํ, ๊ฐ๋ฐ | ๊ธฐํ์ ์์ฑ, ๊ธฐ๋ฅ ํ ์คํธ, ๊ฐ๋ฐ ๋ณด์กฐ |
์ต์ ์ | ๊ฐ๋ฐ | ํ๋ก ํธ, ๋ฐฑ์๋ ๊ฐ๋ฐ |
3. ํ๋ก์ ํธ ๊ฐ์
ํ 1818์ ํ๋ก์ ํธ ๋ชฉํ
AI ๊ธฐ๋ฐ ๊ณต๊ณต ์ ํ ์ฐ๊ฒฐ ์๋น์ค โ1818โ
- Watson์ Speech to text, Assistance, Text to speech ์ฌ์ฉ
- 1818 ๋ฒ์ผ๋ก ์ ํ ์ฐ๊ฒฐ์, ์ฌ์ฉ์๊ฐ ํ์๋ก ํ๋ ์๋น์ค๋ฅผ ๋ถ์ํ์ฌ ๊ด๋ จ ์ฐ๋ฝ์ฒ ๋ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์๋น์ค
- ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ํตํด 1์ฐจ๋ก ์ฆ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ค๋ค.
1์ฐจ ํํฐ๋ง์ด ํด๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ, ํ์ํ ์๋น์ค์ ๋ง๋ ๊ณต๊ณต๊ธฐ๊ด ์ฐ๋ฝ์ฒ๋ก ์ฐ๊ฒฐํด์ฃผ๋ 2์ฐจ ๊ณผ์ ์ด ์งํ๋จ.
- ์ฌ๋ ์ํฉ์์ ์ ๊ณ ์ ๋ฏผ์์ด ๊ณผ๋ถํ ๋๋ ๊ฒ์ 1์ฐจ์ ์ผ๋ก ๋ง๊ณ , ์ธํฐ๋ท ์ฌ์ฉ์ด ๋ถ๊ฐํ ์ํฉ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ.
- ํ์์๋ ๊ฐ๋จํ ์ ๋ณด ์ ๊ณต ์ญํ ์ ํ๋ฉฐ ์ง์์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์ด ์๋น์ค๋ฅผ ํตํด ์ป์ ๋ฐ์ดํฐ๋ค๋ก ์์ผ๋ก์ ์ฌ๋์ ์๋ฐฉํ๊ณ ๋ถ์ํ๋ ์๋น์ค๋ก ๋ฐ์ ํ ์ ์์.
4. ํ๋ก์ ํธ ์๊ฐ
5. ์ฝ๋
Watson์ STT ์๋ฃจ์ ์ ํ์ฉํ์ฌ ์ฌ์ฉ์์ ์์ฑ์ ํ ์คํธ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ฐ๋ฐ
- ์์ ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from ibm_watson import TextToSpeechV1 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator authenticator = IAMAuthenticator('{apikey}') text_to_speech = TextToSpeechV1( authenticator=authenticator ) text_to_speech.set_service_url('{url}') with open('hello_world.wav', 'wb') as audio_file: audio_file.write( text_to_speech.synthesize( 'Hello world', voice='en-US_AllisonV3Voice', accept='audio/wav' ).get_result().content)
- ์์ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import json
from os.path import join, dirname
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
# authenticator ์ง์
def authenticate(k):
authenticator = IAMAuthenticator(k)
return authenticator
def stt(a):
speech_to_text = SpeechToTextV1(authenticator=a)
return speech_to_text
# ์๋ views.py์์ ๋ง๋ค๊ธฐ
def set_url(stt, api_url):
stt.set_service_url(api_url)
return stt
โ
STT์ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ํ๋ ํค์๋ ๊ฐ์ ์ถ์ถํ๋ ๋ชจ๋ ๊ฐ๋ฐ
- ์์ ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import json from os.path import join, dirname from ibm_watson import SpeechToTextV1 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator authenticator = IAMAuthenticator('{apikey}') speech_to_text = SpeechToTextV1( authenticator=authenticator ) speech_to_text.set_service_url('{url}') with open(join(dirname(__file__), './.', 'audio-file2.flac'), 'rb') as audio_file: speech_recognition_results = speech_to_text.recognize( audio=audio_file, content_type='audio/flac', word_alternatives_threshold=0.9, keywords=['colorado', 'tornado', 'tornadoes'], keywords_threshold=0.5 ).get_result() print(json.dumps(speech_recognition_results, indent=2))
- ์์ ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# open ํจ์ํ def start_stt(stt, filename): with open(join(dirname(__file__), '../media/timeline_audio', filename), 'rb') as audio_file: speech_recognition_results = stt.recognize( audio=audio_file, content_type='audio/wav', model='en-US_ShortForm_NarrowbandModel', word_alternatives_threshold=0.9, keywords=['\ub54c\ubb38\uc5d0', '\uc790\uafb8'], keywords_threshold=0.5 ).get_result() return speech_recognition_results def get_keyword(srr): keyword = dict(srr, indent=2)["results"][0]["alternatives"][0]["transcript"] return keyword
์ถ์ถ๋ ํค์๋ ๋ฐ์ดํฐ๋ฅผ Watson์ assistant ์๋ฃจ์ ์ ํ์ฉํด ์๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ชจ๋ ๊ฐ๋ฐ
- ์์ ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import json from ibm_watson import AssistantV2 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator authenticator = IAMAuthenticator('{apikey}') assistant = AssistantV2( version='2020-04-01', authenticator = authenticator ) assistant.set_service_url('{url}') response = assistant.message_stateless( assistant_id='{assistant_id}', input={ 'message_type': 'text', 'text': 'Hello' } ).get_result() print(json.dumps(response, indent=2))
- ์์ ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import json from ibm_watson import AssistantV2 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator def authenticate(api_key): authenticator = IAMAuthenticator(api_key) return authenticator def set_assistant(authenticator): assistant = AssistantV2( version='2020-04-01', authenticator= authenticator ) return assistant def set_url(assistant, api_url): assistant.set_service_url(api_url) return assistant def get_response(assistant, a_id, text): response = assistant.message_stateless( assistant_id= a_id, input={ 'message_type': 'text', 'text': text } ).get_result() texts = response['output']['generic'][0]['text'] return texts
Watson์ TTS์๋ฃจ์ ์ ํ์ฉํ์ฌ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฑ์ผ๋ก ๋ณํํ๋ ๋ชจ๋ ๊ฐ๋ฐ
- ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
from os.path import join, dirname from ibm_watson import TextToSpeechV1 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator def authenticate(k): authenticator = IAMAuthenticator(k) return authenticator def tts(a): speech_to_text = TextToSpeechV1(authenticator=a) return speech_to_text def set_url(tts, api_url): tts.set_service_url(api_url) return tts def start_tts(tts, filename, text): with open(join(dirname(__file__), '../media/timeline_audio', filename), 'wb') as audio_file: audio_file.write( tts.synthesize( text, voice='en-US_MichaelV3Voice', accept='audio/wav' ).get_result().content)
์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋๋ก Django๋ฅผ ํ์ฉํ์ฌ ์น์ผ๋ก ๊ตฌํ