Skip to content

choimiree/project-IBM-hackathon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 2020 IBM hackathone : Call for Code Korea 🌏

팀명 : 1818

팀장 : 김호연

팀원 : 곽세경, 박현우, 최미리, 최정원

주제 : AI기반 공공전화 연결 서비스 "1818"

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 팀 일정

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. 코드

  1. Watson의 STT 솔루션을 활용하여 사용자의 음성을 텍스트 처리하는 모듈 개발

    • 예시 코드
    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)
    • 수정 코드
    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

  2. STT의 결과를 통해 원하는 키워드 값을 추출하는 모듈 개발

    • 예시 코드
    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))
    • 수정 코드
    # 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
  3. 추출된 키워드 데이터를 Watson의 assistant 솔루션을 활용해 알맞은 데이터를 연결하는 모듈 개발

    • 예시 코드
    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))
    • 수정 코드
    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
  4. Watson의 TTS솔루션을 활용하여 연결된 데이터를 다시 음성으로 변환하는 모듈 개발

    • 코드
    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)
            
  5. 사용자가 서비스를 이용할 수 있도록 Django를 활용하여 웹으로 구현

About

2020 IBM hackathon: 팀 1818 의 "AI기반 공공전화 연결 서비스"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors