使用 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")

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