[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-MgArcher--Text_select_captcha":3,"tool-MgArcher--Text_select_captcha":64},[4,17,26,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,2,"2026-04-03T11:11:01",[13,14,15],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":23,"last_commit_at":32,"category_tags":33,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,34,35,36,15,37,38,13,39],"数据工具","视频","插件","其他","语言模型","音频",{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,38,37],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":16},519,"PaddleOCR","PaddlePaddle\u002FPaddleOCR","PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来，转换成计算机可读取的结构化数据，让机器真正“看懂”图文内容。\n\n面对海量纸质或电子文档，PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域，它扮演着连接图像与大型语言模型（LLM）的桥梁角色，能将视觉信息直接转化为文本输入，助力智能问答、文档分析等应用场景落地。\n\nPaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显：不仅支持全球 100 多种语言的识别，还能在 Windows、Linux、macOS 等多个系统上运行，并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目，PaddleOCR 既能满足快速集成的需求，也能支撑前沿的视觉语言研究，是处理文字识别任务的理想选择。",74913,"2026-04-05T10:44:17",[38,14,13,37],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":23,"last_commit_at":62,"category_tags":63,"status":16},2471,"tesseract","tesseract-ocr\u002Ftesseract","Tesseract 是一款历史悠久且备受推崇的开源光学字符识别（OCR）引擎，最初由惠普实验室开发，后由 Google 维护，目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据，有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题，是数字化归档和信息自动化的重要基础工具。\n\n在技术层面，Tesseract 展现了强大的适应能力。从版本 4 开始，它引入了基于长短期记忆网络（LSTM）的神经网络 OCR 引擎，显著提升了行识别的准确率；同时，为了兼顾旧有需求，它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码，开箱即用即可识别超过 100 种语言，并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面，它灵活支持纯文本、hOCR、PDF、TSV 等多种格式，方便后续数据处理。\n\nTesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库（libtesseract），不包含图形用户界面（GUI），因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中",73286,"2026-04-03T01:56:45",[13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":80,"owner_twitter":78,"owner_website":78,"owner_url":81,"languages":82,"stars":87,"forks":88,"last_commit_at":89,"license":78,"difficulty_score":23,"env_os":90,"env_gpu":91,"env_ram":92,"env_deps":93,"category_tags":104,"github_topics":78,"view_count":23,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":105,"updated_at":106,"faqs":107,"releases":148},2622,"MgArcher\u002FText_select_captcha","Text_select_captcha","实现文字点选、选字、选择、点触验证码识别，基于pytorch训练","Text_select_captcha 是一款基于 PyTorch 开发的开源工具，专门用于自动识别和破解“文字点选”类验证码。它主要解决了在自动化测试、数据采集等场景中，程序难以理解并执行“请按顺序点击图中指定汉字”这一交互难题。\n\n该工具非常适合具备一定 Python 基础的开发者、爬虫工程师以及从事计算机视觉研究的人员使用。其核心工作流程分为两步：首先利用 YOLOv5 目标检测模型精准定位图片中所有文字的位置，随后通过 Siamese 孪生网络将检测到的文字与指令进行语义匹配并排序，从而模拟出正确的人眼点击顺序。\n\nText_select_captcha 的技术亮点在于高效与轻量。它在仅需 300 张样本的小数据集上即可完成训练，推理速度控制在 300~500 毫秒之间，准确率高达 96%。此外，它对硬件配置要求极低，即使在 1 核 2G 的低配服务器上也能流畅运行。除了基础的文字点选，该项目还扩展支持了“消消乐”等趣味验证码的破解，并提供完整的模型训练指南，方便用户针对特定场景定制专属模型，是学习深度学习在验证码攻防领域应用的优质实践项目。","# 点击选择文字验证码识别\n文字点选、选字、选择文字验证码识别  \n\n\n- 特点\n``` \n识别速度约在300~500ms之间  \n96%的准确率  \n小样本训练（此模型训练采用了300张验证码）  \n低消耗，代码在低配置机器上也可运行（1核2G服务器无压力运行）  \n仅在windows下python3.6、python3.8、python3.10使用\n可自己训练模型使用本项目，不受平台限制\n```\n\n# 常见问题：\n**1、关于ModuleNotFoundError: No module named 'src.utils.load' 问题：**  \n模型文件被经过处理后只能使用于本项目中，本项目现在**仅支持在windows下python3.6、python3.8、python3.10使用**      \n可以传入自己训练的onnx模型即可再其他环境中使用，可将参数sign修改为False并传入相应的onnx模型即可    \n```python\nfrom src.captcha import TextSelectCaptcha, drow_img\ncap = TextSelectCaptcha(per_path='xxx.onnx', yolo_path='xxx.onnx', sign=False)\n```\n**2、关于在其他验证码上效果不好的问题：**  \n模型文件只对这一种验证码做了训练，其他类型未作训练所以不支持，可自行训练模型配置于本项目中，支持大家使用本项目训练\n# 效果演示\n![Image text](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_cb8553df271d.gif)  \n\n# 免责声明\n**本项目旨在研究深度学习在验证码攻防上的应用。仅供学习交流使用，请勿用于非法用途，不得在任何商业使用，本人不承担任何法律责任。**\n\n## 道满PythonAI\n[「道满PythonAI」](https:\u002F\u002Fwww.daomanpy.com\u002F) - 2026 领先的中文 Python 与 AI 体系化教程。涵盖 Python 基础、Web 后端开发、高阶爬虫、JS 逆向、计算机视觉、NLP 及大模型 (LLM) 实战，打通从零基础到 AI 全栈工程师的职业路径。  \n![46354c4191deebbf378736cfc35cc749.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_a4ad412527f3.png)\n\n# 请作者喝可乐**o(*￣︶￣*)o**  \n\n| Wechat Pay | Ali Pay |\n| --- | --- |\n| \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_aecf0c72f753.jpg\" height=\"500\" \u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_a25df8577281.png\" height=\"500\" \u002F> |\n## 有定制需求联系邮件**yj970814@163.com**\n## 有什么问题或需求欢迎各位在lssues中提问或联系邮件**yj970814@163.com**\n# 如何使用\n``` bash\n1、准备运行环境：\npip install -r requirements.txt\n2、普通使用：\npython demo.py\n3、服务启动方式，启动后访问http:\u002F\u002F127.0.0.1:8000\u002Fdocs#\u002F查看接口文档\npython service.py\n4、bilbil演示\npython bilbil.py\n```  \n```python\nfrom src.captcha import TextSelectCaptcha\n# python代码使用\n\"\"\"\nper_path:   为孪生网络模型文件路径\nyolo_path:  为目标检测模型文件路径\nsign:       sign为True传入加密后的模型bin文件，为Flase传入onnx文件\n\"\"\"\ncap = TextSelectCaptcha(per_path='pre_model_v2.bin', yolo_path='best_v2.bin', sign=True)  \nimage_path = \"docs\u002Fres.jpg\"\nresult = cap.run(image_path)\n```\n结果如下：  \n```\n文字坐标： [[119, 174, 193, 244], [223, 189, 298, 267], [87, 69, 158, 140], [31, 196, 109, 275]] 耗时：163ms\n返回的结果为文字在图片中的坐标，返回坐标的顺序就是文字点击的顺序\n```\n| 原始 | 检测 | 识别 |\n| --- | --- |--- |\n| \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_cea550d5ab2d.jpg\" width=\"300\" height=\"300\"> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_f3092a5c8b7a.jpg\" width=\"300\" height=\"300\"> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_2eef84a52a6f.jpg\" width=\"300\" height=\"300\">|\n\n# 更新说明\n#### 2023.04.23更新: 更改检测识别模型，修改返回结构  \n#### 2023.08.18更新: 取消推理代码编译，只对模型加载地方进行编译；优化web接口\n#### 2023.09.22更新：增加消消乐验证码破解\n![Image text](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_6173366a37fd.gif)  \n消消乐的说明 https:\u002F\u002Fjuejin.cn\u002Fpost\u002F7282889267030016061  \n``` bash\npython xiaoxiaole.py\n执行即可找出最近的可以被消除的行或者列\n```\n#### 2023.09.28更新：发布v2版本模型，增加了模型的泛化能力，提升推理速度,但是准确率下降到90%左右\n#### 2023.11.12更新：优化提升了模型识别准确率，略微提升推理速度，修改代码结构\n#### 2024.08.17更新：修复了一些bug, 修复bilbil.py代码无法使用问题，修复bilbil.py点选位置偏移问题\n#### 2024.09.12更新：更换新的孪生网络模型，在识别速度不变的情况下优化准确率, 增加了基于pyppeteer的自动化操作\n# 实现流程\n- 问题拆解  \n\n**对于点选式验证码的问题，我们可以将其拆解为两个小问题：**  \n  \n**1、确定需要点击的字的数量和位置：** 对于点选式验证码，准确识别和定位需要点击的字的数量和位置是解决问题的关键。   其中，一种常见的目标检测算法是 YOLO，通过标注数据集和训练模型，可以实现对需要点击的字进行准确识别和定位。本项目采用的是 yolov5 模型，该模型在目标检测方面表现出色，具有高速和较高的准确性。  \n\n**2、对点击的字进行排序：** 在确定出需要点击的字的位置后，需要按照一定的规则对这些字进行排序。采用传统的方案是通过识别图片中的文字，然后按照文字位置进行排序，但这种方法训练困难。因此，本项目采用了图片匹配模型，使用 Siamese 孪生网络对需要点击的字与预先准备好的字库中的字进行匹配，找到最佳匹配的字，并按照一定的规则进行排序。Siamese 孪生网络在图像匹配方面表现优异，能够有效地提高排序的准确性和稳定性。\n- 部分训练集  \n  \n  百度网盘链接：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1IYfxVpanXyqVQ8ZFVOskrg 提取码：sp97\n- 训练模型  \n  \n***训练代码在下方参考文档中***  \n**yolov5训练过程：**  \n训练流程一般包括如下几个步骤：获取训练数据集、数据预处理、模型选择、设置损失函数、反向传播和更新权值等。\n\n对于 YOLO 模型的训练流程，可以参考下方参考文档中的文档。基本流程是，首先下载训练数据集，数据集应该包含带有标注的图像和对应的标注数据。然后使用标注工具对图像进行标注，标注工具可以在 GitHub 上找到。标注的数据应该包括目标的类别和位置信息。\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_96c5590a89f0.png\" width=\"800\" height=\"400\">\n\u003Cdiv>yolo标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n如图所示，可以对背景图中的文字进行 char 类别的标注，对需要检测的文字进行 target 类别的标注。在训练时，模型会学习如何从图像中定位和识别目标文本。\n\n接下来是选择合适的模型。YOLO 系列模型有多个版本，可以根据不同的需求选择适合的版本。选择好模型后，需要设置损失函数和训练参数，进行模型训练。在训练过程中，需要采用反向传播算法计算损失函数的梯度，并更新权值，以提高模型的预测准确度。本项目使用的预训练模型是**yolov5s6**。\n\n训练结束后，可以将模型保存成 ONNX 格式，以便在推理时进行加载和使用。\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_f3092a5c8b7a.jpg\" width=\"400\" height=\"400\">\n\u003Cdiv>yolo检测结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n**Siamese训练过程：**  \n\n在使用孪生网络进行图像检索任务的训练前，需要对数据集进行准备。与其他模型不同，孪生网络的训练需要用到正负样本对，因此需要对数据集中的每张图像都生成一些与之匹配和不匹配的样本对。\n\n具体实现时，一般采用已经训练好的检测模型来生成样本对。\n\n具体操作流程如下：首先，使用检测模型对数据集中的图像进行检测，截取出每个目标的图像片段；然后，把该图像片段分别与数据集中的其他目标进行匹配和不匹配的组合，形成匹配和不匹配的样本对；最后，根据样本对的匹配情况对其进行标注，将匹配和不匹配的样本对分别放到不同的文件夹中，按照类别和顺序标注好，方便后续使用。\n\n如下图所示，每张图像都会对应一个匹配和不匹配的样本对，每个样本对包含两张图像，分别作为孪生网络的输入。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_795dcdbfb3fa.png\">\n\u003Cdiv>孪生网络标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n训练数据准备好后，具体训练过程可参考下方参考文档中的文档。\n\n同样的，训练结束后，可以将模型保存成 ONNX 格式，以便在推理时进行加载和使用。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_326e17a2a280.png\" width=\"320\" height=\"240\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_662f0d21f964.png\" width=\"320\" height=\"240\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_e956da94c6d5.png\" width=\"320\" height=\"240\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_184ea2fa58a6.png\" width=\"320\" height=\"240\">\n\u003Cdiv>孪生网络标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n如图所示，孪生网络输出的结果可以给出背景图中的目标与右下角的目标最相似的结果，而左下角的目标则可以通过按照左坐标进行排序来得到。由此，可以方便地得到背景图中所有目标的顺序。\n\n- 推理部署\n\n推理部署过程是将 YOLO 和 Siamese 模型都转换为 ONNX 模型，以便在 CPU 上使用模型，并提高部署难度和运行速度。通过模型转换，可以将模型从原有的深度学习框架中的特定格式转换成 ONNX 格式，使得模型可以在多个平台上使用，并且可以在不同的编程语言之间轻松交互。  \n**onnx介绍：**\n```\n  ONNX，即开放神经网络交换格式（Open Neural Network Exchange），是一个可以让不同深度学习框架之间互相转换和\n使用模型的开放标准。它由 Facebook 和 Microsoft 共同开发，旨在为深度学习模型的部署和迁移提供更加方便和灵活的解决方案。\nONNX 支持包括 PyTorch、TensorFlow、CNTK 和 MXNet 等在内的多个深度学习框架，可以将这些框架训练出的模型转换成\nONNX 格式，从而可以被其他框架或应用所使用。\n\nONNX 的主要优点包括：\n\n互操作性好：ONNX 支持多个深度学习框架之间的模型转换，使得它们可以互相使用和部署，从而减少了开发和部署的难度和成本；\n\n高效性能：ONNX 可以在多种硬件和软件平台上运行，并提供了 C++和 Python 接口，可以大幅提高模型执行的效率和速度；\n\n易于扩展：ONNX 的架构简单清晰，可以轻松地添加新的层次和类型，方便应对不断升级变化的深度学习技术和需求。\n\n总之，ONNX 是一个方便快捷的深度学习模型转换和交换标准，可以帮助开发者更加轻松地将深度学习模型进行部署和迁移。\n```\n在将模型转换为 ONNX 格式后，对代码进行编译也是必不可少的一步。通过编译，可以将 Python 代码转换成机器语言代码，进一步提高模型的运行效率和速度。同时，也可以减少代码的存储空间，使得模型能够更快地在 CPU 上加载和运行。\n###  参考文档\nhttps:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov5  \nhttps:\u002F\u002Fgithub.com\u002Fbubbliiiing\u002FSiamese-pytorch\n\n### 点个**star**再走呗！\n","# 点击选择文字验证码识别\n文字点选、选字、选择文字验证码识别  \n\n\n- 特点\n``` \n识别速度约在300~500ms之间  \n96%的准确率  \n小样本训练（此模型训练采用了300张验证码）  \n低消耗，代码在低配置机器上也可运行（1核2G服务器无压力运行）  \n仅在windows下python3.6、python3.8、python3.10使用\n可自己训练模型使用本项目，不受平台限制\n```\n\n# 常见问题：\n**1、关于ModuleNotFoundError: No module named 'src.utils.load' 问题：**  \n模型文件被经过处理后只能使用于本项目中，本项目现在**仅支持在windows下python3.6、python3.8、python3.10使用**      \n可以传入自己训练的onnx模型即可再其他环境中使用，可将参数sign修改为False并传入相应的onnx模型即可    \n```python\nfrom src.captcha import TextSelectCaptcha, drow_img\ncap = TextSelectCaptcha(per_path='xxx.onnx', yolo_path='xxx.onnx', sign=False)\n```\n**2、关于在其他验证码上效果不好的问题：**  \n模型文件只对这一种验证码做了训练，其他类型未作训练所以不支持，可自行训练模型配置于本项目中，支持大家使用本项目训练\n# 效果演示\n![Image text](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_cb8553df271d.gif)  \n\n# 免责声明\n**本项目旨在研究深度学习在验证码攻防上的应用。仅供学习交流使用，请勿用于非法用途，不得在任何商业使用，本人不承担任何法律责任。**\n\n## 道满PythonAI\n[「道满PythonAI」](https:\u002F\u002Fwww.daomanpy.com\u002F) - 2026 领先的中文 Python 与 AI 体系化教程。涵盖 Python 基础、Web 后端开发、高阶爬虫、JS 逆向、计算机视觉、NLP 及大模型 (LLM) 实战，打通从零基础到 AI 全栈工程师的职业路径。  \n![46354c4191deebbf378736cfc35cc749.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_a4ad412527f3.png)\n\n# 请作者喝可乐**o(*￣︶￣*)o**  \n\n| 微信支付 | 支付宝 |\n| --- | --- |\n| \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_aecf0c72f753.jpg\" height=\"500\" \u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_a25df8577281.png\" height=\"500\" \u002F> |\n## 有定制需求联系邮件**yj970814@163.com**\n## 有什么问题或需求欢迎各位在lssues中提问或联系邮件**yj970814@163.com**\n# 如何使用\n``` bash\n1、准备运行环境：\npip install -r requirements.txt\n2、普通使用：\npython demo.py\n3、服务启动方式，启动后访问http:\u002F\u002F127.0.0.1:8000\u002Fdocs#\u002F查看接口文档\npython service.py\n4、bilbil演示\npython bilbil.py\n```  \n```python\nfrom src.captcha import TextSelectCaptcha\n# python代码使用\n\"\"\"\nper_path:   为孪生网络模型文件路径\nyolo_path:  为目标检测模型文件路径\nsign:       sign为True传入加密后的模型bin文件，为Flase传入onnx文件\n\"\"\"\ncap = TextSelectCaptcha(per_path='pre_model_v2.bin', yolo_path='best_v2.bin', sign=True)  \nimage_path = \"docs\u002Fres.jpg\"\nresult = cap.run(image_path)\n```\n结果如下：  \n```\n文字坐标： [[119, 174, 193, 244], [223, 189, 298, 267], [87, 69, 158, 140], [31, 196, 109, 275]] 耗时：163ms\n返回的结果为文字在图片中的坐标，返回坐标的顺序就是文字点击的顺序\n```\n| 原始 | 检测 | 识别 |\n| --- | --- |--- |\n| \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_cea550d5ab2d.jpg\" width=\"300\" height=\"300\"> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_f3092a5c8b7a.jpg\" width=\"300\" height=\"300\"> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_2eef84a52a6f.jpg\" width=\"300\" height=\"300\">|\n\n# 更新说明\n#### 2023.04.23更新: 更改检测识别模型，修改返回结构  \n#### 2023.08.18更新: 取消推理代码编译，只对模型加载地方进行编译；优化web接口\n#### 2023.09.22更新：增加消消乐验证码破解\n![Image text](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_6173366a37fd.gif)  \n消消乐的说明 https:\u002F\u002Fjuejin.cn\u002Fpost\u002F7282889267030016061  \n``` bash\npython xiaoxiaole.py\n执行即可找出最近的可以被消除的行或者列\n```\n#### 2023.09.28更新：发布v2版本模型，增加了模型的泛化能力，提升推理速度,但是准确率下降到90%左右\n#### 2023.11.12更新：优化提升了模型识别准确率，略微提升推理速度，修改代码结构\n#### 2024.08.17更新：修复了一些bug, 修复bilbil.py代码无法使用问题，修复bilbil.py点选位置偏移问题\n#### 2024.09.12更新：更换新的孪生网络模型，在识别速度不变的情况下优化准确率, 增加了基于pyppeteer的自动化操作\n# 实现流程\n- 问题拆解  \n\n**对于点选式验证码的问题，我们可以将其拆解为两个小问题：**  \n  \n**1、确定需要点击的字的数量和位置：** 对于点选式验证码，准确识别和定位需要点击的字的数量和位置是解决问题的关键。   其中，一种常见的目标检测算法是 YOLO，通过标注数据集和训练模型，可以实现对需要点击的字进行准确识别和定位。本项目采用的是 yolov5 模型，该模型在目标检测方面表现出色，具有高速和较高的准确性。  \n\n**2、对点击的字进行排序：** 在确定出需要点击的字的位置后，需要按照一定的规则对这些字进行排序。采用传统的方案是通过识别图片中的文字，然后按照文字位置进行排序，但这种方法训练困难。因此，本项目采用了图片匹配模型，使用 Siamese 孪生网络对需要点击的字与预先准备好的字库中的字进行匹配，找到最佳匹配的字，并按照一定的规则进行排序。Siamese 孪生网络在图像匹配方面表现优异，能够有效地提高排序的准确性和稳定性。\n- 部分训练集  \n  \n  百度网盘链接：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1IYfxVpanXyqVQ8ZFVOskrg 提取码：sp97\n- 训练模型  \n  \n***训练代码在下方参考文档中***  \n**yolov5训练过程：**  \n训练流程一般包括如下几个步骤：获取训练数据集、数据预处理、模型选择、设置损失函数、反向传播和更新权值等。\n\n对于 YOLO 模型的训练流程，可以参考下方参考文档中的文档。基本流程是，首先下载训练数据集，数据集应该包含带有标注的图像和对应的标注数据。然后使用标注工具对图像进行标注，标注工具可以在 GitHub 上找到。标注的数据应该包括目标的类别和位置信息。\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_96c5590a89f0.png\" width=\"800\" height=\"400\">\n\u003Cdiv>yolo标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n如图所示，可以对背景图中的文字进行 char 类别的标注，对需要检测的文字进行 target 类别的标注。在训练时，模型会学习如何从图像中定位和识别目标文本。\n\n接下来是选择合适的模型。YOLO 系列模型有多个版本，可以根据不同的需求选择适合的版本。选择好模型后，需要设置损失函数和训练参数，进行模型训练。在训练过程中，需要采用反向传播算法计算损失函数的梯度，并更新权值，以提高模型的预测准确度。本项目使用的预训练模型是**yolov5s6**。\n\n训练结束后，可以将模型保存成 ONNX 格式，以便在推理时进行加载和使用。\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_f3092a5c8b7a.jpg\" width=\"400\" height=\"400\">\n\u003Cdiv>yolo检测结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n**Siamese训练过程：**  \n\n在使用孪生网络进行图像检索任务的训练前，需要对数据集进行准备。与其他模型不同，孪生网络的训练需要用到正负样本对，因此需要对数据集中的每张图像都生成一些与之匹配和不匹配的样本对。\n\n具体实现时，一般采用已经训练好的检测模型来生成样本对。\n\n具体操作流程如下：首先，使用检测模型对数据集中的图像进行检测，截取出每个目标的图像片段；然后，把该图像片段分别与数据集中的其他目标进行匹配和不匹配的组合，形成匹配和不匹配的样本对；最后，根据样本对的匹配情况对其进行标注，将匹配和不匹配的样本对分别放到不同的文件夹中，按照类别和顺序标注好，方便后续使用。\n\n如下图所示，每张图像都会对应一个匹配和不匹配的样本对，每个样本对包含两张图像，分别作为孪生网络的输入。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_795dcdbfb3fa.png\">\n\u003Cdiv>孪生网络标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n训练数据准备好后，具体训练过程可参考下方参考文档中的文档。\n\n同样的，训练结束后，可以将模型保存成 ONNX 格式，以便在推理时进行加载和使用。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_326e17a2a280.png\" width=\"320\" height=\"240\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_662f0d21f964.png\" width=\"320\" height=\"240\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_e956da94c6d5.png\" width=\"320\" height=\"240\">\n\u003Cimg src \"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_readme_184ea2fa58a6.png\" width=\"320\" height=\"240\">\n\u003Cdiv>孪生网络标注结果\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n如图所示，孪生网络输出的结果可以给出背景图中的目标与右下角的目标最相似的结果，而左下角的目标则可以通过按照左坐标进行排序来得到。由此，可以方便地得到背景图中所有目标的顺序。\n\n- 推理部署\n\n推理部署过程是将 YOLO 和 Siamese 模型都转换为 ONNX 模型，以便在 CPU 上使用模型，并提高部署难度和运行速度。通过模型转换，可以将模型从原有的深度学习框架中的特定格式转换成 ONNX 格式，使得模型能够在多个平台上使用，并且可以在不同的编程语言之间轻松交互。  \n**onnx介绍：**\n```\n  ONNX，即开放神经网络交换格式（Open Neural Network Exchange），是一个可以让不同深度学习框架之间互相转换和\n使用模型的开放标准。它由 Facebook 和 Microsoft 共同开发，旨在为深度学习模型的部署和迁移提供更加方便和灵活的解决方案。\nONNX 支持包括 PyTorch、TensorFlow、CNTK 和 MXNet 等在内的多个深度学习框架，可以将这些框架训练出的模型转换成\nONNX 格式，从而可以被其他框架或应用所使用。\n\nONNX 的主要优点包括：\n\n互操作性好：ONNX 支持多个深度学习框架之间的模型转换，使得它们可以互相使用和部署，从而减少了开发和部署的难度和成本；\n\n高效性能：ONNX 可以在多种硬件和软件平台上运行，并提供了 C++和 Python 接口，可以大幅提高模型执行的效率和速度；\n\n易于扩展：ONNX 的架构简单清晰，可以轻松地添加新的层次和类型，方便应对不断升级变化的深度学习技术和需求。\n\n总之，ONNX 是一个方便快捷的深度学习模型转换和交换标准，可以帮助开发者更加轻松地将深度学习模型进行部署和迁移。\n```\n在将模型转换为 ONNX 格式后，对代码进行编译也是必不可少的一步。通过编译，可以将 Python 代码转换成机器语言代码，进一步提高模型的运行效率和速度。同时，也可以减少代码的存储空间，使得模型能够更快地在 CPU 上加载和运行。\n###  参考文档\nhttps:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov5  \nhttps:\u002F\u002Fgithub.com\u002Fbubbliiiing\u002FSiamese-pytorch\n\n### 点个**star**再走呗！","# Text_select_captcha 快速上手指南\n\n本工具用于识别“文字点选\u002F选字”类验证码，具备高准确率（约 96%）和低资源消耗特点，支持在低配置服务器（1 核 2G）上流畅运行。\n\n## 1. 环境准备\n\n*   **操作系统**：Windows（官方预训练模型仅支持 Windows 环境直接运行；若需跨平台使用，请自行训练 ONNX 模型）。\n*   **Python 版本**：严格限制为 **Python 3.6**、**3.8** 或 **3.10**。\n    *   *注意：其他 Python 版本可能导致模块加载错误。*\n*   **硬件要求**：无特殊 GPU 要求，CPU 即可运行。\n\n## 2. 安装步骤\n\n1.  克隆或下载本项目代码到本地。\n2.  进入项目目录，安装依赖包（建议使用国内镜像源加速）：\n\n```bash\npip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n## 3. 基本使用\n\n### 方式一：运行演示脚本\n直接运行提供的演示脚本测试默认模型效果：\n\n```bash\npython demo.py\n```\n\n### 方式二：Python 代码集成\n在你的项目中调用库进行识别：\n\n```python\nfrom src.captcha import TextSelectCaptcha\n\n# 初始化模型\n# per_path: 孪生网络模型文件路径 (默认加密 bin 文件)\n# yolo_path: 目标检测模型文件路径 (默认加密 bin 文件)\n# sign: True 表示使用项目自带的加密模型 (仅限 Windows + 指定 Python 版本); \n#       False 表示使用通用 onnx 模型 (可跨平台，需自行训练)\ncap = TextSelectCaptcha(per_path='pre_model_v2.bin', yolo_path='best_v2.bin', sign=True)  \n\n# 执行识别\nimage_path = \"docs\u002Fres.jpg\"\nresult = cap.run(image_path)\n\nprint(result)\n# 输出示例：文字坐标：[[119, 174, 193, 244], ...] 耗时：163ms\n# 返回的坐标列表顺序即为正确的点击顺序\n```\n\n### 方式三：启动 API 服务\n如需作为 HTTP 服务部署，可启动内置服务并查看文档：\n\n```bash\npython service.py\n# 启动后访问 http:\u002F\u002F127.0.0.1:8000\u002Fdocs#\u002F 查看接口文档\n```","某电商数据团队需每日自动抓取竞品平台的促销商品价格，但目标网站部署了复杂的“文字点选”验证码，阻碍了爬虫程序的正常运行。\n\n### 没有 Text_select_captcha 时\n- **人工介入成本高**：遇到验证码时程序被迫中断，必须安排专人轮流手动识别点击，无法实现 7x24 小时无人值守采集。\n- **传统 OCR 识别率低**：通用的文字识别库难以处理背景干扰强、字体扭曲的验证码，且无法理解“请按顺序点击”的逻辑指令，错误率极高。\n- **硬件资源消耗大**：若尝试自建深度学习模型，通常需要高性能 GPU 服务器进行训练和推理，对于只有低配置（如 1 核 2G）的采集节点来说负担过重。\n- **开发周期漫长**：从零收集样本、标注数据到训练 YOLO 和排序模型，耗时数周且难以保证在小样本（如仅几百张图）下的泛化能力。\n\n### 使用 Text_select_captcha 后\n- **全流程自动化**：Text_select_captcha 能在 300~500ms 内自动完成检测与排序，直接返回点击坐标，使爬虫无缝通过验证，彻底释放人力。\n- **高精度逻辑识别**：基于孪生网络与 YOLOv5 的组合，该工具不仅能精准定位文字，还能正确还原点击顺序，在少量样本训练下准确率仍高达 96%。\n- **极低部署门槛**：代码经过优化，可在低配 Windows 服务器甚至普通办公电脑上流畅运行，无需昂贵的 GPU 资源即可实时推理。\n- **快速落地应用**：支持小样本训练（仅需约 300 张图片），团队可针对特定网站快速定制模型，将原本数周的攻坚任务缩短至几天内完成。\n\nText_select_captcha 通过轻量级、高精度的自动化方案，将原本依赖人力的验证码对抗转化为高效的代码执行，极大降低了数据采集的技术门槛与运营成本。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMgArcher_Text_select_captcha_6173366a.gif","MgArcher","于佳","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FMgArcher_f167079f.png",null,"南京","yj970814@163.com","https:\u002F\u002Fgithub.com\u002FMgArcher",[83],{"name":84,"color":85,"percentage":86},"Python","#3572A5",100,1555,467,"2026-04-02T14:26:23","Windows","不需要 GPU，支持低配置机器运行（CPU 推理）","2GB+",{"notes":94,"python":95,"dependencies":99},"预编译的加密模型文件（.bin）仅支持 Windows 下的 Python 3.6\u002F3.8\u002F3.10；若需在其他环境或非 Windows 系统运行，需自行训练模型并导出为 ONNX 格式，同时将代码中的 sign 参数设为 False。项目依赖 requirements.txt 中的库，主要包含目标检测（YOLOv5）和孪生网络相关库。",[96,97,98],"3.6","3.8","3.10",[100,101,102,103],"onnxruntime","yolov5","torch","pyppeteer",[14],"2026-03-27T02:49:30.150509","2026-04-06T05:27:14.896061",[108,113,118,123,128,133,138,143],{"id":109,"question_zh":110,"answer_zh":111,"source_url":112},12130,"安装 kenlm 包时失败，提示需要 Microsoft Visual C++ 14.0 怎么办？","这是因为编译 kenlm 需要 C++ 编译器。请安装 \"Build Tools for Visual Studio\"（包含 MSVC 14.0+）。访问 https:\u002F\u002Fvisualstudio.microsoft.com\u002Fdownloads\u002F 下载并安装 Build Tools。对于 macOS 用户，官方未提供预编译包，需参考 kenlm 官网 (https:\u002F\u002Fkheafield.com\u002Fcode\u002Fkenlm\u002F) 自行编译。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F1",{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},12131,"运行代码时报 SyntaxError: invalid syntax，特别是在 f\"...\" 字符串处报错，如何解决？","这是因为代码使用了 Python 3.6+ 才支持的 f-string 语法糖。请检查您的 Python 版本，如果低于 3.6（如 3.5），需要升级 Python 到 3.6 或更高版本。如果不升级，则需要手动将代码中所有的 f\"...\" 格式改为 .format() 或 % 拼接方式。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F3",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},12132,"加载模型文件 people_chars_lm.klm 时报错 FileNotFoundError 或 OSError，但路径看起来是正确的，原因是什么？","这通常是因为文件路径中包含中文字符。KenLM 库在某些环境下无法正确解析含中文的路径。请将项目移动到全英文路径下（例如从 \"F:\\系统爬虫学习\\...\" 改为 \"F:\\Crawler_Learning\\...\"），然后重新运行程序。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F5",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},12133,"在 Linux 系统上无法使用，提示无法加载 .pyd 文件且没有源码，该如何解决？",".pyd 文件是 Windows 专用的动态链接库，无法在 Linux 上直接加载。解决方法是参考项目文档中的开发流程自行构建源码。维护者表示源码逻辑简单，按照文档流程即可在 Linux 上开发并运行，或者查看源码实现进行“曲线救国”。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F35",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},12134,"启动接口服务时报错，或者文档页面无法访问，如何修复？","如果是新版本已修复的问题，请更新代码。如果是源码运行问题，可以尝试修改源码配置，将 docs_url 和 redoc_url 设置为 None 或直接删除这两个参数，以禁用自动生成的文档界面从而避免报错。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F42",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},12135,"验证码中的文字能检测出来，但点击顺序排序错误，排序规则是什么？","项目的排序逻辑位于 \u002Fsrc\u002Futils\u002FmatchingMode.py 文件中的 find_overall_index 函数。该函数基于 Siamese 孪生网络匹配结果，按照特定规则计算最佳点击顺序。如果遇到顺序不对的情况，可以检查该函数的逻辑或针对特定验证码类型优化匹配规则。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F61",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},12136,"极验（Geetest）新版验证码无法识别或只能识别部分文字怎么办？","极验推出了新版验证码，旧版代码可能无法完全适配（例如无法识别具体汉字或漏检）。维护者已发布新版本支持最新版极验验证码，请拉取最新代码更新。如果仍存在问题，可能是因为新版不再对具体文字进行识别，而是采用图片匹配模式。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F26",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},12137,"预测时显存不足（CUDA out of memory），即使更换了加载方式仍然溢出，如何处理？","8G 显存通常在加载大模型或批量计算时可能不足。虽然 issue 中未给出具体代码级优化方案，但通用建议包括：减小 batch size、使用半精度推理 (FP16)、或在 CPU 上进行非核心部分的计算。如果使用的是训练出的模型，确认推理代码是否有多余的梯度计算（应使用 torch.no_grad()）。","https:\u002F\u002Fgithub.com\u002FMgArcher\u002FText_select_captcha\u002Fissues\u002F9",[]]