欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Python实用模块(三十六)captcha

实用模块 迷途小书童 1年前 (2022-08-24) 1555次浏览 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)

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

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.