sooftware / kospeech

Open-Source Toolkit for End-to-End Korean Automatic Speech Recognition leveraging PyTorch and Hydra.
https://sooftware.github.io/kospeech/
Apache License 2.0
604 stars 191 forks source link

Ksponspeech np.memmap() 관련 #160

Closed SEONGMIN-96 closed 2 years ago

SEONGMIN-96 commented 2 years ago

Ksponspeech 관련 질문입니다. 코드 관련 질문이 아닌 점 죄송합니다.

학습 이후, inference.py 에서 pcm파일을 여는 과정 중 발생한 문제입니다.

def load_audio(audio_path: str, del_silence: bool = False, extension: str = 'pcm') -> np.ndarray:
    """
    Load audio file (PCM) to sound. if del_silence is True, Eliminate all sounds below 30dB.
    If exception occurs in numpy.memmap(), return None.
    """
    try:
        if extension == 'pcm':
            signal = np.memmap(audio_path, dtype='h', mode='r').astype('float32')

            if del_silence:
                non_silence_indices = split(signal, top_db=30)
                signal = np.concatenate([signal[start:end] for start, end in non_silence_indices])

            return signal / 32767  # normalize audio

        elif extension == 'wav' or extension == 'flac':
            signal, _ = librosa.load(audio_path, sr=16000)
            return signal

    except ValueError:
        logger.debug('ValueError in {0}'.format(audio_path))
        return None
    except RuntimeError:
        logger.debug('RuntimeError in {0}'.format(audio_path))
        return None
    except IOError:
        logger.debug('IOError in {0}'.format(audio_path))
        return None

함께 제공되는 평가용 데이터의 경우, 아래의 코드에서 "ValueError: Size of available data is not a multiple of the data-type size." 에러가 발생합니다. signal = np.memmap(audio_path, dtype='h', mode='r').astype('float32') "dtype"을 지정하면서 발생하는 문제인데, 해결 방법을 알 수 없어 질문 드립니다. 혹시 비슷한 문제를 겪으신 분이 있으신지 궁금합니다.

sooftware commented 2 years ago

해당 오디오 경로가 제대로 찍히는지, 문제있는 파일은 아닌지 확인해보실래요? 저기서 에러나는 경우 해당 오디오 파일에 문제가 있을 확률이 높습니다.

SEONGMIN-96 commented 2 years ago

직접 녹음한 파일은 문제 없이 코드가 작동했습니다. 아무래도 오디오 파일 자체의 문제 같습니다. 그런데 혹시 한 가지만 질문 드리고 싶은 점이, 압축되어 손실 정도가 있는 mp3파일 등을 제외하고 정상적으로 재생되는 wav파일이나 pcm파일이 손상 되었는지 확인할 수 있는 방법이 있을까요??

관련 없는 질문인데 답변해주셔서 감사합니다.