使用 Nim 和 Tesseract 实现图像验证码识别
一、环境准备
安装 Nim
官网安装:https://nim-lang.org/install.html
推荐使用 choosenim:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
安装 Tesseract OCR
更多内容访问ttocr.com或联系1436423940
Ubuntu / Debian
sudo apt install tesseract-ocr
macOS
brew install tesseract
二、新建项目
mkdir nim_captcha
cd nim_captcha
nimble init
选择 binary 项目类型。
编辑 nim_captcha.nimble,添加依赖:
requires "strutils"
三、编写主程序
编辑 src/nim_captcha.nim:
import os, strutils
proc runTesseract(imagePath: string): string =
let outputBase = "result"
let whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let cmd = "tesseract " & imagePath & " " & outputBase &
" -l eng -c tessedit_char_whitelist=" & whitelist
let code = execShellCmd(cmd)
if code != 0:
return "识别失败"
let resultFile = outputBase & ".txt"
if fileExists(resultFile):
let content = readFile(resultFile)
removeFile(resultFile)
return content.toUpperAscii().filterIt(it in whitelist)
else:
return "结果文件未生成"
when isMainModule:
if paramCount() < 1:
echo "用法: nim_captcha <验证码图片路径>"
else:
let image = paramStr(1)
let result = runTesseract(image)
echo "识别结果: ", result
四、编译与运行
编译程序:
nim c -r src/nim_captcha.nim captcha1.png
输出示例:
识别结果: 3AZM
五、批量识别功能(可选)
你可以扩展程序,支持批量处理整个目录下的验证码图片:
proc batchProcess(dir: string) =
for kind, path in walkDir(dir):
if kind == pcFile and path.endsWith(".png"):
let r = runTesseract(path)
echo path, " -> ", r
在 main 中调用:batchProcess("captchas")
浙公网安备 33010602011771号