박진수

Merge branch 'master' into 'master'

README.md 초안 작성

교수님께서 작성해주신 목차를 바탕으로 초안을 작성했습니다.
추가로 필요한 내용이 있으면 말씀해주시기바랍니다.

See merge request !3
1 +The MIT License (MIT)
2 +
3 +Copyright (c) 2020 Jinsu Park(2016101168)
4 +
5 +Permission is hereby granted, free of charge, to any person obtaining a copy
6 +of this software and associated documentation files (the "Software"), to deal
7 +in the Software without restriction, including without limitation the rights
8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 +copies of the Software, and to permit persons to whom the Software is
10 +furnished to do so, subject to the following conditions:
11 +
12 +The above copyright notice and this permission notice shall be included in all
13 +copies or substantial portions of the Software.
14 +
15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 +SOFTWARE.
1 -## Polly 1 +# Khuwitch
2 2
3 -> Polly는 text를 음성으로 변환해주는 AWS의 한 서비스이다. 3 +khuwitch는 다국어 번역 지원하며, 이를 음성으로도 들을 수 있도록해주는 twitch bot 입니다.
4 4
5 -### 권한 (Cognito service) 5 +khuwitch를 이용하면 채널 관리자는 자신의 채널의 외국어 채팅을 한국어로 바로 번역해 볼 수 있고, 필요한 경우 이를 음성파일로 변환하여 재생한 뒤 시청자들에게 송출할 수도 있습니다.
6 6
7 -모든 AWS는 이용하려면 그를 위한 자격 증명이 필요하다. 7 +## 아키텍쳐
8 -브라우저에서 이용자가 바로 AWS 서비스를 이용하려면 AWS 서비스를 이용하기위한 자격증명이 필요하지만, IAM User의 Credential을
9 -웹페이지 코드에 공개하는 것은 바람직하지않다.
10 -`Cognito` 는 이런 경우에 웹페이지에서의 인증, 인가 상태와 AWS 서비스를 위한 인증, 인가를 연동할 수 있도록 해주는 AWS의 한 서비스이다.
11 8
12 -우리는 인증되지않은 사용자도 Polly를 통해 TTS(text to speech) 기능을 이용할 수 있도록 Cognito의 자격 증명 풀을 생성했고, 그들은 Polly full access 권한을 갖는다. 9 +> 추후 추가 예정
13 10
14 -### 사용 방법 11 +## 사용되는 API
15 12
16 -```html 13 +* [Papago 언어 감지 API](https://developers.naver.com/docs/papago/papago-detectlangs-overview.md)
17 -<script src="https://sdk.amazonaws.com/js/aws-sdk-2.796.0.min.js"></script> 14 +* [Papago 번역 API](https://developers.naver.com/docs/papago/papago-nmt-overview.md)
15 +* [Twitch Authentication API](https://dev.twitch.tv/docs/authentication)
16 +* [Twitch Chatbot API](https://dev.twitch.tv/docs/irc)
17 +
18 +## 사용된 기술 및 동작 방법
19 +
20 +khuwitch는 크게 아래의 항목들로 동작한다고 볼 수 있습니다.
21 +
22 +* `websocket` 을 기반으로 Twtich api를 편리하게 이용할 수 있게해주는 `tmi client`
23 +* `Papago API` 를 통한 번역
24 +* `Socket io` 를 이용한 frontend, backend의 통신
25 +* `AWS Polly` 를 이용한 TTS(Text To Speech)
26 +
27 +위의 기술들을 바탕으로 khuwitch는 아래와 같이 동작합니다.
28 +
29 +1. `websocket` 을 기반으로 를 통해 메시지를 받아보거나 작성할 수 있습니다.
30 +2. Papago의 언어감지 API를 이용해 해당 채팅 메시지가 어떤 언어인지 판별합니다.
31 +3. 채팅 메시지가 외국어인 경우 Papago의 번역 API를 이용해 내용을 번역한 뒤 채팅으로 번역 내용을 전송하고, socket io를 통해 현재 khuwith 서비스에 접속 중인 사용자에게도 번역 내용을 전송합니다.
32 +4. frontend에서는 수신한 text를 `AWS Polly` 를 이용해 음성 파일로 변환한 뒤, 접속자의 브라우저에서 재생합니다.
33 +
34 +## 빌드 및 실행 방법
35 +
36 +> 추후 보완 예정
37 +
38 +### local에서 실행하기
39 +
40 +**frontend**
41 +
42 +```bash
43 +$ KHUWITCH_PORT=8000 npm start
18 ``` 44 ```
19 45
20 -브라우저에서 javascript AWS SDK를 설치한다(불러온다). 46 +**backend**
21 - 47 +```bash
22 -```html 48 +$ KHUWITCH_PORT=3000 npm start
23 -<script>
24 -// Polly를 사용하기 위한 자격증명을 설정한다.
25 -AWS.config.region = 'ap-northeast-2';
26 -AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: 'ap-northeast-2:03db97c9-a857-45f3-be6e-3cf84d6f619b'});
27 -const polly = new AWS.Polly({
28 - signatureVersion: 'v4',
29 - region: 'ap-northeast-2',
30 -});
31 -
32 -let params = {
33 - 'Text': '반가워 친구야~',
34 - 'OutputFormat': 'mp3',
35 - 'VoiceId': 'Seoyeon'
36 -};
37 -let tts = new AWS.Polly.Presigner(params, polly)
38 -
39 -
40 -// tts로 변환한 음성 파일을 얻는다.
41 -tts.getSynthesizeSpeechUrl(params, function(error, url) {
42 - if (error) {
43 - } else {
44 - setTimeout(()=>{
45 - console.log("실행")
46 - let audio = new Audio(url)
47 - audio.play()
48 - .then(delete audio);
49 - }, 3000)
50 - }
51 -})
52 -</script>
53 ``` 49 ```
50 +
51 +### docker image 빌드 후 docker-compose로 실행
52 +
53 +**frontend 빌드**
54 +
55 +```bash
56 +$ docker build -f Dockerfile-frontend -t khuwitch/frontend
57 +```
58 +
59 +**backend 빌드**
60 +```bash
61 +$ docker build -f Dockerfile-backend -t khuwitch/backend
62 +```
63 +
64 +**docker-compose로 실행**
65 +
66 +```bash
67 +$ docker-compose -f docker-compose.yml -f docker-compose-dev.yml up
68 +```
69 +
70 +기본적 설정으로 존재하는 `docker-compose.yml` 에 추가적인 내용을 담은 `docker-compose-{{NAME}}.yml` 을 전달함으로써 설정을 Override할 수 있습니다.
71 +
72 +## 사용 방법
73 +
74 +_로그인 화면 추후 추가.png_
75 +_봇 입장 화면 추후 추가.png_
76 +
77 +채널관리자는 twitch login을 통해 khuwitch bot을 자신의 Twitch 채널에 입장시킬 수 있습니다.
78 +
79 +_번역 화면 추가.png_
80 +
81 +khuwitch bot이 채널에 입장하면 모든 message에 대해 언어감지를 한 뒤 한국어가 아닌 경우는 해당 text를 한국어로 번역하여 누가 어떤 말을 했는지 알려줍니다.
82 +
83 +_tts 선택화면 추가.png_
84 +
85 +단순한 번역 챗봇을 넘어 TTS 번역 봇으로 이용하고 싶다면, TTS를 청취하고싶은 채널을 선택할 수 있습니다. 이후 변환된 음성 파일이 자동으로 재생되므로 내 채널로도 해당 음성이 송출되어 시청자들도 들을 수 있게 됩니다.
86 +
87 +## License
88 +
89 +누구나 편리하게 khuwitch를 개발하고 사용할 수 있도록 해당 프로젝트의 License를 MIT License로 선정하였습니다.
......
1 +## Polly
2 +
3 +> Polly는 text를 음성으로 변환해주는 AWS의 한 서비스이다.
4 +
5 +### 권한 (Cognito service)
6 +
7 +모든 AWS는 이용하려면 그를 위한 자격 증명이 필요하다.
8 +브라우저에서 이용자가 바로 AWS 서비스를 이용하려면 AWS 서비스를 이용하기위한 자격증명이 필요하지만, IAM User의 Credential을
9 +웹페이지 코드에 공개하는 것은 바람직하지않다.
10 +`Cognito` 는 이런 경우에 웹페이지에서의 인증, 인가 상태와 AWS 서비스를 위한 인증, 인가를 연동할 수 있도록 해주는 AWS의 한 서비스이다.
11 +
12 +우리는 인증되지않은 사용자도 Polly를 통해 TTS(text to speech) 기능을 이용할 수 있도록 Cognito의 자격 증명 풀을 생성했고, 그들은 Polly full access 권한을 갖는다.
13 +
14 +### 사용 방법
15 +
16 +```html
17 +<script src="https://sdk.amazonaws.com/js/aws-sdk-2.796.0.min.js"></script>
18 +```
19 +
20 +브라우저에서 javascript AWS SDK를 설치한다(불러온다).
21 +
22 +```html
23 +<script>
24 +// Polly를 사용하기 위한 자격증명을 설정한다.
25 +AWS.config.region = 'ap-northeast-2';
26 +AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: 'ap-northeast-2:03db97c9-a857-45f3-be6e-3cf84d6f619b'});
27 +const polly = new AWS.Polly({
28 + signatureVersion: 'v4',
29 + region: 'ap-northeast-2',
30 +});
31 +
32 +let params = {
33 + 'Text': '반가워 친구야~',
34 + 'OutputFormat': 'mp3',
35 + 'VoiceId': 'Seoyeon'
36 +};
37 +let tts = new AWS.Polly.Presigner(params, polly)
38 +
39 +
40 +// tts로 변환한 음성 파일을 얻는다.
41 +tts.getSynthesizeSpeechUrl(params, function(error, url) {
42 + if (error) {
43 + } else {
44 + setTimeout(()=>{
45 + console.log("실행")
46 + let audio = new Audio(url)
47 + audio.play()
48 + .then(delete audio);
49 + }, 3000)
50 + }
51 +})
52 +</script>
53 +```
...\ No newline at end of file ...\ No newline at end of file