使用Google语音转文本流MicRecognize演示时,出现错误消息

问题描述

这是错误消息

2020-08-20 21:20:37.130错误30392 --- [-worker-ELG-1-2] io.grpc.internal.ManagedChannelImpl:[Channel :((speech.googleapis.com:443 )] SynchronizationContext中未捕获的异常。惊慌!

java.util.concurrent.RejectedExecutionException:任务java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@5f5d2cc从java.util.concurrent.ScheduledThreadPoolExecutor@57e062cf拒绝了[已终止,池大小= 0,活动线程= 0,排队的任务= 0,已完成的任务= 0] 在java.util.concurrent.ThreadPoolExecutor $ AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)〜[na:1.8.0_201] 在java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)〜[na:1.8.0_201] 在java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:326)〜[na:1.8.0_201] 在java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:533)〜[na:1.8.0_201] 在java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:622)〜[na:1.8.0_201] 在io.grpc.internal.DelayedClientTransport.reprocess(DelayedClientTransport.java:297)〜[grpc-core-1.31.1.jar!/:1.31.1] 在io.grpc.internal.ManagedChannelImpl.updateSubchannelPicker(ManagedChannelImpl.java:832)〜[grpc-core-1.31.1.jar!/:1.31.1] 在io.grpc.internal.ManagedChannelImpl.access $ 4400(ManagedChannelImpl.java:106)〜[grpc-core-1.31.1.jar!/:1.31.1] 在io.grpc.internal.ManagedChannelImpl $ LbHelperImpl $ 1UpdateBalancingState.run(ManagedChannelImpl.java:1147)〜[grpc-core-1.31.1.jar!/:1.31.1] 在io.grpc.SynchronizationContext.drain(SynchronizationContext.java:95)[grpc-api-1.31.1.jar!/:1.31.1] 在io.grpc.SynchronizationContext.execute(SynchronizationContext.java:127)[grpc-api-1.31.1.jar!/:1.31.1] 在io.grpc.internal.InternalSubchannel $ TransportListener.transportReady(InternalSubchannel.java:546)[grpc-core-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.grpc.netty.ClientTransportLifecycleManager.notifyReady(ClientTransportLifecycleManager.java:43)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.grpc.netty.NettyClientHandler $ FrameListener.onSettingsRead(NettyClientHandler.java:854)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder $ FrameReadListener.onSettingsRead(DefaultHttp2ConnectionDecoder.java:479)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder $ PrefaceFrameListener.onSettingsRead(DefaultHttp2ConnectionDecoder.java:702)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2InboundFrameLogger $ 1.onSettingsRead(Http2InboundFrameLogger.java:93)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2FrameReader.readSettingsFrame(DefaultHttp2FrameReader.java:542)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2FrameReader.processpayloadState(DefaultHttp2FrameReader.java:263)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2FrameReader.readFrame(DefaultHttp2FrameReader.java:160)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2InboundFrameLogger.readFrame(Http2InboundFrameLogger.java:41)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.decodeFrame(DefaultHttp2ConnectionDecoder.java:174)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2ConnectionHandler $ FrameDecoder.decode(Http2ConnectionHandler.java:378)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2ConnectionHandler $ PrefaceDecoder.decode(Http2ConnectionHandler.java:242)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:438)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.decodeRemovalReentryProtection(BytetoMessageDecoder.java:498)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.callDecode(BytetoMessageDecoder.java:437)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.channelRead(BytetoMessageDecoder.java:276)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1486)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1235)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1282)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.decodeRemovalReentryProtection(BytetoMessageDecoder.java:498)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.callDecode(BytetoMessageDecoder.java:437)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.handler.codec.BytetoMessageDecoder.channelRead(BytetoMessageDecoder.java:276)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline $ HeadContext.channelRead(DefaultChannelPipeline.java:1410)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollStreamChannel $ EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor $ 4.run(SingleThreadEventExecutor.java:989)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap $ 2.run(ThreadExecutorMap.java:74)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)[grpc-netty-shaded-1.31.1.jar!/:1.31.1] 在java.lang.Thread.run(Thread.java:748)[na:1.8.0_201]

我的代码

public class GoogleRealAsrClient {

    public static void streamingMicRecognize() throws Exception {
        recognize();
    }


    /** Performs microphone streaming speech recognition with a duration of 1 minute. */
    public static void recognize() throws Exception {

        Resource resource = new ClassPathResource("ASR-WIZ-6dc168cfb480.json");
        GoogleCredentials credentials = GoogleCredentials.fromStream(resource.getInputStream())
                .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));

        SpeechSettings speechSettings =
                SpeechSettings.newBuilder()
                        .setCredentialsProvider(FixedCredentialsProvider.create(credentials))
                        .build();

        long speechSettingsstartTime = System.currentTimeMillis();


        ResponSEObserver<StreamingRecognizeResponse> responSEObserver = null;
        try (SpeechClient client = SpeechClient.create(speechSettings)) {
            log.info("recognize begin");
            responSEObserver =
                    new ResponSEObserver<StreamingRecognizeResponse>() {
                        ArrayList<StreamingRecognizeResponse> responses = new ArrayList<>();

                        @Override
                        public void onStart(StreamController controller) {
                            log.info("start");
                        }

                        @Override
                        public void onResponse(StreamingRecognizeResponse response) {
                            log.info("onResponse is {}",response);
                            responses.add(response);
                        }

                        @Override
                        public void onComplete() {
                            for (StreamingRecognizeResponse response : responses) {
                                StreamingRecognitionResult result = response.getResultsList().get(0);
                                SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
                                System.out.printf("Transcript : %s\n",alternative.getTranscript());
                            }
                        }

                        @Override
                        public void onError(Throwable t) {
                            log.error("recognize error",t);
                        }
                    };

            ClientStream<StreamingRecognizeRequest> clientStream = client.streamingRecognizeCallable().splitCall(responSEObserver);

            RecognitionConfig recognitionConfig =
                    RecognitionConfig.newBuilder()
                            .setEncoding(AudioEncoding.LINEAR16)
                            .setLanguageCode("en-US")
                            .setSampleRateHertz(16000)
                            .build();
            StreamingRecognitionConfig streamingRecognitionConfig =
                    StreamingRecognitionConfig.newBuilder().setConfig(recognitionConfig).build();

            StreamingRecognizeRequest request =
                    StreamingRecognizeRequest.newBuilder()
                            .setStreamingConfig(streamingRecognitionConfig)
                            .build(); // The first request in a streaming call has to be a config

            clientStream.send(request);

            File file = new File("/home/google/1.pcm");
            File file2 = new File ("/home/google/2.pcm");

            byte[] data1 = toByteArray(new FileInputStream(file));
            byte[] data2 = toByteArray(new FileInputStream(file2));

            request = StreamingRecognizeRequest.newBuilder()
                            .setAudioContent(ByteString.copyFrom(data1))
                            .build();
            clientStream.send(request);
            Thread.sleep(200);
            request = StreamingRecognizeRequest.newBuilder()
                    .setAudioContent(ByteString.copyFrom(data2))
                    .build();
            clientStream.send(request);

        } catch (Exception e) {
            log.error("recognize error",e);
        }

        log.info("recognize end");
        responSEObserver.onComplete();
    }


    public static byte[] toByteArray(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int n = 0;
        while (-1 != (n = input.read(buffer))) {
            output.write(buffer,n);
        }
        return output.toByteArray();
    }
}

 <dependencyManagement>
     <dependencies>
         <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>9.1.0</version>
            <type>pom</type>
             <scope>import</scope>
           </dependency>
        </dependencies>
 </dependencyManagement>

 <dependency>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-speech</artifactId>
 </dependency>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)