【iOS】——基于Vision Kit框架实现图片文字识别

文章目录

  • 前言
  • 一、文本识别的分类
  • 二、实现步骤
    • 1.导入Vision Kit框架
    • 2.创建请求处理器
    • 3.在请求处理器中设置文字识别功能
    • 4.将图片添加到请求处理器中
    • 5.发起文字识别请求
    • 6.处理识别结果
  • 三、运行结果测试
    • 1.纯英文环境
    • 2.中英文混合环境


前言

根据苹果的官方文档,Vision可以执行面部检测、文本检测、条形码识别、图像注册和一般功能跟踪。Vision还允许将自定义Core ML模型用于分类或对象检测等任务。下面只是对文本识别的一个学习。


一、文本识别的分类

Vision的文本识别分为两种方式。

第一种是快速路径(fast),它使用框架的字符检测功能来查找单个字符,然后使用小型机器学习模型来识别单个字符和单词,这种方法类似于传统的光学字符识别(OCR)。

第二种是准确路径(accurate),它使用神经网络查找字符串和行的文本,然后执行进一步分析以查找单个单词和句子。这种方法更符合人类阅读文本的方式。

这两种识别方式都在VNRecognizeTextRequest 类的 recognitionLevel 属性中,并且该属性为枚举类型:

VNRequestTextRecognitionLevelAccurate: 表示精确级别的文本识别。在这个级别下,识别结果的准确性较高,但可能会增加处理时间和资源消耗。
VNRequestTextRecognitionLevelFast: 表示快速级别的文本识别。在这个级别下,识别速度较快,但可能会牺牲一些准确性。

使用其中任意一个路径都可以选择应用基于自然语言处理(NLP)的语言校正阶段,以尽量减少误读的可能性。

流程图如下:

在这里插入图片描述

识别图像中的文本官方文档

二、实现步骤

实现文字识别总共分为六个步骤:

  • 第一步:导入Vision Kit框架
  • 第二步:创建请求处理器
  • 第三步:在请求处理器中设置文字识别功能
  • 第四步:将图片添加到请求处理器中
  • 第五步:发起文字识别请求
  • 第六步:处理识别结果

1.导入Vision Kit框架

1.打开需要导入的Xcode项目

2.在导航器面板中,选择您的项目文件

3.在项目设置中点击"General"选项卡,然后在"Frameworks, Libraries, and Embedded Content"(框架、库和嵌入内容)部分,点击"+"按钮。

在这里插入图片描述

4.在弹出窗口中,搜索并选择"Vision.framework"。

在这里插入图片描述

5.在项目文件中引入头文件

#import <Vision/Vision.h>
#import <VisionKit/VisionKit.h>

2.创建请求处理器

 // 创建一个请求处理器VNRecognizeTextRequest *request = [[VNRecognizeTextRequest alloc] initWithCompletionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {if (error) {NSLog(@"文字识别出错: %@", error);return;}}];

3.在请求处理器中设置文字识别功能

通过设置VNRecognizeTextRequest属性来设置文字识别功能

//设置参数
//搜索路径为准确路径request.recognitionLevel = VNRequestTextRecognitionLevelAccurate;//语言范围是英文或者简体中文request.recognitionLanguages = @[@"en-US", @"zh-Hans"];

使用 recognitionLanguages 属性来设置文本识别的语言范围。recognitionLanguages 是一个字符串数组,你可以将支持的语言标识符添加到数组中。

4.将图片添加到请求处理器中

创建了一个 VNImageRequestHandler 对象,并将需要识别的图像以 CGImage 的形式传入

 VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCGImage:image.CGImage options:@{}];

5.发起文字识别请求

通过使用 VNImageRequestHandler 的 performRequests方法来实现

 // 发起文字识别请求NSError *error = nil;[handler performRequests:@[request] error:&error];if (error) {NSLog(@"文字识别请求出错: %@", error);}

6.处理识别结果

VNRecognizedTextObservation 类代表了 Vision 框架识别出的文本观察结果。使用 VNRecognizedTextObservation 对象的 topCandidates 方法返回一个数组,其中包含了识别结果的候选文本。

// 处理识别结果NSArray *results = request.results;for (VNRecognizedTextObservation *observation in results) {NSArray<VNRecognizedText *> *topCandidates = [observation topCandidates:1];if (topCandidates.count > 0) {VNRecognizedText *recognizedText = [topCandidates firstObject];NSString *text = recognizedText.string;NSLog(@"识别结果: %@", text);self.medicineLabel.text = text;} else {NSLog(@"没有找到候选文本");}}

三、运行结果测试

1.纯英文环境

1.准确路径下的运行结果
在这里插入图片描述

2.快速路径下的运行结果
在这里插入图片描述
可以看到在纯英文环境下,两种路径的识别准确率都是非常高的

2.中英文混合环境

1.准确路径下的运行结果
在这里插入图片描述
2.快速路径下的运行结果
在这里插入图片描述
在中英文混合环境下,虽然设置了识别范围是英文和简体中文但是准确路径只识别到了一个单词,快速路径虽然识别了一个字段但是准确率不是特别高

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

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

相关文章

.net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别

//全局过滤器 builder.Services.AddMvc(m > { m.Filters.Add<AllResultFilter>(); }); 1、实现过滤器 public class AllResultFilter : IResultFilter {/// <summary>/// 结果执行后方法/// 不可更改结果/// </summary>/// <param name"con…

TCP高并发服务器简介(select、poll、epoll实现与区别)

select、poll、epoll三者的实现&#xff1a; select实现TCP高并发服务器的流程&#xff1a; 一、创建套接字&#xff08;socket函数&#xff09;&#xff1a;二、填充服务器的网络信息结构体&#xff1a;三、套接字和服务器的网络信息结构体进行绑定&#xff08;bind函数&…

2023年12月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:多项式相加 我们经常遇到两多项式相加的情况, 在这里, 我们就需要用程序来模拟实现把两个多项式相加到一起。 首先, 我们会有两个多项式,每个多项式是独立的一行, 每个多项式由系数、 幂数这样的多个整数对来表示。 如多项式 2…

半波整流电路原理详解+参数与计算公式

什么是半波整流电路&#xff1f; 半波整流电路的基本操作非常简单&#xff0c;输入信号通过二极管&#xff0c;由于只能通过一个方向的电流&#xff0c;二极管的整流作用&#xff0c;单个二极管只允许通过一半的波形。 下图说明了半波整流电路的基本原理。 半波整流电路工作图…

翻译: Streamlit从入门到精通六 实战缓存Cache请求数据

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四翻译…

android 开发 W/TextToSpeech: speak failed: not bound to TTS engine

问题 笔者使用TTS(TextToSpeech)对于文本内容进行语音播报&#xff0c;控制台报错 android 开发 speak failed:not bound to TTS engine详细问题 笔者核心代码&#xff1a; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.speech.tts.…

机器学习--人工智能概述

人工智能概述 入门人工智能&#xff0c;了解人工智能是什么。为啥发展起来&#xff0c;用途是什么&#xff0c;是最重要也是最关键的事情。大致有以下思路。 人工智能发展历程机器学习定义以及应用场景监督学习&#xff0c;无监督学习监督学习中的分类、回归特点知道机器学习…

HubSpot:如何设计和执行客户旅程?

在当今数字化时代&#xff0c;企业成功的关键之一是建立并优化客户旅程。HubSpot作为一体化市场营销平台&#xff0c;通过巧妙设计和执行客户旅程&#xff0c;实现了个性化决策&#xff0c;关键节点的精准引导&#xff0c;为企业带来了数字化转型的引领力。 一、HubSpot是如何设…

yolo9000:Better, Faster, Stronger的目标检测网络

目录 一、回顾yolov1二、yolov2详细讲解2.1 Better部分创新点&#xff08;1&#xff09;Batch Normalization(批量归一化)&#xff08;2&#xff09;High Resolution Classifier---高分辨率分类器&#xff08;3&#xff09;Anchor Boxes---锚框&#xff08;4&#xff09;Dimens…

【Docker】实战多阶段构建 Laravel 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 本节适用于 PHP 开发者阅读。Laravel 基于 8.x 版本&#xff0c;各个版本的文件结构可能会有差异&#xff0c;请根据实际自行修改。 准备 新…

python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索

课程目标 了解树/图的深度遍历&#xff0c;宽度遍历基本原理&#xff1b;会使用python语言编写深度遍历&#xff0c;广度遍历代码&#xff1b;掌握拓扑排序算法 搜索算法的意义和作用 搜索引擎 提到搜索两个子&#xff0c;大家都应该会想到搜索引擎&#xff0c;搜索引擎的基…

AI在检验数据方面的应用场景-九五小庞

AI在检验数据方面有广泛的应用前景&#xff0c;主要体现在以下几个方面&#xff1a; 自动化数据收集和分析&#xff1a;AI可以通过自动化技术&#xff0c;收集各种检验数据&#xff0c;如血液、尿液、生化指标等&#xff0c;并进行快速、准确的分析&#xff0c;提高检验效率。…