Есть ли программное обеспечение, которое может скремблировать / размыть часть аудиофайла автоматически?

Это мой второй вопрос, когда-либо опубликованный здесь, поэтому, пожалуйста, дайте мне знать, если я сделал что-то не так.

Я столкнулся с интересной проблемой сегодня. Я работаю в колл-центре, и один из клиентов моей компании проверяет информацию о том, хочет ли он получить номера банковских счетов от клиентов, и хочет, чтобы наши агенты по обслуживанию клиентов вводили указанные номера банковских счетов на внешний веб-сайт клиентов.

Эти номера банковских счетов нигде не будут сохраняться в наших локальных базах данных, но аудио, в котором наши CSR собирают номера банковских счетов, будет сохранено в нашей системе. Простой текст не будет доступен, но звуковые файлы будут. У меня вопрос: есть ли способ автоматического шифрования определенной части записи автоматически с помощью программы? Я знаю, что это серьезный выстрел в темноте. Спасибо.

1 ответ

Хотя ваш вопрос не касается конкретной проблемы, связанной с программированием, я постараюсь ответить на нее, поскольку работаю над чем-то похожим.

Можем ли мы автоматически закодировать определенную часть записи автоматически с помощью программы?
Мы, конечно, можем. Это будет зависеть от того, насколько сложным вы бы хотели это сделать.

В то время как существуют сложные методы, с очень простой концептуальной точки зрения, нам потребуется взять записанный аудиофайл и обработать его на следующих этапах.

  1. Разделение слов в аудиофайле: для этого потребуется распознавание тишины
    между словами.
  2. Передайте каждое слово через систему распознавания речи
  3. Придумайте метод, чтобы карабкаться. Вы хотите замолчать, jumble, заполните его white noise или же encode,
  4. Сравните распознанное слово со словом, которое вы хотите scramble если есть совпадение scramble на основе выбранного метода
  5. Объединить (concatenate) все слова в правильной последовательности и сохранить его.

Я собрал базовый прототип, который будет делать выше, кроме (4). Программа интенсивно использует Pydub, который предоставляет более простые способы управления аудио. Об этом можно узнать здесь.

Программа в основном,

1) Я скачал предварительно записанный WAV-файл с открытым исходным кодом для номеров 0 в 10 и связал их, используя pydub,
Программа нарезает данный аудиофайл кусками по одной секунде. Я использовал смелость, чтобы отделить каждое слово так, чтобы оно вписывалось в одно второе окно. В реальной жизни это не так.

2) Затем он пропускает слово через механизм распознавания речи Google и показывает распознанное слово. Как вы увидите слово six не распознается должным образом. Вам понадобится надежный speech recognition engine для этого.

3) Программа предлагает три разных scramble метод.

  • а) поменять слово
  • б) заменить слово на эквивалентное white noise
  • в) Заменить слово на silence

4) Затем выберите три слова 9, 4 а также 2 и применить выше scramble метод и заменить соответствующий файл слова

5) Затем он объединяет все слова вместе с зашифрованными словами в правильном порядке и создает выходной файл.

Примечание. У меня не было достаточно времени, чтобы добавить сравнение между словом "схватка" и распознанным словом.

Дайте мне знать, если есть какие-либо вопросы.

**** Демо-код:****

""" Declarations """ 
import speech_recognition as sr
from pydub import AudioSegment
from pydub.silence import split_on_silence
from pydub.generators import WhiteNoise
from pydub.playback import play



""" Function for Speech Recognition """ 
def processAudio(WAV_FILE):
    r = sr.Recognizer()
    with sr.WavFile(WAV_FILE) as source:
        audio = r.record(source) # read the entire WAV file

    # recognize speech using Google Speech Recognition
    try:  
        print("recognizedWord=" + r.recognize_google(audio))
    except sr.UnknownValueError:
        print("Could not understand audio")
    except sr.RequestError as e:
        print("Could not request results from GSR; {0}".format(e))

""" Function to scramble word based upon choice """ 
def scramble_audio(aWord, option):
    scramble_file = export_path + "slice" + str(aWord) +".wav"
    scramble_audioseg = AudioSegment.from_wav(scramble_file)    
    aWord_length = scramble_audioseg.__len__() #Get length of word segment to scramble

    if option == "reverse":     #Reverse word to scramble
        scrambled_word = scramble_audioseg.reverse()        

    elif option == "whiteNoise":    #Replace word to scramble with white noise     
        wn = WhiteNoise()           #Instantiate White Noise Object         
        aWord_length = scramble_audioseg.__len__()              #Get length of word segment
        scrambled_word = wn.to_audio_segment(duration=aWord_length) #Create audio_segment

    elif option == "silence":               #Replace word to scramble with silence
        scrambled_word =  AudioSegment.silent(duration=aWord_length) 

    print ("Scrambling and Exporting %s" % scramble_file)
    scrambled_word.export(scramble_file, format="wav") #Export merged audio file


if __name__ == "__main__":

    export_path = ".//splitAudio//"
    in_audio_file = "0-10.wav"
    out_audio_file = export_path + "scrambledAudio.wav"

    #Read main audio file to be processed. Assuming in the same folder as this script
    sound = AudioSegment.from_wav(in_audio_file)

    sec2_splice = 1  #Splice threshold in sec

    audio_length = len(sound) # Total Audio Length In millisec

    q, r = divmod(audio_length, sec2_splice) #Get quotient and remainder 

    #Get total segments and rounds to next greater integer 
    total_segments=  (q + int(bool(r)) ) / 1000  #Converting to sec

    #Iterate through slices every one second and export
    print ("")
    n=0
    while n <= total_segments:
        print ("Making slice  from %d to %d  (sec)" % (n , sec2_splice ))    
        temp_object = sound[ (n * 1000) : (sec2_splice * 1000)] #Slicing is done in millisec
        myaudio_file = export_path + "slice" + str(n) +".wav"
        temp_object.export(myaudio_file , format="wav") 
        print ("Trying to recognize %d " %n)
        processAudio(myaudio_file)   
        n = sec2_splice
        sec2_splice += 1    


    #Scramble desired audio slice
    print ("")
    scramble_word = 9
    scramble_audio(scramble_word, "reverse" )

    scramble_word = 4
    scramble_audio(scramble_word, "whiteNoise" )

    scramble_word = 2
    scramble_audio(scramble_word, "silence" )
    #Combine modified audio

    final_audio = AudioSegment.empty()  #Create empty  AudioSegment
    print ("")
    i = 0
    while i <= total_segments:
        temp_audio_file = export_path + "slice" + str(i) +".wav"
        temp_audio_seg = AudioSegment.from_wav(temp_audio_file)
        print ("Combining %s"  % temp_audio_file )
        final_audio = final_audio.append(temp_audio_seg, crossfade=0)
        i += 1

    print ("Exporting final audio %s"  % out_audio_file )
    final_audio.export(out_audio_file , format="wav")

Выход:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 

Making slice  from 0 to 1  (sec)
Trying to recognize 0 
recognizedWord=0
Making slice  from 1 to 2  (sec)
Trying to recognize 1 
recognizedWord=1
Making slice  from 2 to 3  (sec)
Trying to recognize 2 
Could not understand audio
Making slice  from 3 to 4  (sec)
Trying to recognize 3 
recognizedWord=3
Making slice  from 4 to 5  (sec)
Trying to recognize 4 
recognizedWord=4
Making slice  from 5 to 6  (sec)
Trying to recognize 5 
recognizedWord=5
Making slice  from 6 to 7  (sec)
Trying to recognize 6 
recognizedWord=sex
Making slice  from 7 to 8  (sec)
Trying to recognize 7 
recognizedWord=7
Making slice  from 8 to 9  (sec)
Trying to recognize 8 
recognizedWord=8
Making slice  from 9 to 10  (sec)
Trying to recognize 9 
recognizedWord=9
Making slice  from 10 to 11  (sec)
Trying to recognize 10 
recognizedWord=10

Scrambling and Exporting .//splitAudio//slice9.wav
Scrambling and Exporting .//splitAudio//slice4.wav
Scrambling and Exporting .//splitAudio//slice2.wav

Combining .//splitAudio//slice0.wav
Combining .//splitAudio//slice1.wav
Combining .//splitAudio//slice2.wav
Combining .//splitAudio//slice3.wav
Combining .//splitAudio//slice4.wav
Combining .//splitAudio//slice5.wav
Combining .//splitAudio//slice6.wav
Combining .//splitAudio//slice7.wav
Combining .//splitAudio//slice8.wav
Combining .//splitAudio//slice9.wav
Combining .//splitAudio//slice10.wav
Exporting final audio .//splitAudio//scrambledAudio.wav
>>> 
Другие вопросы по тегам