吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 937|回复: 33
收起左侧

[原创工具] python 验证码识别工具web版(有源文件)

[复制链接]
Pwaerm 发表于 2022-11-22 20:10
本帖最后由 Pwaerm 于 2022-11-22 23:06 编辑

看了 fm32 神的验证码神器,移步: 验证码识别2.0(更新:支持Chrome浏览器插件调用。永不失效) - 『原创发布区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
DDDDOCR确实很神奇 (我以前用的 muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha))

我来做一个web版,可用于各种程序的对接  访问方式:http://127.0.0.1:2300  。
也可以监视剪贴板,自动识别并把结果写入剪贴板。

今天各种搜索,终于打包成功了。所有文件(py程序,界面文件,打包配置文件,打包批处理 以及打包好的exe可直接使用)打包下载:
链接:https://pan.baidu.com/s/1_JC_oEwTxYjyX6gWe1rzeA
提取码:hhxx

FN`)}LPLZCNF9ZGZ~1~YUH8.png   
源码:

[Asm] 纯文本查看 复制代码
import sys, os, io
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QIcon, QPixmap
import ddddocr
from http.server import HTTPServer, BaseHTTPRequestHandler
import urllib
import json
from threading import Thread
import base64
from PIL import Image
import pyperclip


class HttpHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(
            str("请以POST方式发送图片数据    {img:'图像的base64编码'}\r\n返回格式   {\"status\": 1, \"msg\":\"识别成功\", \"code\": \"验证码内容\"}"
                ).encode())

    def do_POST(self):
        args = self.rfile.read(int(
            self.headers['content-length'])).decode("utf-8")
        self._response(self.path, args)

    def _response(self, path, args):
        # 组装参数为字典
        if args:
            args = urllib.parse.parse_qs(args).items()
            args = dict([(k, v[0]) for k, v in args])
        else:
            args = {}
        # 设置响应结果
        # print(args)
        if args.get("img") is not None:
            text = window.showImage(base64.b64decode(args["img"]))
            result = {"status": 1, "msg": "识别成功", "code": text}
        else:
            result = {
                "status": 0,
                "msg": "数据格式有误,请以POST方式发送 {img:'图像的base64编码'}",
                "code": ""
            }

        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(result).encode())


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setFixedSize(300, 200)
        loadUi(os.path.dirname(__file__) + "/ocr_web.ui", self)
        #self.sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
        self.ocr = ddddocr.DdddOcr()
        self.btn.clicked.connect(self.startHttp)

    def showImage(self, _imageBytes, _clipboard):
        #print(_imageBytes)
        text = self.ocr.classification(_imageBytes)
        self.codeText.setText(text)
        print(text)
        pixmap = QPixmap()
        pixmap.loadFromData(_imageBytes)
        pixmap = pixmap.scaled(150, 60)
        self.image.setPixmap(pixmap)
        if _clipboard == "clipboard":
            #clipboard.setText(text)
            pyperclip.copy(text)  # 相当如写入到剪切板
        return text

    def startHttp(self):
        port = int(self.inputLabel.text())
        if port < 60 or port > 65535:
            port = 2300
        self.btn.setEnabled(False)
        self.btn.setText("服务已启动")
        Thread(target=openServer, args=(port, )).start()


def openServer(_port):
    print(_port)
    httpd = HTTPServer(('', _port), HttpHandler)
    httpd.serve_forever()


def image2byte(image):
    # 创建一个字节流管道
    img_bytes = io.BytesIO()
    #把PNG格式转换成的四通道转成RGB的三通道,然后再保存成jpg格式
    image = image.convert("RGB")
    # 将图片数据存入字节流管道, format可以按照具体文件的格式填写
    image.save(img_bytes, format="JPEG")
    # 从字节流管道中获取二进制
    image_bytes = img_bytes.getvalue()
    return image_bytes


# 当剪切板变动会执行该方法
def clipboardChange():
    if window.cpCheckBox.checkState() == 2:
        data = clipboard.mimeData()
        # 获取剪切板内容格式
        print(data.formats())
        # 如果是文本格式,把内容打印出来
        if ('application/x-qt-image' in data.formats()):
            window.showImage(image2byte(Image.fromqimage(clipboard.pixmap())),
                             "clipboard")
        else:
            print("text:" + data.text())


app = QApplication(sys.argv)
clipboard = app.clipboard()
# 监听剪切板变动
clipboard.dataChanged.connect(clipboardChange)
clipboard.setText("pwm")
window = MainWindow()
window.setWindowTitle("P娃儿猫验证码识别v1.0")
window.setWindowIcon(QIcon(os.path.dirname(__file__) + '/Pwaerm.ico'))
window.show()
sys.exit(app.exec_())


免费评分

参与人数 9吾爱币 +15 热心值 +9 收起 理由
bestmusic + 1 + 1 谢谢@Thanks!
crownyouyou + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fm32 + 2 + 1 好思路!
会飞的花 + 1 谢谢@Thanks!
朕懂 + 1 + 1 谢谢@Thanks!
阴凉 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sunlit + 1 + 1 谢谢@Thanks!
emiya1120 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Pwaerm 发表于 2022-11-24 21:31
霹雳游侠 发表于 2022-11-24 20:54
完全看不懂,开了个寂寞,什么反应都没,只能说你弄的软件不是给大部分人用的,拿出来炫耀的

这有什么好炫耀的,都是网上照别人的教程抄写的。

验证码识别本身多数用于机器人,普通人确实几乎没什么用处,去输入验证码还要开个软件,用这功夫自己输入都成功了。
我录了个屏,监视剪贴版功能,复制验证码图片,就可以直接粘贴识别出来的验证码结果。


格式工厂 屏幕录像20221124_212528 00_00_00-00_00_30.gif



如果开启web服务器,可以在js中通过如下方式对接:

[Asm] 纯文本查看 复制代码
function getImgBase64(_img) {
    var canvas = document.createElement("canvas");
    canvas.width = _img.naturalWidth;
    canvas.height = _img.naturalHeight;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(_img, 0, 0);
    return canvas.toDataURL("image/png").replace("data:image/png;base64,", "");
}
function getImgCodeFormApi(_img) {
    console.log("提交后台识别");
    var _code = "未能识别";
    try {
        $.ajax({
            type: "post",
            url: "http://127.0.0.1:2300",
            timeout: 2 * 1000,
            async: false,
            data: {
                img: getImgBase64(_img)
            },
            success: function (data) {
                //alert(JSON.stringify(data));            
                console.log(data);
                _code = data.code;
            }
        });
    } catch (e) {

    }
    return _code;
}
 楼主| Pwaerm 发表于 2022-11-24 16:27
BugSrc 发表于 2022-11-24 14:14
https://iam.pt.ouchn.cn/am/UI/Login这个不行呀 大佬 具体怎么使用请问

打开软件,点击启动按钮。
然后把验证码图片的base64数据提交到 http://127.0.0.1:2300  就能得到返回的验证码

主要用于油猴插件等其它软件对接

5C{EC0(R(V7{}00IX(8`O.png
89684828 发表于 2022-11-23 19:38
awxzw 发表于 2022-11-23 20:26
感谢分享,支持一下!
hzxszxd 发表于 2022-11-24 06:45
学习一下
dsduanduan 发表于 2022-11-24 08:09
感谢楼主分享!!!
kkffaa 发表于 2022-11-24 08:39
学习下谢谢了
bandishui 发表于 2022-11-24 09:25
认真学习, 谢谢分享
tony1990 发表于 2022-11-24 09:36
感谢分享,试用一下
michaelcheng077 发表于 2022-11-24 10:23
感谢楼主分享,支持一下
furseal 发表于 2022-11-24 10:53
感谢分享原创作品,待晚些我拿rust搞个试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-11-27 07:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表