使用 Haskell 和 Tesseract 实现验证码识别

一、准备工作
安装 GHC(Haskell 编译器)和 Cabal

sudo apt install ghc cabal-install # Ubuntu
brew install ghc cabal-install # macOS
安装 Tesseract OCR:

sudo apt install tesseract-ocr # Ubuntu
brew install tesseract # macOS
创建项目目录:

mkdir captcha-ocr
cd captcha-ocr
二、Haskell 脚本代码(Main.hs)
创建一个 Main.hs 文件,写入以下代码:

import System.Process (callProcess)
import System.Directory (doesFileExist, removeFile)
import System.IO (readFile)
import Data.Char (isDigit, isUpper)
import Control.Monad (when)

cleanText :: String -> String
cleanText = filter (\c -> isDigit c || isUpper c)

recognizeCaptcha :: FilePath -> IO ()
recognizeCaptcha imagePath = do
let outputBase = "output"
callProcess "tesseract" [imagePath, outputBase, "-l", "eng", "-c", "tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"]

let resultFile = outputBase ++ ".txt"
exists <- doesFileExist resultFile
if exists
  then do
    content <- readFile resultFile
    let result = cleanText content
    putStrLn $ "识别结果: " ++ result
    removeFile resultFile
  else
    putStrLn "识别失败,未生成输出文件"

更多内容访问ttocr.com或联系1436423940
main :: IO ()
main = recognizeCaptcha "captcha1.png" -- 替换为你的图像路径
三、编译与运行
确保当前目录下有图片 captcha1.png,然后使用以下命令编译运行:

runghc Main.hs
输出示例:

识别结果: A4J9
四、可拓展内容
遍历整个目录,批量识别图像验证码

与 Haskell 图像处理库(如 JuicyPixels)结合,加入图像预处理

将结果写入 JSON 或 CSV 文件

封装为 CLI 工具或 HTTP API(配合 servant 或 wai 框架)

posted @ 2025-06-29 13:56  ttocr、com  阅读(17)  评论(0)    收藏  举报