使用 Swift + Tesseract OCR 解析验证码

news/2025/3/26 16:04:27/文章来源:https://www.cnblogs.com/ocr12/p/18789997
  1. 环境准备
    1.1 安装 Swift
    macOS 自带 Swift,可以在终端中检查是否已安装:

更多内容访问ttocr.com或联系1436423940
swift --version
如果 Swift 未安装,可通过 Xcode 或 brew 进行安装:

brew install swift
1.2 安装 Tesseract OCR
在 macOS 上,使用 Homebrew 安装:

brew install tesseract
安装完成后,验证 Tesseract 是否可用:

tesseract --version
1.3 创建 Swift 项目

mkdir CaptchaOCR
cd CaptchaOCR
swift package init --type executable
1.4 添加 Tesseract 依赖
编辑 Package.swift,添加 SwiftyTesseract:

// swift-tools-version:5.7
import PackageDescription

let package = Package(
name: "CaptchaOCR",
dependencies: [
.package(url: "https://github.com/SwiftyTesseract/SwiftyTesseract.git", from: "2.0.0")
],
targets: [
.target(
name: "CaptchaOCR",
dependencies: ["SwiftyTesseract"]
)
]
)
然后运行:

swift package update
2. 代码实现
在 Sources/CaptchaOCR/main.swift 中编写如下代码:

import Foundation
import SwiftyTesseract
import AppKit

/// 进行 OCR 识别
func recognizeCaptcha(imagePath: String) {
let tesseract = SwiftyTesseract(languages: [.english])

// 读取验证码图像
guard let image = NSImage(contentsOfFile: imagePath) else {print("无法加载图片")return
}// 进行 OCR 解析
tesseract.performOCR(on: image) { result inswitch result {case .success(let text):print("识别出的验证码: \(text)")case .failure(let error):print("OCR 识别失败: \(error)")}
}

}

// 运行 OCR 识别
let imagePath = "captcha.png" // 你的验证码图片路径
recognizeCaptcha(imagePath: imagePath)
3. 代码解析
3.1 加载 Tesseract

let tesseract = SwiftyTesseract(languages: [.english])
这里使用 SwiftyTesseract 作为 OCR 引擎,加载 eng 语言模型。

3.2 读取图像

guard let image = NSImage(contentsOfFile: imagePath) else {
print("无法加载图片")
return
}
NSImage(contentsOfFile:) 读取本地验证码图片。

3.3 OCR 解析

tesseract.performOCR(on: image) { result in
switch result {
case .success(let text):
print("识别出的验证码: (text)")
case .failure(let error):
print("OCR 识别失败: (error)")
}
}
使用 performOCR 进行验证码解析,返回识别的文本。

  1. 运行 OCR 识别
    编译并运行:

swift run
终端将输出识别的验证码内容。

  1. 提高 OCR 识别率
    5.1 预处理验证码
    可以使用 CoreImage 进行二值化处理,提高识别率:

import CoreImage

func preprocessImage(image: NSImage) -> NSImage? {
let ciImage = CIImage(data: image.tiffRepresentation!)
let filter = CIFilter(name: "CIColorControls")!
filter.setValue(ciImage, forKey: kCIInputImageKey)
filter.setValue(0.0, forKey: kCIInputSaturationKey) // 转灰度
filter.setValue(2.0, forKey: kCIInputContrastKey) // 增强对比度

let context = CIContext()
if let output = filter.outputImage,let cgImage = context.createCGImage(output, from: output.extent) {return NSImage(cgImage: cgImage, size: image.size)
}
return nil

}
5.2 设置合适的 PSM 模式
Tesseract 的页面分割模式(PSM)可以提高验证码识别率:

tesseract.setVariable(.tesseditPagesegMode, "6")
PSM 6 适用于单行验证码解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904919.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内首个HR智能体平台:开启人力资源管理智能化征程

在当今数字化飞速发展的浪潮中,人工智能已不再是一个遥远的概念,而是实实在在地渗透到了各个领域,深刻改变着我们的工作与生活方式。人力资源管理,这一关乎企业核心竞争力的关键环节,也正经历着AI技术带来的前所未有的变革。HR智能体作为这一变革中的重要成果,正逐渐成为…

爆火开源库!20K星标,一键让网页设计秒变手绘风

今天必须给大伙说说一个超有意思的开源库,在GitHub上已经斩获20K星标啦,它能轻松给网页设计加上手绘风格的“滤镜”,让页面瞬间告别千篇一律,充满艺术感!一、Rough.js是什么?这个名为Rough.js轻量级的图形库,大小才8KB,能赋予网页元素自然又独特的手绘质感。通过一套特…

易路iBuilder智能体平台:AI+HR、全场景、深融合,7大创新应用引领HR管理变革

从国产AI大模型DeepSeek发布至今,国内外人工智能的热度持续居高不下。AI Agent(智能体)作为人工智能领域的重要概念与产品形态,也被广泛提起、认识并应用于千行万业中。本文将基于人力资源领域首个AI Agent垂直应用——易路iBuilder智能体平台的创新实践应用,对智能体在人…

Gitee DevOps 实践指南:本土团队效率提升的新范式

在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,通过深度融合代码托管、CI/CD、项目管理等核心功能,为企业提供了本土化的 DevOps 解决方案。一、Gitee DevOps 的核心价值定位 在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,…

那些正常的动态规划

目录前言动态规划到底是啥?线性dp最长上升子序列子集和子序列和子串的区别内容分析最大上升子序列例题1——[NOIP2004 提高组] 合唱队形分析最长公共子序列最长公共子串平面dp例题2——[NOIP2000 提高组] 方格取数分析例题3——[NOIP2008 提高组] 传纸条分析例题4——最大加权…

3月24日刷题笔记-第六章 流量特征分析-常见攻击事件 tomcat

1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag 我们查看流量包,可以发现有一个外部IP在对常见端口进行SYN扫描,判断出为恶意IPflag{14.0.0.120} 2、找到攻击者IP后请通过…

如何在云效中使用 DeepSeek 等大模型实现 AI 智能评审

除了代码智能补全外,AI 代码智能评审是 DevOps 领域受开发者广泛关注的另一场景了。本文,我们将结合云效代码管理 Codeup、流水线 Flow 和 DeepSeek,分享一种企业可快速自主接入,即可实现的 AI 智能评审解决方案,希望给大家一些启发。作者:崔力强、黄博文 除了代码智能补…

T+0量化:JAVA接入Level2高频行情(附Python代码)

去年在知乎分享过一个网格策略,评论区全是"代码能跑通但实盘不敢用"的留言。当时我也一样——用第三方平台回测美滋滋,一到实盘就怂:行情延迟3秒、API调用次数受限、策略逻辑被平台规则卡脖子…直到把整套系统搬回本地,才发现自建交易系统的快感就像从合租屋搬进…

制作一个简单的带有3D打印部件的四足蜘蛛机器人

在这个项目中,我将向您展示如何使用3D打印部件制作一个简单的4腿行走蜘蛛机器人。该设计主要由上下板、臂接插件、腿和伺服支架五个部分组成。机器人的4条腿由4个手臂部分和4个腿部分组成。机器人的运动总共使用了8个业余伺服电机,4个在手臂上,4个在腿上。在电路方面,首选E…

统计学习之数据挖掘(结构数据)

统计学习之数据挖掘(结构数据):降维聚类关联度分析分类神经网络