当前位置: 首页 > news >正文

粘连字符验证码的分割与识别思路

在验证码设计中,常见的一种防护方式是字符粘连:多个字符之间没有明显的空隙,甚至部分笔画重叠。这种情况使得传统 OCR 很难直接识别。本文将介绍一种基于投影分析与轮廓分割的处理流程,帮助我们从粘连验证码中分离出独立字符。

一、问题分析

粘连验证码的典型特征:

字符之间边界模糊,甚至部分笔画重叠;
更多内容访问ttocr.com或联系1436423940
简单的二值化无法区分不同字符;

OCR 在整体输入下容易输出错误结果。

解决思路:

通过二值化得到字符轮廓;

对二值图像进行垂直投影,寻找字符间的“谷值”;

在谷值附近切割,得到单个字符;

再逐一送入 OCR 识别。

二、实现步骤(Python 示例)

  1. 导入依赖
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    import pytesseract

  2. 读取与灰度化
    img = cv2.imread("captcha_stick.png")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY_INV)

cv2.imwrite("step1_binary.png", binary)

  1. 垂直投影计算
    h, w = binary.shape
    projection = np.sum(binary, axis=0)

plt.plot(projection)
plt.title("Vertical Projection")
plt.savefig("step2_projection.png")

  1. 根据投影谷值分割字符

找出投影中接近 0 的区域,作为切割点

threshold = np.max(projection) * 0.2
cuts = []
in_gap = False

for x, val in enumerate(projection):
if val < threshold and not in_gap:
cuts.append(x)
in_gap = True
elif val >= threshold and in_gap:
cuts.append(x)
in_gap = False

切割并保存字符

chars = []
for i in range(0, len(cuts)-1, 2):
roi = binary[:, cuts[i]:cuts[i+1]]
chars.append(roi)
cv2.imwrite(f"char_{i//2}.png", roi)

  1. OCR 单字符识别
    for i, c in enumerate(chars):
    text = pytesseract.image_to_string(c, config="--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    print(f"字符{i}: {text.strip()}")
http://www.zskr.cn/news/775.html

相关文章:

  • Symfony学习笔记 - Symfony Documentation - The Basics(3)
  • HAMi vGPU 原理分析 Part4:SpreadBinpack 高级调度策略实现
  • Brute Ratel C4红队框架 远控工具BRC4 2.1.2 版本分享
  • Navicat连接配置信息还原并导出文件
  • NOIP 集训日记(学术)
  • 一个Python并发编程技巧:future当作字典的key当作中间值构建最终结果
  • 国产DevOps平台Wiki模块能力全景解析:从知识协同到合规部署的关键抉择
  • Gitee Wiki如何重塑软件工厂时代的知识管理体系?
  • 第1章 计算机系统概述
  • 2025年,CRM厂家权威榜单【 TOP 5】
  • Why框架元推理,对本吉奥警告的解析与安全证明
  • Yii-1-1-应用开发即时启动指南-全-
  • 中电金信:AI重构测试体系智能化时代的软件工程新范式
  • DOS系统与Windows系统的区别
  • Android Studio 2025.1.1 安装与配置全流程教学
  • Postgres常用语句
  • 如何在Windows系统上安装Final Cut Pro
  • 【案例+1】HarmonyOS官方模板优秀案例 第7期:金融理财 记账应用
  • BurpSuite 代理原理 和 证书钉扎检测技术
  • java、Kotlin经验
  • 强大的OSINT情报工具:Blackbird用户名与邮箱搜索分析平台
  • MySQL索引
  • 从模糊到超清!Aiarty Image Enhancer 安装与使用教程
  • Google Play更改支付地址
  • 对话式 AI Workshop|零帧起手捏个「 Her」——搭建拥有个人记忆的语音助手
  • Codeforces Round 1048 (Div. 1) A Cake Assignment 题解
  • Linux中的字符设备和块设备详解和应用区别
  • Gitee DevOps:本土化研发效能引擎的崛起与突破
  • 在Docker容器中运行TaichiSLAM
  • 计算机图形学 - 渲染 - stone-stone