如何使用声音识别绕过验证码

在Internet上,验证码仍然保持相关性,作为一种选择,通过单击相应的按钮,可以从图像中收听文本。 如果有人熟悉下面的图片和/或对如何使用离线声音识别系统解决问题感兴趣,建议您阅读它。



我们不会折磨语音识别领域的专家的好奇心,立即指出,尚未开发出用于指定目的的专有语音识别系统。 本文使用了良好的旧Pocketsphinx,但具有一定程度的自定义。

准备工作


“您进入在计算机上具有语音控制功能的竞争对手的办公室,大喊“ Sudo Era减去Eref Home”,然后逃跑。” 从评论。
因此,验证码可以通过单击相应的按钮来聆听自己的声音。 如果保存生成的声音文件,则可以找到.mp3中的一小段音频。 同时,事实证明,验证码以女性或男性的声音提供。 男人和女人发出的相同声音的“绘画”是不同的:



他们听起来既字母(又俄语)和数字。

乍一看,一切都令人难过。 但是有一个积极的一点是,相同字母的声音是一致的。

到目前为止,这些知识没有太大帮助。 如何将所有这些内容推送到Sphinx的包装中?

安装Pocketsphinx,俄罗斯的声音模型


*在哈布雷(Habré)上有一篇文章 ,其中通过重定向声音输出将声音在线输入到Google翻译。 如果所有这些都适用于本案例,那么这可以结束这篇文章。

在Windows(以及Linux)上安装Pocketsphinx本身并不是很复杂- 下载 ,安装。

由于默认情况下,pocketsphinx随附英语,声学模型,字典,因此俄语也需要全部相同。

下载俄语版本的链接

在文件结构中解压俄语模型后,可以尝试使用以下python代码测试.wav文件解码器-text.wav:

import os from pocketsphinx import AudioFile, get_model_path, get_data_path #from pocketsphinx import Pocketsphinx model_path = get_model_path() data_path = get_data_path() config = { 'verbose': False, 'audio_file': os.path.join(data_path, 'C://python3//decoder-test.wav'), 'buffer_size': 2048, 'no_search': False, 'full_utt': False, 'hmm': os.path.join(model_path, 'C://python3//zero_ru_cont_8k_v3//zero_ru.cd_cont_4000'), 'lm': os.path.join(model_path, 'C://python3//zero_ru_cont_8k_v3//ru.lm'), 'dict': os.path.join(model_path, 'C://python3//zero_ru_cont_8k_v3//ru.dic') } audio = AudioFile(**config) for phrase in audio: print(phrase) 

音频文件的内容应显示在以下行:“ Ilya Ilf Evgeny Petrov Golden Calf”。
如果没有输出(如我的情况),则需要将解码器test.wav转换为另一种音频格式。

您将为此需要ffmpeg。

ffmpeg


下载ffmpeg实用程序后,将解码器-test.wav放在C:\ python3 \ ffmpeg \ bin中。
接下来,转换命令行:

 ffmpeg -i decoder-test.wav -ar 16000 decoder-test-.wav 

接下来,用python代码修复到源音频文件的链接:

 'audio_file': os.path.join(data_path, 'C://python3//decoder-test-.wav'), 

现在,在编写代码之后:



没错,您必须等到第二次出现后,代码才能非常缓慢地运行-大约20秒。

我们按照相同的原理将音频验证码从mp3转换为wav,然后从验证码中输入音频。 看一下代码:



某种无知,但有结果。 如果什么也没有提出来,那将更加糟糕。 就像女性的声音一样:



让我们看看如何改善结果并同时加速结果。

词汇量


您将需要自己的字典。 在这种情况下,它将由俄语字母的所有字母(b,s,b除外)和数字组成。

所有字符必须放在纯文本文件中,每行以UTF-8编码。

现在您需要转换字典。
您将需要安装perl(转换器需要它才能工作)。
接下来,下载用于转换ru4sphinx的项目。

并转换先前创建的字典:

  C:\ru4sphinx-master\ru4sphinx-master\text2dict> perl dict2transcript.pl my_dictionary.txt my_dictionary_out.txt. 

输出是工作字典:



字典扩展名必须从.txt重命名为.dic格式,并且文件本身应放在可访问的位置。

在python代码中,我们将通过注释掉旧字典来指示字典的位置:

 #'dict': os.path.join(model_path, 'C://python3//zero_ru_cont_8k_v3//ru.dic') 'dict': os.path.join(model_path, 'C://python3//my_dict.dic') 

运行该程序并查看结果:



更好,但同样慢,而且并非所有字母都正确识别。

创建自己的模型


这将显着提高工作速度,并降低结果准确性。

让我们从说明中走一小段路。

通过该链接将以前以.txt格式(不是.dic!)创建的字典上载到网站:



单击“编译...”。 在输出中,您可以将结果包下载到.tgz归档文件中(其中包含所有必要的文件):



接下来,我们从存档中获取扩展名为.lm(我们的模型)的文件。

让我们通过用新制作的模型替换模型来修复python识别脚本:

 #'lm': os.path.join(model_path, 'C://python3//zero_ru_cont_8k_v3//ru.lm'), 'lm': os.path.join(model_path, 'C://python3//my_model//1896.lm'), 

我们尝试:



它的工作速度更快-不到一秒钟,此外,所有字母均已定义。
但是这里需要一点说明。

并非所有字符都可以正确识别,并且如果显示的字符不是正确的字母,而不是正确的字母,则可以通过匹配字母的对应关系来手动更正先前创建的.dic词典。

例如,代替字母a,显示e。 有必要从字典e中提取一行:
ry
转移 (删除旧的),更改字母:
ry
但是由于字母“ a”已经在字典中,因此您需要在字母中添加“(2)”(或3,4),通常是一个序列号,具体取决于字典中已有多少声音:
a(2) ry

无需重新转换字典。 用这种简单的方法,您几乎可以“拾取”所有字母的音素。

Cherchez la femme


模型和词汇工作,但不带有女性声音。 如果验证码的声音是女性的,那么输出中什么也没有。 这同时是好是坏。 首先讲好。

如果您在启动程序时一无所获,则说明我们正在处理女性声音,因此您可以过滤“女性”验证码。

但是如何处理他们呢?
在这里,您需要进行转换。
例如,使用“男性”验证码时,频率为16000,而对于“女性”验证码则为24000:

 ffmpeg -i acap(3).mp3 -ar 24000 acap(3)2.wav 



定义了所有声音(在每一行中都是声音),但是它们的对应关系是la脚的。
最好为女性模型创建一个单独的词典,然后对其进行编辑。
但是,这是自学的。

有用的链接:

1.home-smart-home.ru/raspberry-pi-pocketsphinx-offlajn-raspoznavanie-rechi-i-upravlenie-golosom
2.https://itnan.ru/post.php?C = 1&p = 351376
3. ru.wikipedia.org/wiki/Cherchez_la_femme

档案:

1. 程序
2. 模型
3. 俄罗斯模式
4. 字典
5. 测试验证码
6. ffmpeg
7. 一包验证码

Source: https://habr.com/ru/post/zh-CN466599/


All Articles