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

2次阅读
没有评论

看了 fm32 神的验证码神器,移步: 验证码识别2.0(更新:支持Chrome浏览器插件调用。永不失效) - 『原创发布区』 - 116博客破解 - 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

源码:

[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_())

正文完
 0
116博客
版权声明:本篇文章由 116博客 于2024-11-28发表,共计3260字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码