hussain-shk's picture
Duplicate from ai4bharat/IndicTrans-MultilingualTranslation
ef23634
raw
history blame
6.63 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI4B Translation API</title>
<!-- production version, optimized for size and speed -->
<script defer src="https://use.fontawesome.com/6da64fcf5b.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css">
</head>
<body>
<section class="section container has-text-centered" id="app">
<figure class="image is-64x64 is-centered">
<img src="logo.png">
</figure>
<p class="title is-1" style="color: #E78A28">
IndicTrans API
</p>
<p class="subtitle">
Real-time Indian Language Text Translation with IndicTrans!
</p>
<hr>
<div class="">
<!-- <p>
Select Model:
</p> -->
<div class="buttons has-addons is-centered">
<button class="button" v-on:click="load_indic_en" v-bind:class="indicEnClass">Indic → English</button>
<button class="button" v-on:click="load_en_indic" v-bind:class="enIndicClass">English → Indic</button>
<button class="button" v-on:click="load_m2m" v-bind:class="m2mClass">Indic → Indic</button>
</div>
<div class="field is-horizontal is-grouped is-grouped-centered">
<p class="control">
<span class="tag is-rounded">From</span>
<div class="select is-rounded">
<select v-model="source_language">
<option v-for="option in source_options" v-bind:value="option">
{{ option }}
</option>
</select>
</div>
</p>
<p class="control">
&nbsp;
<span class="tag is-rounded">To</span>
<div class="select is-rounded">
<select class="select is-rounded" v-model="target_language">
<option v-for="option in target_options" v-bind:value="option">
{{ option }}
</option>
</select>
</div>
</p>
</div>
<br><br>
<div class="field is-horizontal is-grouped">
<p class="control is-expanded">
<textarea v-model="source_text" class="textarea is-link is-medium" placeholder="Enter Source Text"></textarea>
</p>
<p class="control is-expanded">
<textarea v-model="target_text" class="textarea is-link is-medium" placeholder="Target Text will appear here" readonly></textarea>
</p>
</div>
<div class="field is-grouped is-grouped-centered">
<div class="control">
<button class="button is-link" v-on:click="translate">Translate</button>
</div>
<div class="control">
<button class="button is-link is-light" v-on:click="clear">Clear</button>
</div>
</div>
<div v-if="process">
<progress class="progress is-small is-warning" max="100">15%</progress>
</div>
<br><br>
<div>{{ transcription_time }}</div>
</div>
</section>
</body>
<!-- inserting these scripts at the end to be able to use all the elements in the DOM -->
<script src="https://cdn.rawgit.com/mattdiamond/Recorderjs/08e7abd9/dist/recorder.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
source_language: 'English',
target_language: 'Hindi',
source_options: ['English'],
model_type: 'en-indic',
target_options: ['Assamese', 'Hindi', 'Marathi', 'Tamil', 'Bengali', 'Kannada', 'Oriya', 'Telugu', 'Gujarati', 'Malayalam', 'Punjabi'],
indicEnClass: {
'is-link': false,
'is-selected': false
},
enIndicClass: {
'is-link': true,
'is-selected': true
},
m2mClass: {
'is-link': false,
'is-selected': false
},
source_text: '',
target_text: '',
process: false,
transcription_time: '',
},
methods: {
load_indic_en: function(){
this.indicEnClass['is-link']=true;
this.indicEnClass['is-selected']=true;
this.enIndicClass['is-link']=false;
this.enIndicClass['is-selected']=false;
this.m2mClass['is-link']=false;
this.m2mClass['is-selected']=false;
this.source_options=['Assamese', 'Hindi', 'Marathi', 'Tamil', 'Bengali', 'Kannada', 'Oriya', 'Telugu', 'Gujarati', 'Malayalam', 'Punjabi'];
this.target_options=['English'];
this.source_language='Hindi';
this.target_language='English';
this.model_type='indic-en';
this.target_text='';
},
load_en_indic: function(){
this.indicEnClass['is-link']=false;
this.indicEnClass['is-selected']=false;
this.enIndicClass['is-link']=true;
this.enIndicClass['is-selected']=true;
this.m2mClass['is-link']=false;
this.m2mClass['is-selected']=false;
this.source_options=['English'];
this.target_options=['Assamese', 'Hindi', 'Marathi', 'Tamil', 'Bengali', 'Kannada', 'Oriya', 'Telugu', 'Gujarati', 'Malayalam', 'Punjabi'];
this.source_language='English';
this.target_language='Hindi';
this.model_type='en-indic';
this.target_text='';
},
load_m2m: function(){
this.indicEnClass['is-link']=false;
this.indicEnClass['is-selected']=false;
this.enIndicClass['is-link']=false;
this.enIndicClass['is-selected']=false;
this.m2mClass['is-link']=true;
this.m2mClass['is-selected']=true;
this.source_options=['Assamese', 'Hindi', 'Marathi', 'Tamil', 'Bengali', 'Kannada', 'Oriya', 'Telugu', 'Gujarati', 'Malayalam', 'Punjabi'];
this.target_options=['Assamese', 'Hindi', 'Marathi', 'Tamil', 'Bengali', 'Kannada', 'Oriya', 'Telugu', 'Gujarati', 'Malayalam', 'Punjabi'];
this.source_language='Hindi';
this.target_language='Tamil';
this.model_type='m2m';
this.target_text='';
},
translate: function(){
let formData = new FormData();
this.process=true;
formData.append('model_type', this.model_type);
formData.append('source_language', this.source_language);
formData.append('target_language', this.target_language);
formData.append('text', this.source_text);
console.log(this.source_text);
axios.post('http://164.52.218.27:5050/translate',
formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
console.log(response.data.text)
this.target_text=response.data.text
this.transcription_time = 'The inference took '+response.data.duration+' seconds.'
this.process=false
})
.catch(error => {
console.log(error);
this.target_text='Please check console'
this.process=false
});
},
clear: function(){
this.source_text='';
this.target_text='';
}
}
})
</script>
</html>