使用 R 和 Tesseract 实现图像验证码识别
一、准备工作
安装 Tesseract
Windows:从 https://github.com/tesseract-ocr/tesseract 下载并安装,记得添加到系统路径。
macOS:更多内容访问ttocr.com或联系1436423940
brew install tesseract
Ubuntu:
sudo apt install tesseract-ocr
安装 R 包
打开 R 或 RStudio,执行:
install.packages("tesseract")
install.packages("magick")
二、识别单张验证码图片
创建 captcha.R 文件:
library(tesseract)
library(magick)
设置英文识别器 + 字符白名单
eng <- tesseract("eng", options = list(tessedit_char_whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"))
加载验证码图片
img <- image_read("captcha1.png") # 替换为实际图片路径
可选:图像预处理(转灰度、增强对比)
img <- image_convert(img, colorspace = "gray")
img <- image_threshold(img, type = "black", threshold = "50%")
OCR识别
text <- ocr(img, engine = eng)
提取合法字符
text_clean <- gsub("[^A-Z0-9]", "", toupper(text))
cat("识别结果:", text_clean, "\n")
三、批量识别文件夹内的验证码
扩展为批量处理并输出结果:
library(tesseract)
library(magick)
eng <- tesseract("eng", options = list(tessedit_char_whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"))
recognize_captcha <- function(path) {
img <- image_read(path)
img <- image_convert(img, colorspace = "gray")
img <- image_threshold(img, type = "black", threshold = "50%")
txt <- ocr(img, engine = eng)
return(gsub("[^A-Z0-9]", "", toupper(txt)))
}
设置目录
img_dir <- "captchas"
files <- list.files(img_dir, pattern = "\.png$", full.names = TRUE)
results <- data.frame(filename = basename(files), text = sapply(files, recognize_captcha), stringsAsFactors = FALSE)
print(results)
可保存为 CSV
write.csv(results, "captcha_results.csv", row.names = FALSE)
四、识别效果优化建议
通过 magick 包进行图像预处理,如模糊、去噪、腐蚀/膨胀等操作。
结合 keras 或 torch R 接口训练深度学习模型提升准确率。
使用多个 OCR 引擎(如 tesseract + easyOCR via Python)做投票融合。
浙公网安备 33010602011771号