python | 傻瓜式一键搭建图片验证码识别接口

这篇具有很好参考价值的文章主要介绍了python | 傻瓜式一键搭建图片验证码识别接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上一篇文章写了自己搭建环境、处理图片、识别验证码等具体操作(上一篇文章地址)。对于没有经验的小伙伴来说,还是比较麻烦的,而且如果训练集处理的不好,识别率会非常低,所以上一篇文章可以作为学习参考,使用的话,我个人觉得本篇文章比较适合入手。

首先感谢大佬的开源模块《带带弟弟OCR通用验证码识别SDK免费开源版》
地址:https://pypi.org/project/ddddocr/


DDDDocr介绍

ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库,其由作者与kerlomz共同合作完成,通过大批量生成随机数据后进行深度网络训练,本身并非针对任何一家验证码厂商而制作,本库使用效果完全靠玄学,可能可以识别,可能不能识别。
ddddocr奉行着开箱即用、最简依赖的理念,尽量减少用户的配置和使用成本,希望给每一位测试者带来舒适的体验

项目地址: https://github.com/sml2h3/ddddocr

搭建准备工作

1.python3.9以下环境 (直接百度一大堆)
2.Windows/Linux/Macos(暂时不支持Macbook M1(X),M1(X)用户需要自己编译onnxruntime才可以使用)
3.需要用的的库

pip install uvicorn
pip install fastapi
pip install base64
pip install ddddocr
pip install PIL

准备工作做完,可以直接上代码了


代码实现

import uvicorn
from fastapi import FastAPI, Body
import base64
import ddddocr
from io import BytesIO
from PIL import Image

app = FastAPI(title='文档', description='by:juzi', version="1.0.4")


@app.post("/code", summary='识别图片内文字/字母', description='普通图片验证码识别,上传图片的Base64编码', tags=['图片验证码识别'])
def identify_GeneralCAPTCHA(ImageBase64: str = Body(..., title='验证码图片Bse64文本', embed=True)):
    base64_data = base64.b64decode(ImageBase64)
    ocr = ddddocr.DdddOcr(show_ad=False)
    res = ocr.classification(base64_data)
    return {"result": res}


@app.post("/math", summary='识别算术验证码', description='算术题验证码识别,上传图片的Base64编码,提供两个返回,solution_result为识别结果', tags=['图片验证码识别'])
def identify_ArithmeticCAPTCHA(ImageBase64: str = Body(..., title='验证码图片Bse64文本', embed=True)):
    base64_data = base64.b64decode(ImageBase64)
    ocr = ddddocr.DdddOcr(show_ad=False)
    res = ocr.classification(base64_data)
    print("res:---------->" + res)
    if "+" or '-' or 'x' or '/' or '÷' or '*' not in res:
        zhi = "Calculation error"
    if '+' in res:
        a = res.split('+')[0]
        b = res.split('+')[1]
        zhi = int(a) + int(b)
    if '-' in res:
        a = res.split('-')[0]
        b = res.split('-')[1]
        zhi = int(a) - int(b)
    if 'x' in res:
        a = res.split('x')[0]
        b = res.split('x')[1]
        zhi = int(a) * int(b)
    if '/' in res:
        a = res.split('/')[0]
        b = res.split('/')[1]
        zhi = int(a) / int(b)
    if '÷' in res:
        a = res.split('÷')[0]
        b = res.split('÷')[1]
        zhi = int(a) / int(b)
    if '*' in res:
        a = res.split('*')[0]
        b = res.split('*')[1]
        zhi = int(a) * int(b)

    return {"solution_result": zhi,
            "raw_result": res
            }



if __name__ == '__main__':
    # swagger地址:http://localhost:6688/docs
    uvicorn.run(app, port=6688, host="0.0.0.0")

直接启动main函数,即可开始识别操作。
项目可以部署到服务器上,这样就只用搭建一次,随处调用
(此处因篇幅问题,只列举了字符和算数识别的代码。若需要滑块,点选等代码可以私聊作者)


效果测试

本次我用的是java来测试,模拟在爬虫时遇到的某网站图片验证码识别。

测试代码:

    public static void main(String[] args) {
        String validateUrl = "http://127.0.0.1:6688/code";//python项目启动的端口和路径
        String codeUrl = "*****" //该地址为图片验证码路径,此处不做展示,请自行寻找测试;
        String localSavePath = "D://codeTest.jpg";
        saveImage(codeUrl, localSavePath);
        String imgBase64 = GetImageStr(localSavePath);

        JSONObject requestBody = new JSONObject();
        requestBody.put("ImageBase64", imgBase64);
        
        System.out.println(MyUtils.sendPost(validateUrl, requestBody.toJSONString(), null));
    }


    /**
     * 保存接口响应图片
     *
     * @param codeRul  :验证码接口地址
     * @param savePath :本地保存地址
     */
    public static void saveImage(String codeRul, String savePath) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(codeRul).get().build();
            // 将字节数组转化为流
            InputStream inputStream = client.newCall(request).execute().body().byteStream();
            OutputStream os = null;
            // 100K的数据缓冲
            byte[] bs = new byte[102400];
            // 读取到的数据长度
            int len;
            // 保存图片
            os = new FileOutputStream(savePath);
            // 开始读取
            while ((len = inputStream.read(bs)) != -1) {
                os.write(bs, 0, len);
            }
        } catch (Exception e) {
            System.out.println("保存失败");
            e.printStackTrace();
        }
    }

    /**
     * 图片转化成base64字符串
     *
     * @param imgPath :图片绝对路径
     * @return base64字符串
     */
    public static String GetImageStr(String imgPath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        String imgFile = imgPath;// 待处理的图片
        InputStream in = null;
        byte[] data = null;
        String encode = null; // 返回Base64编码过的字节数组字符串
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        try {
            // 读取图片字节数组
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            encode = encoder.encode(data);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
            }
        }
        return encode;
    }

运行结果:

图片验证码识别,python,python,深度学习,爬虫,web安全

可以看出,即使是有干扰的图片,该接口也可以迅速且准确的识别出来。

觉得本文对您有帮助的话,请动动发财的小手点个赞支持~文章来源地址https://www.toymoban.com/news/detail-689606.html

到了这里,关于python | 傻瓜式一键搭建图片验证码识别接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源自助建站系统源码完整源码+搭建教程 傻瓜式一键建站系统源码

    一键傻瓜式自助建站系统源码,目前包含七百多套完整网站模板,全部都是响应式网站模板,傻瓜一键自助建站。开发组合PHP+mysql,功能强大。  一键自助建站系统源码带安装教程,源码下载:春哥技术博客获取。自助建站傻瓜式建站源码系统。

    2024年02月11日
    浏览(59)
  • python 识别图片验证码/滑块验证码准确率极高的 ddddocr 库

    验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 ddddocr (带带弟弟ocr)库. python 版本要求小于等于python3.9 版本 pip 安装 下

    2023年04月08日
    浏览(42)
  • python 识别图片验证码/滑块验证码准确率极高的 ddddorc 库

    前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 ddddocr (带带弟弟ocr)库. 环境准备 python 版本要求小于等于python3.9 版

    2024年02月03日
    浏览(45)
  • 竞赛项目 深度学习验证码识别 - 机器视觉 python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习验证码识别 - 机器视觉 python opencv 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.

    2024年02月13日
    浏览(71)
  • 微博模拟登陆的方法 + 图灵图像图片验证码识别平台 识别验证码(97%正确率)Python + Selenium+Chrome

    最近遇到一个问题,需要频繁切换账号登陆微博,但是需要识别微博的验证码,比较麻烦。而且因为需要24h不间断的操作,所以没法使用人工打码平台,而且打码平台也比较贵,延迟又高。最后找到了一个可以机器识别出来的,延迟只有0.1s,而且准确率超级高。 首先看一下

    2024年02月04日
    浏览(76)
  • uniapp - 安卓|苹果App软件实现调用百度人脸识别接口服务及人脸活体认证功能,uniapp苹果ios、安卓Android手机app平台,人脸认证、活体检测、身份证与人脸验证(示例代码,一键复制

    在uniapp手机App开发中(安卓Android|苹果ios系统),利用百度人脸识别api接口对接uniapp APP进行人脸识别、人脸检测、活体验证、人脸对比、人脸搜索、身份证信息是否与人脸匹配,支持离线SDK集成、离线无网络正常使用功能、自定义人脸识别框附近的页面样式和大小等。 提供详

    2024年04月11日
    浏览(68)
  • 【Python小技巧】使用Gradio轻松部署AI算法结果可视化Web 应用(含图片转换、验证码识别完整源码)

    随着人工智能的不断发展,各种智能算法越来越普遍,但是这些算法结果通常显示在cmd命令窗口里。有没有一种方法可以动态展示,更具需要计算后动态展现? 答案是有! 下面让我了解一下Gradio库,只需寥寥几行代码就可以展现出chatGPT的对话窗口,是不是很nice! Gradio是一

    2024年02月15日
    浏览(47)
  • 华为手机怎么识别提取图片文字?APP一键识别

    平时我们用手机会接触到形形色色的图片文件,其中有一部分保存着咱们需要的文字信息。如果我们是华为手机怎么识别提取图片文字呢?给大伙介绍两种方式,有同样需求的小伙伴接着往下浏览吧。 1.“智慧识屏” 华为手机自带的“智慧识屏”可以实现识别提取图片文字,

    2024年02月12日
    浏览(56)
  • jmeter获取图片验证码-解密图片并识别

    说明:             关于图片验证码的处理方式有三种方法:一是让开发屏蔽验证码,二是让开发后端指定一个万能验证码,三是使用OCR工具进行图片验证码的解密及识别,推荐使用前两种方法最省事;             OCRServer工具识别图片验证码,由于没有对图片进行降噪,

    2023年04月20日
    浏览(106)
  • java识别图片验证码

    之前在进行selenium自动化测试时需要对项目内的验证码进行识别,通常有三种方法进行验证码处理: 去除验证码 万能验证码 自动识别 但由于部分数据未提供了api,我们只能通过自动识别方式去进行“破解” 鄙人使用两种开源技术进行尝试:tess4j和tesseract-ocr(OCR) 1.下载tessd

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包