| const { createApp, ref, onMounted, computed, watch } = Vue; |
| import { HfInference } from "https://cdn.skypack.dev/@huggingface/inference@latest"; |
|
|
| const app = createApp({ |
| setup() { |
| const token = ref(localStorage.getItem("token") || ""); |
| const models = ref(["openai/whisper-tiny", "facebook/wav2vec2-large-960h-lv60-self", "openai/whisper-large-v2"]); |
| const selectedAudio = ref("clear-audio-1.wav"); |
| const selectedModel = ref(""); |
| const loading = ref(false); |
| const didErrorOccur = ref(false) |
| const audioFiles = ref(["clear-audio-1.wav", "clear-audio-2.wav", |
| "unclear-audio-1.wav", "unclear-audio-2.wav"]); |
| const recognizedText = ref("") |
|
|
| const statusMessage = computed(() => { |
| if (loading.value) return "Loading..." |
| return "Ready" |
| }) |
|
|
| const run = async () => { |
| reset() |
| loading.value = true; |
| try { |
| const hf = new HfInference(token.value); |
| const audioData = await (await fetch(selectedAudio.value)).arrayBuffer() |
| const result = await hf.automaticSpeechRecognition({ |
| data: audioData, |
| model: selectedModel.value |
| }); |
| console.log(result) |
| recognizedText.value = result.text |
| loading.value = false; |
| } catch (e) { |
| console.error(e); |
| loading.value = false; |
| didErrorOccur.value = true |
| } |
| }; |
| const reset = () => { |
| didErrorOccur.value = false |
| loading.value = false |
| recognizedText.value = "" |
| } |
|
|
| watch(selectedAudio, () => { |
| reset() |
| }) |
|
|
| watch(selectedModel, () => { |
| reset() |
| }) |
|
|
| onMounted(async () => { |
| const localStorageToken = localStorage.getItem("token") |
| if (localStorageToken) { |
| token.value = localStorageToken; |
| } |
| selectedModel.value = models.value[0] |
| }); |
|
|
| return { |
| token, |
| run, |
| audioFiles, |
| selectedAudio, |
| models, |
| selectedModel, |
| loading, |
| statusMessage, |
| recognizedText |
| }; |
| }, |
| }); |
|
|
| app.mount("#app"); |
|
|