用 Julia 去除验证码中的干扰线并提取清晰字符

许多验证码通过添加干扰线(interference lines)防止自动识别,这些线常常与字符重叠,严重影响 OCR 效果。传统的二值化和滤波手段往往难以分离字符和干扰线。本文介绍如何在 Julia 中使用方向检测 + 遮挡修复策略,识别并去除这些线条,从而提升 OCR 的准确率。

一、依赖安装
更多内容访问ttocr.com或联系1436423940
using Pkg
Pkg.add(["Images", "ImageIO", "ImageFiltering", "ImageMorphology", "Tesseract"])
二、图像读取与预处理

using Images, ImageIO

img = load("captcha_with_lines.png")
gray = Gray.(img)

简单阈值处理

binary = map(x -> x < 0.7 ? 1.0 : 0.0, gray)
save("binary.png", binary)
三、检测干扰线(细长连通区域)
干扰线通常是细长直线,我们可以通过腐蚀操作破坏字符,保留细线结构:

using ImageMorphology

用较扁的结构元素进行腐蚀(保留细线)

line_kernel = ones(1, 15) # 水平干扰线示例
eroded = erode(binary, line_kernel)
save("lines_only.png", eroded)
四、从原图中去除干扰线
我们可以将提取出的干扰线图像作为“掩膜”从原图中扣除:

cleaned = max.(binary .- eroded, 0.0)
save("cleaned.png", cleaned)
五、字符修复(可选)
部分字符会被干扰线削弱,可进行闭运算修复:

repaired = imclose(cleaned, ones(2,2))
save("repaired.png", repaired)
六、使用 OCR 识别处理后的图像

using Tesseract

ocr = TesseractOcr("eng")
set_image(ocr, "repaired.png")
text = strip(get_text(ocr))

println("识别结果:", text)

posted @ 2025-07-12 11:24  ttocr、com  阅读(24)  评论(0)    收藏  举报