【发布时间】:2021-04-27 12:58:53
【问题描述】:
我想在浏览器中显示实时语音到文本数据。我的意思是实时,“在我说话的同时,我得到了文本输出”。我已经使用 Google 云服务 API 在 Python 中实现了语音到文本的部分。然后我使用“子进程”在 node.js 环境中运行我的 python 程序。直到现在一切都很好。接下来,我想在浏览器中显示实时文本。换句话说,我想将来自 python(现在使用子进程在 node.js 中运行)的实时文本输出发送到 Web 浏览器。我试图用socket.io做到这一点。这是我的服务器端 (node.js) 代码,其中也应用了 socket.io:
const express = require('express');
//const router = express.Router();
const {spawn} = require('child_process');
const path = require('path');
const app = express();
const http = require('http');
const server = http.createServer(app);
//const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
function runScript(){
return spawn('python3', [
"-u",
path.join(__dirname, 'script.py')
]);
}
const subprocess = runScript()
// print output of the script
app.get('/', (req,res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
subprocess.stdout.on('data', (data) => {
//console.log(`data:${data}`);
socket.on('message', (data) => {
socket.broadcast.emit('message', data);
});
});
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
上面,我首先使用子进程调用node.js中的python程序,然后我使用socket.broadcast.emit将python程序的文本输出发送到我的客户端边。客户端代码如下所示:
<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
var messages = document.getElementById('messages');
//const EventEmitter = require('events');
//const emitter = new EventEmitter()
//emitter.setMaxListeners(50)
socket.on('messages', function(data) {
document.querySelector("#style1".innerHTML = `<p>${data1}</p>`
});
</script>
</head>
<body id="messages">
<h1> This is crazy </h1>
<div id="style1">
</div>
</body>
</html>
上面,我想在
标签内显示python程序的实时文本输出。 问题是,我无法在网络浏览器中获取任何内容。 我的目标是,我想在网络浏览器中实时显示我所说的任何内容。
我对 socket.io 了解不多。事实上,这是我第一次使用这项技术。
【问题讨论】:
标签: javascript python node.js socket.io child-process