Есть ли программное обеспечение, которое может скремблировать / размыть часть аудиофайла автоматически?
Это мой второй вопрос, когда-либо опубликованный здесь, поэтому, пожалуйста, дайте мне знать, если я сделал что-то не так.
Я столкнулся с интересной проблемой сегодня. Я работаю в колл-центре, и один из клиентов моей компании проверяет информацию о том, хочет ли он получить номера банковских счетов от клиентов, и хочет, чтобы наши агенты по обслуживанию клиентов вводили указанные номера банковских счетов на внешний веб-сайт клиентов.
Эти номера банковских счетов нигде не будут сохраняться в наших локальных базах данных, но аудио, в котором наши CSR собирают номера банковских счетов, будет сохранено в нашей системе. Простой текст не будет доступен, но звуковые файлы будут. У меня вопрос: есть ли способ автоматического шифрования определенной части записи автоматически с помощью программы? Я знаю, что это серьезный выстрел в темноте. Спасибо.
1 ответ
Хотя ваш вопрос не касается конкретной проблемы, связанной с программированием, я постараюсь ответить на нее, поскольку работаю над чем-то похожим.
Можем ли мы автоматически закодировать определенную часть записи автоматически с помощью программы?
Мы, конечно, можем. Это будет зависеть от того, насколько сложным вы бы хотели это сделать.
В то время как существуют сложные методы, с очень простой концептуальной точки зрения, нам потребуется взять записанный аудиофайл и обработать его на следующих этапах.
- Разделение слов в аудиофайле: для этого потребуется распознавание тишины
между словами. - Передайте каждое слово через систему распознавания речи
- Придумайте метод, чтобы карабкаться. Вы хотите замолчать,
jumble
, заполните егоwhite noise
или жеencode
, - Сравните распознанное слово со словом, которое вы хотите
scramble
если есть совпадениеscramble
на основе выбранного метода - Объединить (
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
>>>