stt save, reset, ui and cleanup

master
km0 3 years ago
parent af85f78f1f
commit 5969005015

@ -9,9 +9,14 @@
<link rel="stylesheet" href="style.css">
</head>
<body>
<button id="save">Save</button>
<button id="reset">Reset</button>
<div id="result"></div>
<div id="process"></div>
<div class="ui">
<button id="save">Save</button>
<button id="reset">Reset</button>
</div>
<div class="speech">
<div id="result"></div>
<div id="process"></div>
</div>
</body>
</html>

@ -1,39 +1,37 @@
// ARRAY DI PAROLE NORMALE, POI PYTHON -> split, for loop, POS e <span con classe POS in html
// The Myth of the Natural Language %%
// Speech2Design!!
// Welcome to the core-code of the Speech-to-text
// The tool we are gonna use is the "Web Speech API".
// The tool we are gonna use is the "Web Speech API".
// What is an API?
// An API is a set of defined rules that explain how computers or applications communicate with one another.
// An API is a set of defined rules that explain how computers or applications communicate with one another.
// APIs sit between an application and the web server, acting as an intermediary layer that processes data transfer between systems.
// GLOBAL VARIABLES
let interimTranscripts = ""; // Variable for interim results, the Speech-to-text try different worlds before to give us the most correct one.
let allTheInterim = ""; // Variable to store *all* the interim results
let finalTranscripts = ""; // Variable for the... final transcripts
let interimTranscripts = ""; // Variable for interim results, the Speech-to-text try different worlds before to give us the most correct one.
let allTheInterim = ""; // Variable to store *all* the interim results
let finalTranscripts = ""; // Variable for the final transcripts
// To define bridges to the html file:
let speech = document.getElementById("result"); // where to print the final result of the recognition
let process = document.getElementById("process"); // and here the process, print the current sentence with interim results
// To define bridges to the html file:
let speech = document.getElementById("result"); // where to print the final result of the recognition
let process = document.getElementById("process"); // and here the process, print the current sentence with interim results
// TEXT STORAGE
let textStorage = localStorage.getItem("speech"); // This define where to save the results.
speech.innerHTML = textStorage; // LocalStorage is a type of web storage that allows you to access a local Storage object and store the data in the browser with no expiration date.
let textStorage = localStorage.getItem("speech"); // This define where to save the results.
speech.innerHTML = textStorage; // LocalStorage is a type of web storage that allows you to access a local Storage object and store the data in the browser with no expiration date.
finalTranscripts = textStorage;
// RESET STORAGE
let resetStorage = document.getElementById("reset"); // This will just reset, through a button, all the results got by that moment.
let resetStorage = document.getElementById("reset"); // This will just reset, through a button, all the results got by that moment.
resetStorage.addEventListener("click", () => { // Reset everything!!!
// Reset everything!!!
resetStorage.addEventListener("click", () => {
allTheInterim = "";
finalTranscripts = "";
interimTranscripts = "";
@ -44,12 +42,12 @@ resetStorage.addEventListener("click", () => { // Reset everything!!!
// SAVE FILE
let saveButton = document.getElementById("save"); // This will let you save the results in your desktop through a button
let saveButton = document.getElementById("save"); // This will let you save the results in your desktop through a button
saveButton.addEventListener("click", () => {
download("speech.txt", localStorage.getItem("speech"));
});
function download(filename, text) {
function download(filename, text) {
var element = document.createElement("a");
element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text));
element.setAttribute("download", filename);
@ -64,52 +62,58 @@ function download(filename, text) {
// START LISTENING
startConverting(); // Finally, here is where the magic happen.
startConverting(); // Finally, here is where the magic happen.
function startConverting() {
if ("webkitSpeechRecognition" in window) { // Declaring here the API
function startConverting() {
if ("webkitSpeechRecognition" in window) {
// Declaring here the API
let speechRecognizer = new webkitSpeechRecognition() || new SpeechRecognition();
// And here the settings, like
speechRecognizer.continuous = true; // if the recognition should continue or stop when you finish to talk
speechRecognizer.interimResults = true; // if you want also get the interim results
speechRecognizer.lang = "en-US"; // which language you want to recognize (!!)
speechRecognizer.start(); // and then start :))
finalTranscripts = "";
// And here the settings, like
speechRecognizer.continuous = true; // if the recognition should continue or stop when you finish to talk
speechRecognizer.interimResults = true; // if you want also get the interim results
speechRecognizer.lang = "en-US"; // which language you want to recognize (!!)
speechRecognizer.start(); // and then start :))
// EVENTS
// ON END
speechRecognizer.onend = function () { // If the Speech-to-text stops to work, it will be notified in the console...
speechRecognizer.onend = function () {
// If the Speech-to-text stops to work, it will be notified in the console...
console.log("Speech recognition service disconnected");
speechRecognizer.start(); // and then restart itself
speechRecognizer.start(); // and then restart itself
};
// ON SOUND START
speechRecognizer.onsoundstart = function () { // When it starts the Speech-to-text, it will be notified in the console
speechRecognizer.onsoundstart = function () {
// When it starts the Speech-to-text, it will be notified in the console
console.log("Some sound is being received");
};
// ON ERROR
speechRecognizer.onerror = function (event) {};
speechRecognizer.onerror = function (event) {
// Log the error
console.log(event);
};
// ON RESULT
speechRecognizer.onresult = function (event) { // Here is where the Speech-to-text show itself on the web page.
interimTranscripts = "";
speechRecognizer.onresult = function (event) {
// Here is where the Speech-to-text show itself on the web page.
interimTranscripts = "";
for (let i = event.resultIndex; i < event.results.length; i++) {
let transcript = event.results[i][0].transcript;
// console.log(event.results[i][0]);
transcript.replace("\n", "<br>");
if (event.results[i].isFinal) {
// finalTranscripts += ' <span class="oneTranscript"> '+transcript+' </span> \n';
finalTranscripts += transcript+'\n';
} else { // There are also shown the interim results and according to their "confidence" (the percentage of how much the word is correct) the color of each word could change
finalTranscripts += transcript + "\n";
} else {
// There are also shown the interim results and according to their "confidence" (the percentage of how much the word is correct) the color of each word could change
interimTranscripts += transcript;
allTheInterim += `<span style="opacity: ${
event.results[i][0].confidence + 0.3
}">${interimTranscripts}</span> `;
allTheInterim += `<span style="opacity:
${event.results[i][0].confidence + 0.3}
"> ${interimTranscripts} </span> `;
}
}
process.innerHTML = allTheInterim;
@ -118,14 +122,16 @@ function startConverting() {
speech.innerHTML = final;
textStorage = final;
console.log(textStorage);
localStorage.setItem("speech", final); // Here is where is stored the recognized text in the Local Storage
textStorage = final;
cleanup = localStorage.setItem(
"speech",
final.replace(/(<span class="interim">)/g, "").replace(/(<\/span>)/g, "")
); // Here is where is stored the recognized text in the Local Storage
};
} else { // Unfortunately this API works only on Chrome...
} else {
// Unfortunately this API works only on Chrome...
speech.innerHTML = "At the moment this works only in Chrome, sorry";
}
}
// 2021, copyleft Kamo and Funix
// 2021, copyleft Kamo and Funix

@ -1,15 +1,53 @@
html,
body {
margin: 0;
}
.interim {
color: #999;
}
#result {
max-width: 800px;
margin: 0 auto;
font-size: 2rem;
}
#process {
max-width: 800px;
.speech {
display: flex;
margin: 0 auto;
margin-top: 50px;
padding: 16px;
}
.speech > * {
flex: 1 0 50%;
}
.ui {
padding: 16px;
text-align: right;
}
#save {
border: 1px solid currentColor;
border-radius: 1rem;
font-size: 1rem;
padding: 0.25em 0.5em;
font-family: Arial, Helvetica, sans-serif;
background-color: transparent;
cursor: pointer;
}
#save:hover {
color: green;
}
#reset {
border: none;
background-color: transparent;
font-family: Arial, Helvetica, sans-serif;
font-size: 1rem;
cursor: pointer;
}
#reset:hover {
color: red;
}

@ -12,3 +12,86 @@ vscode
py + nltk
console
chrome :(
4 hrs
----
18:00 45''
introduction:
presentations
some theoric references
outlines and releated works
some questions
18:45 30''
workflow tour:
speech js
parse python
scrape python
design html + css
print js
19:15 45''
hands on aka speech and chat:
fast UI tutorial
3 groups
chat using the questions as a starting point
20:00 30''
break + eat something
20:30 45''
hands on design:
start from the speech dataset
start from our templates
start from a sketch
21:15 30''
print and bind
21:45
presenting the results 30''
----
4 hrs
----
18:00 45''
introduction:
presentations
some theoric references
outlines and releated works
some questions
18:45 30''
workflow:
speech
parse
scrape
design
print
19:15 45''
hands on aka speech and chat:
fast UI tutorial
3 groups
chat using the questions as a starting point
20:00 30''
break + eat something
20:30 45''
hands on design:
start from the speech dataset
start from our templates
start from a sketch
21:15 30''
print and bind
21:45
presenting the results 30''

Loading…
Cancel
Save