Captcha 验证码
[ImageCaptcha 识别] https://blog.csdn.net/mcyJacky/article/details/88614820
[Captcha] https://pypi.org/project/captcha/0.1.1/
captcha不是一个单词而是一串单词的缩写 Completely Automated Public Turing Test to Tell Computers and Humans Apart(全自动区分计算机与人类的图灵测试)。我们都知道图灵测试是什么,captcha的核心思想就是设计出人类能够轻易通过但是计算机无法完成的任务,通过任务的测试结果,来确定进行操作的到底是人类还是计算机。
使用语音验证 AudioCaptcha 需要提供 8-bit 的语言字符声波文件:
{{language}}-{{character}}-{{username}}.wav
# exmaple: zh-1-lepture.wav
可以使用百度 Text2Audio 生成 mp3,文件再使用 ffmpeg 转换成标准 wav 格式:
http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=2&aue=6&text=abc
https://cloud.baidu.com/doc/SPEECH/TTS-API/12.5C.E8.BF.94.E5.9B.9E.html
ffmpeg.exe -i ren voices\raw\0.mp3 -acodec pcm_u8 -ar 8000 voices/0/0.wav
ffmpeg.exe -i ren voices\raw\1.mp3 -acodec pcm_u8 -ar 8000 voices/1/1.wav
ffmpeg.exe -i ren voices\raw\2.mp3 -acodec pcm_u8 -ar 8000 voices/2/2.wav
ffmpeg.exe -i ren voices\raw\3.mp3 -acodec pcm_u8 -ar 8000 voices/3/3.wav
ffmpeg.exe -i ren voices\raw\4.mp3 -acodec pcm_u8 -ar 8000 voices/4/4.wav
ffmpeg.exe -i ren voices\raw\5.mp3 -acodec pcm_u8 -ar 8000 voices/5/5.wav
ffmpeg.exe -i ren voices\raw\6.mp3 -acodec pcm_u8 -ar 8000 voices/6/6.wav
ffmpeg.exe -i ren voices\raw\7.mp3 -acodec pcm_u8 -ar 8000 voices/7/7.wav
ffmpeg.exe -i ren voices\raw\8.mp3 -acodec pcm_u8 -ar 8000 voices/8/8.wav
ffmpeg.exe -i ren voices\raw\9.mp3 -acodec pcm_u8 -ar 8000 voices/9/9.wav
aue =3 ,返回为二进制mp3文件,具体header信息 Content-Type: audio/mp3;
aue =4 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=16000;channel=1
aue =5 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=8000;channel=1
aue =6 ,返回为二进制wav文件,具体header信息 Content-Type: audio/wav;
注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。
# pip install captcha
from io import BytesIO
from captcha.audio import AudioCaptcha
from captcha.image import ImageCaptcha
audio = AudioCaptcha(voicedir='/path/to/voices')
image = ImageCaptcha(fonts=['c:/windows/fonts/BlackoakStd.otf', 'c:/windows/fonts/simhei.ttf'])
data = audio.generate('234')
assert isinstance(data, bytearray)
audio.write('4322344', 'out.wav')
data = image.generate('1234')
assert isinstance(data, BytesIO)
image.write('1234', 'out.png')
使用正常字体很容易别 TensorFlow 识别,越是没有规则形状的图形越难。
网友评论