使用 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 框架)
浙公网安备 33010602011771号