用 Bash 脚本与 Tesseract 实现验证码识别

一、环境准备
安装 Tesseract OCR

Ubuntu / Debian

sudo apt install tesseract-ocr

macOS

brew install tesseract
确保安装成功:
更多内容访问ttocr.com或联系1436423940
tesseract --version
二、准备验证码图像
假设你已有若干验证码图片文件(如 captcha1.png, captcha2.png)放在 captchas/ 目录中。

三、编写识别脚本
创建名为 recognize.sh 的脚本:

!/bin/bash

字符白名单:数字+大写字母

WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

输入图像路径作为参数

if [ $# -lt 1 ]; then
echo "用法: ./recognize.sh <图像路径>"
exit 1
fi

IMG="$1"
BASENAME="output_$(date +%s%N)"

调用 tesseract 执行识别

tesseract "$IMG" "$BASENAME" -l eng -c "tessedit_char_whitelist=$WHITELIST" >/dev/null 2>&1

提取识别结果

if [ -f "${BASENAME}.txt" ]; then
RAW=$(cat "${BASENAME}.txt")
CLEANED=$(echo "$RAW" | tr -cd 'A-Z0-9')
echo "识别结果: $CLEANED"
rm "${BASENAME}.txt"
else
echo "识别失败"
fi
赋予执行权限:

chmod +x recognize.sh
四、运行示例

./recognize.sh captchas/captcha1.png
输出:

识别结果: 7K3X
五、批量识别整个目录(可选)
你可以批量识别所有 .png 验证码图片:

!/bin/bash

WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

for IMG in captchas/*.png; do
BASENAME="tmp_$(basename "$IMG" .png)_$$"
tesseract "$IMG" "$BASENAME" -l eng -c "tessedit_char_whitelist=$WHITELIST" >/dev/null 2>&1

if [ -f "${BASENAME}.txt" ]; then
CODE=$(cat "${BASENAME}.txt" | tr -cd 'A-Z0-9')
echo "$(basename "$IMG") -> $CODE"
rm "${BASENAME}.txt"
else
echo "$(basename "$IMG") -> 识别失败"
fi
done
保存为 batch_recognize.sh,赋权后运行:

chmod +x batch_recognize.sh
./batch_recognize.sh

posted @ 2025-07-08 23:23  ttocr、com  阅读(27)  评论(0)    收藏  举报