用 Swift 解析验证码:结合 Tesseract OCR 实现文本识别

news/2025/3/26 15:21:51/文章来源:https://www.cnblogs.com/ocr12/p/18790019
  1. 环境准备
    1.1 安装 Xcode 和 Swift
    如果你在 macOS 上开发,建议使用 Xcode 进行 Swift 代码编写。安装 Xcode 后,可以使用以下命令检查 Swift 是否可用:

swift --version
1.2 安装 Tesseract OCR
在 macOS 上,可以通过 Homebrew 安装 Tesseract:

brew install tesseract
安装完成后,检查版本:

tesseract --version
1.3 创建 Swift 项目
你可以使用 Xcode 创建一个 macOS 命令行工具项目,或者使用终端:

mkdir SwiftOCR
cd SwiftOCR
swift package init --type executable
1.4 添加依赖
Swift 使用 Swift Package Manager (SPM) 来管理依赖。我们需要引入 SwiftyTesseract 库。

编辑 Package.swift,添加:

dependencies: [
.package(url: "https://github.com/SwiftyTesseract/SwiftyTesseract.git", from: "2.2.0")
],
targets: [
.target(
name: "SwiftOCR",
dependencies: ["SwiftyTesseract"]
)
]
然后运行:

swift build
2. 代码实现
在 Sources/SwiftOCR/main.swift 中编写如下代码:

import Foundation
import SwiftyTesseract
import AppKit

// 图像处理函数:加载验证码
func loadImage(from path: String) -> NSImage? {
return NSImage(contentsOfFile: path)
}

// OCR 识别函数
func recognizeCaptcha(imagePath: String) {
guard let image = loadImage(from: imagePath),
let tiffData = image.tiffRepresentation,
let bitmap = NSBitmapImageRep(data: tiffData) else {
print("无法加载图片")
return
}

let swiftyTesseract = SwiftyTesseract(language: .english)swiftyTesseract.performOCR(on: bitmap) { result inswitch result {case .success(let text):print("识别出的验证码: \(text.trimmingCharacters(in: .whitespacesAndNewlines))")case .failure(let error):print("OCR 失败: \(error.localizedDescription)")}
}

}

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

func loadImage(from path: String) -> NSImage? {
return NSImage(contentsOfFile: path)
}
NSImage 是 macOS 的图像处理类,可用于加载图像。

3.2 OCR 识别

let swiftyTesseract = SwiftyTesseract(language: .english)
swiftyTesseract.performOCR(on: bitmap) { result in
switch result {
case .success(let text):
print("识别出的验证码: (text.trimmingCharacters(in: .whitespacesAndNewlines))")
case .failure(let error):
print("OCR 失败: (error.localizedDescription)")
}
}
使用 SwiftyTesseract 进行 OCR 识别。

解析 NSBitmapImageRep 类型的图像,并提取文本。

  1. 运行 OCR 识别
    在终端运行:

swift run
终端将输出识别出的验证码文本。

  1. 提高 OCR 识别率
    5.1 选择适合的 PSM 模式
    Tesseract 提供了不同的页面分割模式(PSM),可以优化识别效果:

swiftyTesseract.setVariable("tessedit_pageseg_mode", value: "6")
其中:

6 适用于单行文本识别

7 适用于纯文本验证码

5.2 训练自定义模型
如果验证码使用特殊字体或样式,可训练 Tesseract 适应新的字符集:
更多内容访问ttocr.com或联系1436423940
tesseract captcha.png output --psm 6 --oem 1
5.3 进一步优化
降噪处理:可以使用 Core Image 进行滤波,去除噪点。

字符切割:如果验证码字符连在一起,可以考虑字符分割算法提高识别率。

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

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

相关文章

20234120 2024-2025-2 《Python程序设计》实验一报告

20234120 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2341 姓名: 李卓颖 学号:20234120 实验教师:王志强老师 实验日期:2025年3月22日 必修/选修:专业选修课 一、实验内容 (一)准备工作:1.安装Python和PyCharm:访问Python和PyCharm官…

day:28 postman——断言

一.postman 断言 1.断言再test中 状态码是否等于200: tests["Status code is 200"] = responseCode.code === 200; 断言响应时间小于200ms: tests["Response time is less than 200ms"] = responseTime < 200; 断言响应体包含内容: tests["Bod…

XDA论坛打不开的解决办法

开了梯子反而进不去,关掉全局代理 v2 可以添加两行 https://xdaforums.com/; https://www.xda-developers.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 智能评审解决方案,希望给大家一些启发。作者:崔力强、黄博文 除了代码智能补…