Бесконечный цикл при попытке прочитать последнюю строку InputStreamJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Бесконечный цикл при попытке прочитать последнюю строку InputStream

Сообщение Anonymous »

Я работаю над проектом и использую Whisper.cpp для речи к тексту. Я не использую привязки Java и вместо этого собираю примеры/Stream и запускаю их, используя процесс /

Код: Выделить всё

ProcessBuilder
api. Я смог запустить пример, и теперь я в точке, мне нужно получить данные из него. Он возвращает данные через stdout , к которому я получаю доступ через WhisperProcess.getInputStream ();
Мои классы:
  • Код: Выделить всё

    Transcriber< /code>: класс для управления фактическим процессом транскрибирования < /p>
    
    Transcriber.start()
    : запускает процесс и устанавливает переменную входного потока
  • Код: Выделить всё

    Transcriber.getInputStream()
    : возвращает входной поток процесса
[*]: проверяет inputstream для конкретного слова

Код: Выделить всё

  public Checker(Transcriber transcriber) {

InputStream inputStream = transcriber.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
}
  • Код: Выделить всё

    Runnable checkText
    : запускается каждые 5 секунд для проверки текста

    Код: Выделить всё

    private final Runnable checkText = new Runnable() {
    @Override
    public void run() {
    String lastLine = "";
    
    try { // Get the last/most recent line of the output
    String currentLine;
    while ((currentLine = reader.readLine()) != null) { // Issue is here!!!
    lastLine = currentLine;
    }
    
    } catch (IOException | NullPointerException e) {
    throw new RuntimeException(e);
    }
    
    System.out.println("You said: " + lastLine);
    
    Matcher matcher = pattern.matcher(lastLine); // Use Regex to search the output
    
    if (matcher.find()) {
    System.out.println("You said \"test\"");
    } else {
    System.out.println("You did not say \"test\"");
    }
    }
    };
    
    < /code>
    < /li>
    < /ul>
    < /li>
    < /ul>
    Все работает отлично, кроме как получить Последняя строка. Программа застряла в бесконечной цикле проверки самой последней/последней строки вывода программы.  Он просто продолжает читать и никогда не достигает конца буферизации 
    Нормальный Whisper.cpp потоковой вывод

    Код: Выделить всё

    init: found 1 capture devices:
    init:    - Capture device #0: 'Starship/Matisse HD Audio Controller Analog Stereo'
    init: attempt to open default capture device ...
    init: obtained spec for input device (SDL Id = 2):
    init:     - sample rate:       16000
    init:     - format:            33056 (required: 33056)
    init:     - channels:          1 (required: 1)
    init:     - samples per frame: 1024
    whisper_init_from_file_with_params_no_state: loading model from './models/ggml-base.en.bin'
    whisper_init_with_params_no_state: use gpu    = 1
    whisper_init_with_params_no_state: flash attn = 0
    whisper_init_with_params_no_state: gpu_device = 0
    whisper_init_with_params_no_state: dtw        = 0
    whisper_init_with_params_no_state: devices    = 1
    whisper_init_with_params_no_state: backends   = 1
    whisper_model_load: loading model
    whisper_model_load: n_vocab       = 51864
    whisper_model_load: n_audio_ctx   = 1500
    whisper_model_load: n_audio_state = 512
    whisper_model_load: n_audio_head  = 8
    whisper_model_load: n_audio_layer = 6
    whisper_model_load: n_text_ctx    = 448
    whisper_model_load: n_text_state  = 512
    whisper_model_load: n_text_head   = 8
    whisper_model_load: n_text_layer  = 6
    whisper_model_load: n_mels        = 80
    whisper_model_load: ftype         = 1
    whisper_model_load: qntvr         = 0
    whisper_model_load: type          = 2 (base)
    whisper_model_load: adding 1607 extra tokens
    whisper_model_load: n_langs       = 99
    whisper_model_load:      CPU total size =   147.37 MB
    whisper_model_load: model size    =  147.37 MB
    whisper_backend_init_gpu: no GPU found
    whisper_init_state: kv self size  =    6.29 MB
    whisper_init_state: kv cross size =   18.87 MB
    whisper_init_state: kv pad  size  =    3.15 MB
    whisper_init_state: compute buffer (conv)   =   16.26 MB
    whisper_init_state: compute buffer (encode) =   85.86 MB
    whisper_init_state: compute buffer (cross)  =    4.65 MB
    whisper_init_state: compute buffer (decode) =   96.35 MB
    
    main: processing 8000 samples (step = 0.5 sec / len = 5.0 sec / keep = 0.2 sec), 8 threads, lang = en, task = transcribe, timestamps = 0 ...
    main: n_new_line = 9, no_context = 1
    
    [Start speaking]
    whisper_full_with_state: input is too short - 490 ms < 1000 ms. consider padding the input audio with silence
    whisper_full_with_state: input is too short - 990 ms < 1000 ms. consider padding the input audio with silence
    This is a test. I am speaking and it is
    whisper_full_with_state: input is too short - 690 ms < 1000 ms. consider padding the input audio with silence
    is picking up my results.
    
    whisper_print_timings:     load time =   980.88 ms
    whisper_print_timings:     fallbacks =   7 p /   0 h
    whisper_print_timings:      mel time =    68.58 ms
    whisper_print_timings:   sample time =   132.48 ms /     1 runs (  132.48 ms per run)
    whisper_print_timings:   encode time = 11970.25 ms /    31 runs (  386.14 ms per run)
    whisper_print_timings:   decode time =   772.59 ms /   242 runs (    3.19 ms per run)
    whisper_print_timings:   batchd time =   184.46 ms /   229 runs (    0.81 ms per run)
    whisper_print_timings:   prompt time =     0.00 ms /     1 runs (    0.00 ms per run)
    whisper_print_timings:    total time = 19281.81 ms
    
    с 2>/dev/null

    Код: Выделить всё

    [Start speaking]
    And it is picking up my speech.
    This is a test.
    Great new works.
    < /code>
     Вопрос < /h3>
    
     Есть ли лучший способ прочитать последнюю строку? < /li>
    
    < li> Почему reader.readline () 
    никогда == null?
  • Что я делаю не так?
Если вам нужно больше контекста необходимости больше информации, я не смогу немного ответить. Просто чтобы вы знали!

Подробнее здесь: https://stackoverflow.com/questions/793 ... nputstream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Infinite Loop, пытаясь прочитать последнюю строку inputstream
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Случайно создал бесконечный цикл при попытке сопоставления регистра.
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я прочитать InputStream через BufferedImage?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать последнюю строку из файла csv с помощью метода ReadLineAsync?
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Быстро прочитать последнюю строку текстового файла?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»