nodejs-sdk icon indicating copy to clipboard operation
nodejs-sdk copied to clipboard

nodejs sdk with v3 response does not contain conversation_analysis, speakerAnalysis sections

Open dmitrypo opened this issue 6 months ago • 1 comments

Guys, I've tried to use v3 with code below. I cant get conversation_analysis, speakerAnalysis in output data for a file with two speakers even I had set:

enableSpeakerAnalysis: true,
enableConversationAnalysis: true,
descriptiveStatisticsQuantiles: [0.5, 0.9]
import fs from 'fs';
import express from 'express';

import { Metadata, credentials } from "@grpc/grpc-js";
import { RecognitionModelOptions_AudioProcessingType, LanguageRestrictionOptions_LanguageRestrictionType, StreamingRequest, RawAudio_AudioEncoding, TextNormalizationOptions_TextNormalization } from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/ai/stt/v3/stt.js';
import { RecognizerClient } from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/ai/stt/v3/stt_service.js';

async function chunkString(str, length) {
    return str.match(new RegExp('.{1,' + length + '}', 'g'));
}

const main_v3 = (async () => {

    const app = express();
    const port = 4003;
    const host = "0.0.0.0";
    app.listen(port, host, () => console.log(`App listening on host ${host} port ${port}!`));
    
    const file = fs.readFileSync(`${process.cwd()}/output.pcm`, { encoding: 'base64' });
    
    let chunks = await chunkString(file, 4096);

    const cred = credentials.createSsl();

    const metadata = new Metadata();
    metadata.add("Authorization", `Bearer <...>`);

    const arc = new RecognizerClient("stt.api.cloud.yandex.net:443", cred);

    const recognizeStreaming = arc.recognizeStreaming(metadata);

    let ws = fs.createWriteStream(`${process.cwd()}/alldata.json`);
    ws.write("[");

    recognizeStreaming.on("data", (data) => {
        ws.write(JSON.stringify(data, null, 4));
        ws.write(",");
    });
    recognizeStreaming.on("end", (data) => {
        console.log("Process has finished. Press Ctrl+C to exit program.");
        ws.write("]");
        ws.close();
    });

    const streamingRequest = StreamingRequest.fromPartial({
        sessionOptions: {
            recognitionModel: {
                model: "general",
                textNormalization: {
                    textNormalization: TextNormalizationOptions_TextNormalization.TEXT_NORMALIZATION_ENABLED,
                    profanityFilter: true,
                    literatureText: false
                },
                audioProcessingType: RecognitionModelOptions_AudioProcessingType.REAL_TIME,
                audioFormat: {
                    rawAudio: {
                        audioEncoding: RawAudio_AudioEncoding.LINEAR16_PCM,
                        sampleRateHertz: 8000,
                        audioChannelCount: 1
                    }
                },
                languageRestriction: {
                    restrictionType: LanguageRestrictionOptions_LanguageRestrictionType.WHITELIST,
                    languageCode: ['ru-RU']
                }
            },
            speechAnalysis: {
                enableSpeakerAnalysis: true,
                enableConversationAnalysis: true,
                descriptiveStatisticsQuantiles: [0.5, 0.9],
            }
        }
    });
    
    recognizeStreaming.write(streamingRequest);


    for(const chunkData of chunks){

        const streamingChunkRequest = StreamingRequest.fromPartial({
            chunk: {
                data:chunkData
            }
        });
        
        let res = recognizeStreaming.write(streamingChunkRequest);

    }
    const resend = recognizeStreaming.end();

    console.log("instructions have been executed");

});

main_v3();

Can you help with this?

dmitrypo avatar Dec 25 '23 18:12 dmitrypo