欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Python实用模块(三十六)captcha

实用模块 迷途小书童 2年前 (2022-08-24) 2434次浏览 0个评论

环境

  • windows 10 64bit
  • python 3.8
  • captcha 0.4

前言

captcha 是一个用来生成图片或音频验证的第三方库,验证码技术在 web 应用中非常常见。本篇我们就来看看它的一些常见用法。

安装

使用 pip 安装,执行命令

pip install captcha

实例

先来看个图片验证码的例子

import argparse
from captcha.image import ImageCaptcha

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--text', type=str, default='xugaoxiang', help='text that show in the image')
    opt = parser.parse_args()

    # 实例化,指定宽度和高度,如果想更换显示的字体,可以使用参数 fonts
    image = ImageCaptcha(width=300, height=100)
    captcha_text = opt.text
    # 生成图片
    data = image.generate_image(captcha_text)
    # 保存图片
    image.write(captcha_text, 'captcha.png')

带参数 --text 执行,如果不带参数,就会使用默认值 xugaoxiang

python test.py --text xgx

python captcha

接着,再来看看语音验证码的实例,核心代码非常类似

from captcha.audio import AudioCaptcha

if __name__ == '__main__':
    audio = AudioCaptcha()
    captcha_text = '1234'
    audio_data = audio.generate(captcha_text)
    audio.write(captcha_text, 'out.wav')

执行后,在当前目录就会生成音频文件 out.wav,音频中会包含字符串 1234,当然其中还夹杂着些用来干扰你的杂音。

不指定语音目录的情况下,默认只能生成数字的,如果要生成字符的,代码就会报错。这时,我们可以创建自己的语音库,利用 espeak(文本转语音) 和 ffmpeg(语音处理) 这2个工具便可以实现,下面给出 ubuntu 系统下面的使用方法

首先是安装这2个工具,使用 apt install

sudo apt install espeak ffmpeg

常见的字符包含了 0~9 的数字,还有26个字母,最好大小写也区分一下,理清了这个,我们执行命令

# 环境变量
export ESLANG=en

# 创建目录
mkdir $ESLANG

# 给每个字符创建一个文件夹,使用 espeak 生成对应文本的语音,最后使用 ffmpeg 处理一下
for i in {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9}; do mkdir $ESLANG/$i; espeak -a 150 -s 100 -p 15 -v$ESLANG $i -w $ESLANG/$i/orig_default.wav; ffmpeg -i $ESLANG/$i/orig_default.wav -ar 8000 -ac 1 -acodec pcm_u8 $ESLANG/$i/$i.wav; rm $ESLANG/$i/orig_default.wav; done

for i in {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9}; do mkdir $ESLANG/$i; espeak -a 150 -s 100 -p 15 -v$ESLANG $i -w $ESLANG/$i/orig_default.wav; ffmpeg -i $ESLANG/$i/orig_default.wav -ar 8000 -ac 1 -acodec pcm_u8 $ESLANG/$i/$i.wav; rm $ESLANG/$i/orig_default.wav; done

python captcha

有了自己的语音库,我们就可以来用它了,直接看代码

from captcha.audio import AudioCaptcha

if __name__ == '__main__':
    # 使用自己的语音库
    audio = AudioCaptcha(voicedir="en")
    captcha_text = 'XGX123'
    audio_data = audio.generate(captcha_text)
    audio.write(captcha_text, 'out.wav')

这样,字符的语音也能够生成了。这里需要注意,ubuntu 是大小写敏感的,而 windows 是不敏感的,也就是说 Xx 是同一个东西。因此,在 windows 中,需要先做一个全大写或小写的统一处理,然后再生成对应的语音。

至于中文字符转语音的部分,通过 apt 安装的 espeak 默认是不支持的,会出现报错信息 Full dictionary is not installed for 'zh',解决的方法是去重新编译 espeak,加入编译参数 --compile=zh 即可,感兴趣的童鞋可以自己去试试。

更多详细信息,可以参考官方文档 https://pypi.org/project/captcha/

Python实用模块专题

更多有用的 python 模块,请移步

https://xugaoxiang.com/category/python/modules/

喜欢 (0)

您必须 登录 才能发表评论!