Setting up google speech to text on google cloud - Error: spawn SoX ENOENT
Setting up google speech to text on google cloud - Error: spawn SoX ENOENT
我学习了很多关于 Google 的语音转文本的教程,并且在本地一切正常。我的设置是使用 websockets (socket.io) 在客户端 Angular 应用程序和 node/express 后端之间进行通信,后者对语音 API 进行服务器端调用。我正在使用 streaming-recognize
( https://cloud.google.com/speech-to-text/docs/streaming-recognize ) 读取麦克风流和 return 结果。
这在本地完全有效,但是当 运行 它在 gcloud app deploy
实例上时我有一个问题,因为我实际上没有安装 SoX
依赖(通过 brew install sox
在本地完成。这是他们设置麦克风流的示例的要求。
我想我需要设置一个可以使用 SoX 提供的虚拟机实例,但我也觉得这似乎有点过分了 - 有替代方案吗?我确实尝试手动解析麦克风数据流并将其发送为 Uint8Array/ArrayBuffer chunkns 并取得了一些成功,但并不多。我还阅读了一些关于处理用户麦克风流的非 SoX 方法的假设,但无济于事。例如与 recordingrtc.
问题是 - 我需要做什么才能让它在 gcloud 中运行?设置一个虚拟机实例,安装 sox,然后使用它?或者有没有 SoX-free 的方法来获得这个 运行?
欢迎指导!
这是我在 gcloud 上遇到的服务器错误 - 在我看来是因为它的路径上没有 SoX:
Error: spawn sox ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19) at onErrorNT (internal/child_process.js:469:16) at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn sox',
path: 'sox',
spawnargs: [
'--default-device',
'--no-show-progress',
'--rate',
16000,
'--channels',
1,
'--encoding',
'signed-integer',
'--bits',
'16',
'--type',
'wav',
'-'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! <APPNAME>@0.0.0 start:prod: `node server.js;`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the <APPNAME>@0.0.0 start:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-11-30T22_12_35_041Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! <APPNAME>@0.0.0 start: `npm run start:prod`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the <APPNAME>@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-11-30T22_12_35_074Z-debug.log
您正在尝试设置 Google Speech to Text 并希望将其部署到 Google App Engine ( gcloud app deploy )。
但是 Google Speech to Text 具有 Sox 依赖性,这需要在操作系统中安装 Sox CLI。
因此您需要使用具有自定义运行时的 App Engine 柔性环境。在Dockerfile中,可以指定安装SOX CLI。
我能够使用 quickstart and the sample code from the nodejs-speech repository 中提供的步骤成功部署使用 Speech to Text API 的 App Engine Flex 应用程序。请看一下。
************** 更新 **************
Docker 文件:
FROM gcr.io/google-appengine/nodejs
# Working directory is where files are stored, npm is installed, and the application is launched
WORKDIR /app
# Copy application to the /app directory.
# Add only the package.json before running 'npm install' so 'npm install' is not run if there are only code changes, no package changes
COPY package.json /app/package.json
RUN apt-get update
RUN apt-get install -y sox
RUN npm install
COPY . /app
# Expose port so when the container is launched you can curl/see it.
EXPOSE 8080
# The command to execute when Docker image launches.
CMD ["npm", "start"]
请尝试上面的 Dockerfile 并根据您的需要进行调整,这是一个如何安装 sox 的示例。
我学习了很多关于 Google 的语音转文本的教程,并且在本地一切正常。我的设置是使用 websockets (socket.io) 在客户端 Angular 应用程序和 node/express 后端之间进行通信,后者对语音 API 进行服务器端调用。我正在使用 streaming-recognize
( https://cloud.google.com/speech-to-text/docs/streaming-recognize ) 读取麦克风流和 return 结果。
这在本地完全有效,但是当 运行 它在 gcloud app deploy
实例上时我有一个问题,因为我实际上没有安装 SoX
依赖(通过 brew install sox
在本地完成。这是他们设置麦克风流的示例的要求。
我想我需要设置一个可以使用 SoX 提供的虚拟机实例,但我也觉得这似乎有点过分了 - 有替代方案吗?我确实尝试手动解析麦克风数据流并将其发送为 Uint8Array/ArrayBuffer chunkns 并取得了一些成功,但并不多。我还阅读了一些关于处理用户麦克风流的非 SoX 方法的假设,但无济于事。例如与 recordingrtc.
问题是 - 我需要做什么才能让它在 gcloud 中运行?设置一个虚拟机实例,安装 sox,然后使用它?或者有没有 SoX-free 的方法来获得这个 运行? 欢迎指导!
这是我在 gcloud 上遇到的服务器错误 - 在我看来是因为它的路径上没有 SoX:
Error: spawn sox ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19) at onErrorNT (internal/child_process.js:469:16) at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn sox',
path: 'sox',
spawnargs: [
'--default-device',
'--no-show-progress',
'--rate',
16000,
'--channels',
1,
'--encoding',
'signed-integer',
'--bits',
'16',
'--type',
'wav',
'-'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! <APPNAME>@0.0.0 start:prod: `node server.js;`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the <APPNAME>@0.0.0 start:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-11-30T22_12_35_041Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! <APPNAME>@0.0.0 start: `npm run start:prod`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the <APPNAME>@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-11-30T22_12_35_074Z-debug.log
您正在尝试设置 Google Speech to Text 并希望将其部署到 Google App Engine ( gcloud app deploy )。
但是 Google Speech to Text 具有 Sox 依赖性,这需要在操作系统中安装 Sox CLI。
因此您需要使用具有自定义运行时的 App Engine 柔性环境。在Dockerfile中,可以指定安装SOX CLI。
我能够使用 quickstart and the sample code from the nodejs-speech repository 中提供的步骤成功部署使用 Speech to Text API 的 App Engine Flex 应用程序。请看一下。
************** 更新 **************
Docker 文件:
FROM gcr.io/google-appengine/nodejs
# Working directory is where files are stored, npm is installed, and the application is launched
WORKDIR /app
# Copy application to the /app directory.
# Add only the package.json before running 'npm install' so 'npm install' is not run if there are only code changes, no package changes
COPY package.json /app/package.json
RUN apt-get update
RUN apt-get install -y sox
RUN npm install
COPY . /app
# Expose port so when the container is launched you can curl/see it.
EXPOSE 8080
# The command to execute when Docker image launches.
CMD ["npm", "start"]
请尝试上面的 Dockerfile 并根据您的需要进行调整,这是一个如何安装 sox 的示例。