iOS Swift 拍照识别数字(Recognizing Text in Images)

1.苹果官方的解决方案(推荐)

Recognizing Text in Images - apple developer
Extracting phone numbers from text in images(Sample Code) - apple developer

1.1 demo下载(亲测有效) :recognizeTextInImage - gitee

请添加图片描述

请添加图片描述

1.2 测试成功的代码

import UIKit
import Visionclass ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {@IBOutlet weak var resLabel: UILabel!@IBAction func recognizeAssetsImage(_ sender: Any) {recognizeText(in: #imageLiteral(resourceName: "image_sample"))}// 按钮点击,打开相册@IBAction func selectImage(_ sender: UIButton) {let imagePickerController = UIImagePickerController()imagePickerController.delegate = selfpresent(imagePickerController, animated: true, completion: nil)}// 选择图片完成后的回调func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {picker.dismiss(animated: true, completion: nil)// 获取选择的图片guard let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {return}let resImage = binarize(image: selectedImage)!// 识别图片中的文本recognizeText(in: resImage)}func binarize(image: UIImage, threshold: CGFloat = 0.5) -> UIImage? {guard let cgImage = image.cgImage else { return nil }let width = cgImage.widthlet height = cgImage.heightlet colorSpace = CGColorSpaceCreateDeviceGray()var pixels = [UInt8](repeating: 0, count: width * height)guard let context = CGContext(data: &pixels, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width, space: colorSpace, bitmapInfo: CGImageAlphaInfo.none.rawValue) else { return nil }context.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height))for i in 0 ..< pixels.count {pixels[i] = pixels[i] < UInt8(threshold * 255) ? 0 : 255}guard let binarizedCgImage = context.makeImage() else { return nil }return UIImage(cgImage: binarizedCgImage)}func recognizeText(in image: UIImage) {// 将 UIImage 转换为 CGImageguard let cgImage = image.cgImage else { return }// 创建处理请求的处理器let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])// 创建 VNRecognizeTextRequestlet request = VNRecognizeTextRequest { (request, error) inif let error = error {print("Text recognition error: \(error)")return}// 处理识别结果guard let observations = request.results as? [VNRecognizedTextObservation] else { return }for observation in observations {// 获取识别到的文本guard let topCandidate = observation.topCandidates(1).first else { continue }print("Recognized text: \(topCandidate.string)")self.resLabel.text = topCandidate.string}}// 设置识别级别request.recognitionLevel = .accurate// 执行请求do {try handler.perform([request])} catch {print("Failed to perform text recognition: \(error)")}}
}

前期尝试过的解决方案(没有试成功过)
TesseractOCRiOS - github(最后一次提交2020.2)
SwiftyTesseract - github(最后一次提交2022.4)
OCR的iOS demo - 腾讯云

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

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

相关文章

碎片笔记|AIGC核心技术综述

前言&#xff1a;AIGC全称为AI-Generated Content&#xff0c;直译为人工智能内容生成。即采用人工智能技术来自动生产内容。AIGC在2022年的爆发&#xff0c;主要是得益于深度学习模型方面的技术创新。不断涌现的生成算法、预训练模型以及多模态等技术的融合引发了AIGC的技术变…

MySQL数据库与表管理《三国志》为例

在数据库管理中,一个典型的应用场景是游戏数据的存储和管理。以经典游戏《三国志》为例,该游戏具有多个角色、任务、装备等元素,如何有效地存储和管理这些数据就成为了一个问题。 本文将通过《三国志》的实例,详细解释如何在MySQL中进行数据库和表的管理。 文章目录 《三国…

深度剖析Linux磁盘分区 | LVM逻辑卷 | VDO卷 | AutoFS存储自动挂载

深度剖析Linux磁盘分区 | LVM逻辑卷 | VDO卷 | AutoFS存储自动挂载 前言说明1. 安装操作系统分区配置2. 大磁盘分区管理3. LVM逻辑卷管理3.1. 创建LVM逻辑卷3.1.1. 创建物理卷PV3.1.2. 创建卷组VG3.1.3. 创建逻辑卷LV3.1.4. 创建并挂载文件系统3.1.5. 配置开机自动挂载 3.2. 逻…

华为云云耀云服务器L实例评测|华为云上安装etcd

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上安装etcd一、什么是etcd官方硬件建议 二、华为云主机准备三、etcd安装1. 安装预构建的二进制文件2. 从源代码构建 四、etcd服务注册与发现1. 配置etcd2. 使用systemctl 管理启动etcd服务3. 注册服务4. 发现服务 五、其…

面试题:说一下SpringBoot的自动配置原理

文章目录 引言工作原理剖析EnableAutoConfiguration自动配置生效总结 引言 不论在工作中&#xff0c;亦或是求职面试&#xff0c;Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外&#xff0c;如今的各行各业都在飞速的拥抱这个已经…

C# 获取磁盘空间大小的方法

方法一&#xff1a;利用System.IO.DriveInfo.GetDrives方法来获取 /// 获取指定驱动器的空间总大小(单位为B)////// 只需输入代表驱动器的字母即可 &#xff08;大写&#xff09;///public static long GetHardDiskSpace(string str_HardDiskName){long totalSize new long();…

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下&#xff0c;我们在PHP里使用echo等函数输出的内容&#xff0c;是不会马上发送给前端的&#xff0c;原因是有 buffer 的存在&#xff0c;buffer又分两处&#xff0c;一处是PHP本身的buffer&#xff0c;另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…

if条件分支计算分段函数

分别罗列x的值域区间&#xff0c;if条件跳转相应分支计算函数值。 (本笔记适合正在研学if条件分支语句的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c…

【MySQL进阶】--- 存储引擎的介绍

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、什么…

ALOS2 PALSAR2 数据ID命名规则

场景ID AAAAABBBBBCCCC-YYMMDD AAAAA:卫星类别“ALOS2” BBBBB:以场景为中心的总计循环号码 CCCC:场景中心的帧编号 -: 分隔号 YYMMDD:场景中心的观测年月日 (YY:末两位年&#xff0c;MM:月&#xff0c;DD:日) 产品ID DDDEFFFGHI DDD:观测模式 SBS:聚光灯模式 UBS:高分辨…

HMTL知识点系列(3)

目录 1. 如何在HTML中嵌入视频和音频&#xff1f;2. 解释一下HTML的“盒模型”是什么&#xff0c;以及它如何影响布局&#xff1f;3. 你如何理解HTML的语义化标签和SEO优化之间的关系&#xff1f;4. 什么是HTML5的canvas元素&#xff0c;你如何使用它来创建图形&#xff1f;5. …

【k8s】【docker】web项目的部署

yaml配置文件 后端&#xff1a;springboot项目 前端&#xff1a;vue项目&#xff0c;之前镜像封装的nginx.conf反向代理配置直接使用了docker-compose.yml中services的名称&#xff0c;无法代理成功&#xff0c;可修改为127.0.0.1 # 后端 apiVersion: apps/v1 kind: Deployment…

Object.defineProperty()方法详解,了解vue2的数据代理

假期第一篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 Object.defineProperty(),对于这个方法&#xff0c;更多的还是停留在面试的时候&#xff0c;面试官问你vue2和vue3区别的时候&#xff0c;不免要提一提这个方法…

(2023,ControlNet,CFGRW,diffusion,控制组合)向文本到图像扩散模型添加条件控制

Adding Conditional Control to Text-to-Image Diffusion Models 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2.相关工作 2.1. 微调神经网络 2.2. 图像扩散 …

git是什么,git常用命令

Git是一种分布式版本控制系统&#xff0c;最初由Linus Torvalds创作并用于管理Linux内核代码。 常见的一些Git命令包括&#xff1a; git init&#xff1a;初始化一个新的Git仓库&#xff1b;git add&#xff1a;将文件添加到Git仓库中&#xff1b;git commit&#xff1a;将更…

FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令分类查询 FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令分类查询ffmpeg -versionffmpeg -buildconfffmpeg -formatsffmpeg -muxersffmpeg -demuxersffmpeg -codecsffmpeg -decodersffmpeg -encodersffmpeg -bsfsffmpeg…

基于SSM+Vue的医院住院综合服务管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Axios有哪些常用的方法?

Axios是一个常用的JavaScript库&#xff0c;用于进行HTTP请求。它提供了一组简洁而强大的方法来发送各种类型的请求&#xff0c;并处理响应数据。以下是Axios中一些常用的方法及其格式&#xff1a; GET请求&#xff1a; axios.get(url[, config]).then(response > {// 请求…

三、2023.9.29.C++面向对象.3

文章目录 33、简述一下什么是面向对象&#xff1f;34、简述一下面向对象的三大特征&#xff1f;35、简述一下 C 的重载和重写&#xff0c;以及它们的区别&#xff1f;36、说说 C 的重载和重写是如何实现的&#xff1f;37、说说构造函数有几种&#xff0c;分别什么作用?38、只定…

汽车电子——产品标准规范汇总和梳理(开发体系)

文章目录 前言 一、设计架构 二、安全可靠 三、测试验证 四、过程能力 五、质量管理 六、开发指南 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、设计架构 《Autosar R22-11 汽车开放系统体系架构》 二、安全可靠 《GB/T 34590.1-2022&#xff08;ISO 262…