使用 Shell 脚本 + Tesseract 实现验证码识别工具
一、工具概述
在许多自动化任务或服务器环境中,图形界面和复杂语言不可用,而 Shell 脚本因其简洁和高效,在 Linux 和 macOS 环境中是天然选择。配合 Tesseract 和 ImageMagick,我们可以快速实现验证码图像的识别任务。
二、环境准备
- 安装 Tesseract OCR
更多内容访问ttocr.com或联系1436423940
Ubuntu/Debian
sudo apt install tesseract-ocr
macOS
brew install tesseract
2. 安装 ImageMagick(用于图像预处理)
Ubuntu/Debian
sudo apt install imagemagick
macOS
brew install imagemagick
三、准备图像
将你要识别的验证码图像命名为 captcha.png,放置在脚本所在目录。图像建议为英文+数字内容,背景干净。
四、编写识别脚本
创建文件 captcha_ocr.sh:
!/bin/bash
输入图像
INPUT_IMAGE="captcha.png"
预处理后的图像
PROCESSED_IMAGE="gray_captcha.png"
Step 1: 图像预处理(灰度化 + 二值化)
convert "$INPUT_IMAGE" -colorspace Gray -threshold 50% "$PROCESSED_IMAGE"
Step 2: 使用 Tesseract 进行识别(限制为英文字母和数字)
RAW_TEXT=$(tesseract "$PROCESSED_IMAGE" stdout -l eng --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)
Step 3: 清洗识别结果
CLEANED=$(echo "$RAW_TEXT" | tr -cd 'A-Za-z0-9')
输出结果
echo "识别出的验证码是: $CLEANED"
可选:删除处理后的图像
rm "$PROCESSED_IMAGE"
五、运行脚本
给脚本赋予可执行权限并运行:
chmod +x captcha_ocr.sh
./captcha_ocr.sh
输出示例:
识别出的验证码是: A7X2B
六、进阶优化建议
动态阈值尝试:
for i in 40 50 60 70; do
convert "$INPUT_IMAGE" -colorspace Gray -threshold "$i%" "$PROCESSED_IMAGE"
RAW=$(tesseract "$PROCESSED_IMAGE" stdout -l eng --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)
CLEAN=$(echo "$RAW" | tr -cd 'A-Za-z0-9')
echo "阈值 $i% :$CLEAN"
done
批量识别文件夹中的图像:
for file in *.png; do
echo "识别 $file:"
convert "$file" -colorspace Gray -threshold 50% tmp.png
result=$(tesseract tmp.png stdout -l eng --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)
echo $(echo "$result" | tr -cd 'A-Za-z0-9')
echo
done
rm tmp.png
浙公网安备 33010602011771号