如何在centos7上搭建验证码识别平台

如何在centos7上搭建验证码识别平台
Page content

验证码作为一种最为基础的图灵测试已经广泛存在于各种网站,而在某些场景下我们需要绕过这些测试,此时就需要使用到Tesseract,一个光学字符识别引擎,且支持多种操作系统。并且是被认为是最精准的开源光学字符识别引擎之一。现在我们来看看如何将其搭建到centos7上面的。

直接安装

sudo rpm --import https://build.opensuse.org/projects/home:Alexander_Pozdnyakov/public_key
yum update
yum install tesseract 
yum install tesseract-langpack-deu

现在tesseract已经成功安装 我们来测试一下tesseract --version

下载对应模型

我们可以到如下链接中去下载相应需要使用的模型。并存储到/usr/share/tesseract/tessdata目录下

https://github.com/tesseract-ocr/tessdata_best

snum模型

snum.traineddata

通过tesseract --list-langs即可看到现有模型。

服务端

from fastapi import FastAPI, Body
from base64 import b64decode
from io import BytesIO
from PIL import Image
import pytesseract

app = FastAPI()
SEC_KEY = "randomcode"


@app.post("/capcha")
async def read_capcha(sec_key: str = Body(...), b64_img: str = Body(...)):
    if SEC_KEY == sec_key:
        return {
            "code": 200,
            "result": pytesseract.image_to_string(
                Image.open(BytesIO(b64decode(b64_img))), lang="snum"
            ).replace(" ", ""),
        }

通过 uvicorn api:app --reload 启动服务

测试


from base64 import b64encode
import requests
SEC_KEY = "randomcode"
url = 'http://x.x.x.x:8000/capcha'
img = 'xxx.png'
with open(img,'rb') as f:
    b64_img = bytes.decode(b64encode(f.read()))
    requests.post(url,json={'sec_key':SEC_KEY,'b64_img':b64_img}).text