Showing
1 changed file
with
59 additions
and
8 deletions
| ... | @@ -37,6 +37,11 @@ const config = { | ... | @@ -37,6 +37,11 @@ const config = { |
| 37 | channelSecret: process.env.channelSecret, | 37 | channelSecret: process.env.channelSecret, |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | +// Microsoft Azure - Computer Vision REST API | ||
| 41 | +let subscriptionKey = process.env.COMPUTER_VISION_SUBSCRIPTION_KEY | ||
| 42 | +let endpoint = process.env.COMPUTER_VISION_ENDPOINT | ||
| 43 | +if (!subscriptionKey) { throw new Error('Set your environment variables for your subscription key and endpoint.') } | ||
| 44 | +var uriBase = endpoint + 'vision/v2.1/ocr' | ||
| 40 | 45 | ||
| 41 | // create LINE SDK client | 46 | // create LINE SDK client |
| 42 | const client = new line.Client(config); | 47 | const client = new line.Client(config); |
| ... | @@ -63,8 +68,56 @@ app.post('/webhook', line.middleware(config), (req, res) => { | ... | @@ -63,8 +68,56 @@ app.post('/webhook', line.middleware(config), (req, res) => { |
| 63 | // event handler | 68 | // event handler |
| 64 | function handleEvent(event) { | 69 | function handleEvent(event) { |
| 65 | if (event.type !== 'message' || event.message.type !== 'text') { | 70 | if (event.type !== 'message' || event.message.type !== 'text') { |
| 66 | - // ignore non-text-message event | 71 | + if (event.message.type === 'image') |
| 67 | - return Promise.resolve(null); | 72 | + return new Promise(function(resolve, reject) { |
| 73 | + console.log(event.message) | ||
| 74 | + const imageStream = fs.createWriteStream('public/image.jpeg') | ||
| 75 | + client.getMessageContent(event.message.id) | ||
| 76 | + .then((stream) => { | ||
| 77 | + stream.on('data', (chunk) => { | ||
| 78 | + imageStream.write(chunk) | ||
| 79 | + }) | ||
| 80 | + stream.on('error', (err) => { | ||
| 81 | + console.log(err) | ||
| 82 | + }) | ||
| 83 | + stream.on('end', () => { | ||
| 84 | + imageStream.end() | ||
| 85 | + const imageUrl = 'https://panguin.ml/image.jpeg' | ||
| 86 | + const params = { | ||
| 87 | + 'language': 'unk', | ||
| 88 | + 'detectOrientation': 'true', | ||
| 89 | + } | ||
| 90 | + const options = { | ||
| 91 | + uri: uriBase, | ||
| 92 | + qs: params, | ||
| 93 | + body: '{"url": ' + '"' + imageUrl + '"}', | ||
| 94 | + headers: { | ||
| 95 | + 'Content-Type': 'application/json', | ||
| 96 | + 'Ocp-Apim-Subscription-Key' : subscriptionKey | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + request.post(options, (error, response, body) => { | ||
| 100 | + if (error) { | ||
| 101 | + console.log('Error: ', error) | ||
| 102 | + return | ||
| 103 | + } | ||
| 104 | + var lines = JSON.parse(body).regions[0].lines | ||
| 105 | + var detected_text = '' | ||
| 106 | + for (var i = 0; i < lines.length; i++) { | ||
| 107 | + for (var j = 0; j < lines[i].words.length; j++) | ||
| 108 | + detected_text += lines[i].words[j].text + ' ' | ||
| 109 | + detected_text += '\n' | ||
| 110 | + } | ||
| 111 | + console.log(detected_text) | ||
| 112 | + var text_before_translation = detected_text.split('\n').join('').toLowerCase() | ||
| 113 | + console.log(text_before_translation) | ||
| 114 | + }) | ||
| 115 | + }) | ||
| 116 | + }) | ||
| 117 | + }) | ||
| 118 | + else | ||
| 119 | + // ignore non-text-message event | ||
| 120 | + return Promise.resolve(null); | ||
| 68 | } | 121 | } |
| 69 | 122 | ||
| 70 | // 검색 기능 | 123 | // 검색 기능 |
| ... | @@ -148,21 +201,19 @@ function handleEvent(event) { | ... | @@ -148,21 +201,19 @@ function handleEvent(event) { |
| 148 | result.text = objBody.message.result.translatedText; | 201 | result.text = objBody.message.result.translatedText; |
| 149 | //번역된 문자 audio로 저장 | 202 | //번역된 문자 audio로 저장 |
| 150 | if (options.form.target == 'ko') { | 203 | if (options.form.target == 'ko') { |
| 151 | - var audio_options = { | 204 | + let audio_options = { |
| 152 | 'Text': result.text, | 205 | 'Text': result.text, |
| 153 | 'OutputFormat': 'mp3', | 206 | 'OutputFormat': 'mp3', |
| 154 | - 'VoiceId': 'Seoyeon', | 207 | + 'VoiceId': 'Amy', |
| 155 | "LanguageCode": 'ko-KR' | 208 | "LanguageCode": 'ko-KR' |
| 156 | }; | 209 | }; |
| 157 | - console.log("korean language"); | ||
| 158 | } else if (options.form.target == 'en') { | 210 | } else if (options.form.target == 'en') { |
| 159 | - var audio_options = { | 211 | + let audio_options = { |
| 160 | 'Text': result.text, | 212 | 'Text': result.text, |
| 161 | 'OutputFormat': 'mp3', | 213 | 'OutputFormat': 'mp3', |
| 162 | - 'VoiceId': 'Kendra', | 214 | + 'VoiceId': 'Amy', |
| 163 | "LanguageCode": 'en-US' | 215 | "LanguageCode": 'en-US' |
| 164 | }; | 216 | }; |
| 165 | - console.log("english language"); | ||
| 166 | } | 217 | } |
| 167 | Polly.synthesizeSpeech(audio_options, (err, data) => { | 218 | Polly.synthesizeSpeech(audio_options, (err, data) => { |
| 168 | console.log("check"); | 219 | console.log("check"); | ... | ... |
-
Please register or login to post a comment