commit 9ac446ef9b059df40ff138e8b29383daa22c22eb Author: Dobromir Popov Date: Mon Mar 6 19:12:54 2023 +0200 initial commit diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..be84a64 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,12 @@ +FROM node:18 + +# Install basic development tools +RUN apt update && apt install -y less man-db sudo + +# Ensure default `node` user has access to `sudo` +ARG USERNAME=node +RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME + +# Set `DEVCONTAINER` environment variable to help with orientation +ENV DEVCONTAINER=true diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2fcdf5c --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,8 @@ +// See https://containers.dev/implementors/json_reference/ for configuration reference +{ + "name": "Untitled Node.js project", + "build": { + "dockerfile": "Dockerfile" + }, + "remoteUser": "node" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ee272c5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "arti-ai", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a441598 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "main": "web/server.js", + "scripts": { + "start": "node web/server.js" + }, + "dependencies": { + "express": "^4.18.2", + "request": "^2.88.2", + "ws": "^8.12.0" + } + } + \ No newline at end of file diff --git a/web/client.html b/web/client.html new file mode 100644 index 0000000..736e3b8 --- /dev/null +++ b/web/client.html @@ -0,0 +1,82 @@ + + + + + Real-time Speech-to-Text + + + +

Real-time Speech-to-Text

+

WebSocket disconnected

+ +

+ + + + diff --git a/web/server.js b/web/server.js new file mode 100644 index 0000000..21e00fd --- /dev/null +++ b/web/server.js @@ -0,0 +1,55 @@ +const WebSocket = require('ws'); +const wss = new WebSocket.Server({ port: 8081 }); +console.log('WebSocket server started on port 8081'); + +//we use https://hub.docker.com/r/onerahmet/openai-whisper-asr-webservice to transcribe the audio +//docker run -p 9009:9009 -d onerahmet/openai-whisper-asr-webservice + +wss.on('connection', (ws) => { + console.log('Client ' + ws._socket.remoteAddress + ' connected'); + ws.on('message', (data) => { + console.log('Received data from client: ' + data.length + ' bytes'); + var request = require('request'); + var formData = { + task: 'transcribe', + language: 'en-US', + output: 'json', + audio_file: { + value: data, + options: { + filename: 'audio.ogg', + contentType: 'audio/ogg' + } + } + }; + request.post({url:'http://192.168.0.10:9009/asr', formData: formData}, function optionalCallback(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); + ws.send(">>: " + body); + }); + + ws.send("Processing audio..."); + }); +}); + +function transcribeAudio(audioData) { + // Use a speech-to-text library to transcribe the audio data + //return transcription; + return "TEST"; +} + + +// --- web server that servers client.html +const express = require('express'); +const app = express(); +const path = require('path'); + +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname, 'client.html')); +}); + +app.listen(8080, () => { + console.log('Server listening on port 8080'); +});