python中使用OAK-D PRO相机实现OCR功能

news2024/11/15 8:49:25

目录

  • OAK简介
  • Tesseract简介
    • Tesseract OCR安装包
    • 安装 Tesseract OCR
  • 代码实现

OAK简介

OAK(OpenCV AI Kit)是一个开源的智能视觉平台,它集成了硬件和软件组件,旨在提供高性能的实时目标检测、识别和跟踪等视觉AI功能。OAK由Luxonis公司开发,目的是为了降低视觉AI开发的门槛,使其更加普及和易于实现。

OAK平台的核心是OAK相机,它是一款集成了RGB相机、深度相机以及专门的神经网络处理器的智能视觉相机。OAK相机使用MIPI CSI-2接口连接到主设备,可以提供高质量的图像和深度数据输入。

OAK相机通过内置的NPU(神经网络处理器)实现了实时的神经网络推理,可以在设备端进行高效的人工智能处理。支持的神经网络模型包括TensorFlow Lite、ONNX等格式,用户可以根据需要选择合适的模型进行部署。

OAK相机的软件支持是基于OpenCV(开源计算机视觉库)和OpenVINO(Open Visual Inference & Neural Network Optimization Toolkit)构建的。用户可以使用Python等常见的编程语言进行开发,并使用OpenCV和OpenVINO提供的丰富功能和工具进行图像处理、模型部署和性能优化。

除了OAK相机,OAK平台还提供了一系列的附件和拓展模块,如深度伪彩色模块、双相机模块等,以满足不同的应用需求。

OAK平台和OAK相机可以应用于各种领域,例如机器人导航、智能监控、人脸识别、智能交通系统、物体跟踪等。通过使用OAK平台,开发者可以在嵌入式设备上实现高性能的视觉人工智能应用,极大地扩展了视觉AI的应用范围和可能性。

Tesseract简介

Tesseract是一款开源的OCR(Optical Character Recognition,光学字符识别)引擎,最初由HP实验室开发,在2005年后由Google接手并进一步开发和完善。Tesseract支持多种语言文字的检测和识别,包括中文、英语、德语、法语、意大利语等多种主要语言,同时也支持针对特定场景或应用的领域OCR开发。

Tesseract基于机器学习技术,使用了多层神经网络以及支持向量机(SVM)等算法进行文字特征提取和识别。同时,Tesseract通过图像预处理、二值化、斑点去除和边框检测等多个环节优化页面处理流程,并且提供了多种字体、大小、旋转角度和噪声等挑战场景下的训练数据集,使得识别精度可以获得不错的性能表现。

除了提供C++ API之外,Tesseract还为多种编程语言提供了API的封装,如Python、Java、C#等,方便用户快速上手开发应用,可以广泛应用于扫描文档、电子书库入库、自动化办公、图片文字识别搜索等各个领域。

Tesseract OCR安装包

下载tesseract-ocr.exe。可以从github上下载最新版本: Tesseract OCR。

安装 Tesseract OCR

  1. 下载完成后,双击下载的.exe文件进行安装,在弹出的语言选择对话框中选择默认,点击OK。
    在这里插入图片描述
  2. 在欢迎界面,直接点击Next。
    在这里插入图片描述
  3. 在License页面点击 " I Agree "
    在这里插入图片描述
  4. Choose Users页面选择默认,直接点击Next
    在这里插入图片描述
  5. 在Choose Components页面需要注意,由于默认的识别语言是英语,这里我们要在Additional language data中勾选中文包,才可以OCR识别中文。(注:这里的vertical指的是识别竖向文本)
    在这里插入图片描述
  6. 在选择安装位置页面选择需要将软件安装到那个位置
    在这里插入图片描述
  7. 选择好安装路径后,点击Next,等待软件安装完成。
  8. 配置环境变量。
    Tesseract 安装完成后,需要将 Tesseract OCR 的可执行文件路径添加到系统环境变量中,以便在命令行中使用。
    1). 按 Win + X 组合键,然后选择“系统”。
    2). 点击左侧菜单中的“高级系统设置”,打开“系统属性”对话框。
    3). 点击“环境变量”按钮,打开“环境变量”对话框。
    4). 在“系统变量”部分找到名为 Path 的变量,双击或点击“编辑”按钮打开“编辑环境变量”对话框。
    5). 点击“新建”按钮,将 Tesseract OCR 安装目录下的 bin 文件夹路径添加到列表中。通常,该路径为 C:\Program Files\Tesseract-OCR。请确保添加的是包含 tesseract.exe 文件的 bin 文件夹路径。
    6). 点击“确定”按钮关闭各个对话框。

现在,我们已经成功安装了 Tesseract OCR,并可以在 Windows 10 上使用它进行文本识别了。如需使用 Tesseract OCR 的 Python 绑定,可以通过 pip 安装 pytesseract 库:

pip install pytesseract

安装完成后,在 Python 脚本中使用 import pytesseract 即可。

代码实现

  1. 新建文件夹,命名为OAK_OCR,用VSCode打开该文件夹。
  2. 在编写代码之前,需要先确保我们已经安装了所需库和工具,在这里我们需要安装depthai、opencv-python和pytesseract,如果没有安装,执行下面的代码进行安装:
pip install depthai opencv-python pytesseract
  1. 创建名为main.py的Python文件并输入以下代码:
import cv2
import depthai as dai 
import pytesseract # 如果设置了环境变量,直接这样import就可以了,如果没有设置环境变量,则添加下面的代码
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'

# 初始化OAK-D PRO相机
pipeline = dai.Pipeline()

# 创建Color相机配置
cam_rgb = pipeline.createColorCamera()
cam_rgb.setPreviewSize(640, 480)
cam_rgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_1080_P)
cam_rgb.setInterleaved(False)

# 创建XLink输出节点 预览输出 
xout_rgb = pipeline.createXLinkOut()
xout_rgb.setStreamName("rgb")
cam_rgb.preview.link(xout_rgb.input)

# 连接设备并启动管道
with dai.Device(pipeline) as device:
    # 获取输出队列
    q_rgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
	# 主循环
    while True:
        # 获取一帧图像
        in_rgb = q_rgb.get()
        frame = in_rgb.getCvFrame()

        # 使用Tesseract进行文字识别
        text = pytesseract.image_to_string(frame, lang='eng', config='--psm 6')

        #简体中文识别:
        # text = pytesseract.image_to_string(frame, lang='chi_sim', config='--psm 6')
        # 中英文识别 lang='chi_sim+eng'
        # 在控制台中显示识别到的文本
        print(text)
        
        # 处理识别到的文本
        # 替换特定的字符或字符串
        #processed_text = text.replace("old_string", "new_string")

        # 将处理后的文本保存到文件中
        with open("recognized_text.txt", "w", encoding="utf-8") as file:
            file.write(processed_text)

        # 展示帧
        cv2.imshow("OAK-D PRO Text Recognition", frame)
        if cv2.waitKey(1) == ord('q'):
            break

上面这段代码通过OAK相机,使用了OpenCV、depthai和pytesseract等库来实现文字识别功能。

首先,我们导入了cv2、depthai和pytesseract库,主要通过这三个库来实现OAK文字识别的功能。

cv2库是OpenCV(开源计算机视觉库)的Python接口,它提供了丰富的图像和视频处理功能,可以进行图像加载、图像处理、特征检测、图像分割、目标跟踪等操作。在此代码中,cv2库用于加载和显示图像。

depthai库是Luxonis开发的用于与OAK(OpenCV AI Kit)相机通信的Python库。它提供了与OAK相机进行交互的API,可以进行相机配置、获取相机输出、访问相机的深度数据等操作。在此代码中,depthai库用于创建Pipeline对象并与OAK相机进行初始化和连接。

pytesseract库是一个开源的OCR(光学字符识别)库,它可以识别图像中的文字。它使用Tesseract OCR引擎作为后端,并提供了将图像转换为文本的函数。在此代码中,pytesseract库用于对OAK相机捕获的图像进行文字识别。

cv2库用于图像处理和显示,depthai库用于与OAK相机通信和获取相机输出,而pytesseract库用于进行OCR文字识别。这三个库共同合作,实现了使用OAK相机进行文字识别的功能。

这里需要注意:如果在使用pytesseract之前尚未设置环境变量指向Tesseract OCR引擎的安装位置,则需要使用pytesseract.pytesseract.tesseract_cmd指定tesseract.exe文件的路径。

然后,我们通过创建一个Pipeline对象来初始化OAK-D PRO相机,并设置了Color相机的参数,如预览大小、分辨率和颜色插值。此外,还创建了一个XLink输出节点,用于将预览输出发送到XLink。

使用dai.Device(pipeline)启动设备并连接到OAK相机。在主循环中,我们从输出队列中获取一帧RGB图像,并使用getCvFrame()方法将其转换为OpenCV格式的图像。

接下来,我们使用pytesseract库中的image_to_string()函数对图像中的文字进行识别。通过指定lang参数来设置识别的语言,这里默认是英文(lang='eng'),我们可以根据需要切换到其它支持的语言进行识别。识别结果将存储在text变量中。

  • image_to_string()pytesseract 库中的一个函数,用于将输入的图像转换为字符串。这个函数的输出是一个包含识别到的文本的字符串。其参数定义如下:
    1. frame 是输入的图像。它通常是一个由其他库(例如 OpenCV)读取的图像。
    2. lang='eng' 是一个可选参数,指定了要识别的文字的语言。在这个例子中,我们告诉 Tesseract 我们只对英文文本感兴趣。
    3. config='--psm 6' 是另一个可选参数,它指定了 Tesseract 的页面分割模式(Page Segmentation Mode)。
    4. --psm 6 表示使用“Assume a single uniform block of text”的模式。这意味着 Tesseract 将尝试在输入图像中找到一个单一的连续文本块。

然后,我们可以对识别到的文本进行处理,例如替换特定的字符或字符串。

最后,我们将处理后的文本保存到文件中,并使用OpenCV的imshow()函数将识别到的文字显示在窗口中。按下键盘上的"q"键即可退出程序。

  1. 将OAK相机通过USB口与电脑连接。
  2. 运行代码:输入下面的指令运行代码
python main.py
  1. 运行程序后,程序会打开一个窗口,实时显示视频流,我们在VSCode的终端中,可以看到识别的文字已经打印出来了。
    在这里插入图片描述

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

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

相关文章

【夜深人静学JAVA | 第二十三篇】集合体系结构

目录 前言: 单列集合: set与list的区别: 双列集合: map的特点: 总结: 前言: JAVA中为我们提供了很多集合,这些集合都有自己很独特的特点,因此我们要学习所有的…

【Nginx】第五章 Nginx配置实例-负载均衡

5.1 实现效果 浏览器地址栏输入地址 http://192.168.6.100/edu/index.html,负载均衡效果,将请求平均分配到8080和8081两台服务器上。 5.2 准备工作 (1)准备两台tomcat服务器,一台8080,一台8081 &#x…

数据结构C语言版本(上)

第一章 绪论 第一节 什么是数据结构? 估猜以下软件的共性:学生信息管理、图书信息管理、人事档案管理。   数学模型:用符号、表达式组成的数学结构,其表达的内容与所研究对象的行为、特性基本一致。 信息模型:信息…

FANUC机器人SRVO-220 SDI保险丝熔断报警处理方法

FANUC机器人SRVO-220 SDI保险丝熔断报警处理方法 一般在R-30iB Mate Plus柜的机器人上会遇到这个报警,R-30iB Plus柜则不会遇到这个报警。 如下图所示, 故障原因: 机器人EE接口的接线有短路的情况,检查EE接口的接线&#xff0…

Mybatis-Plus:实现自定义SQL

目录 1.简介 2.自定义SQL具体实现 2.1.注解SQL 2.2.Wrapper传参注解SQL 2.3.Wrapper传参xml文件SQL 2.4.正常传参XML文件SQL 3.总结 1.简介 Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的&#xff1b…

多元分类预测 | Matlab鲸鱼算法(WOA)优化极限学习机(ELM)的分类预测,多特征输入模型。WOA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab鲸鱼算法(WOA)优化极限学习机(ELM)的分类预测,多特征输入模型。WOA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

【MySQL的存储过程】

目录 一、存储过程的概述1、存储过程的定义2、存储过程的优点 二、存储过程的步骤(面试题)1、创建存储过程2、存储过程的参数 三、删除存储过程四、存储过程的控制语句1. 条件语句if-then-else end if2. 循环语句while end while 一、存储过程的概述 …

微信小程序配合Tdesign实现验证码倒计时

效果 点击发送验证码后 实现 wxml <view class"userName"><view class"name">Code.<text>*</text></view><t-input placeholder"" value"{{code}}" type"number" bindchange"onP…

elasticsearch删除脏数据(根据指定字段删除数据)

场景 es中出现几条脏数据&#xff0c;现在要把这几条数据直接删掉 思路 找到要删除的脏数据&#xff0c;一般是根据id之类的字段来删除&#xff0c;因为id具有唯一性&#xff0c;其实和mysql差不多 执行 1、先查到该条记录&#xff08;注意我们这边使用的是 ticketId字段&…

vue中日,周,月,年时间选择器(基于elementui)

通过选择上面的选项展示选择不同的日期,周,月份,年份 因为项目中点击切换时需要传递不同的日期, 例如:日,即选择日期的00:00分-23:59 周:即选择当月的第三周,截取第三周的周一和第三周的周日为开始时间和截止时间传值 月,即选择月的第一天---选择月得最后一天传值 <templ…

【静态连接和动态连接】C/C++编程中的两种有效链接策略

一、静态连接和动态连接 链接分为两种&#xff1a;静态链接、动态链接。 1&#xff09;静态链接 静态链接&#xff1a;由链接器在链接时将库的内容加入到可执行程序中。 优点&#xff1a; 对运行环境的依赖性较小&#xff0c;具有较好的兼容性 缺点&#xff1a; 生成的程…

企业级微服务架构实战项目--xx优选-商品分类和搜索

一 商品分类和搜索 点击分类&#xff0c; &#xff08;1&#xff09;左侧显示商品分类&#xff0c;右侧显示对应商品分类下的商品列表 &#xff08;2&#xff09;如果商品分类下没有数据&#xff0c;则显示空内容

【正则表达式】匹配选择题、判断题

试卷文本 使用https://github.com/Minuhy/python_docx_export导出的word文档文本&#xff1a; 2022-2023学年第二学期期末课程考核试卷&#xff08;A1&#xff09;卷 课程名称&#xff1a; 分布式数据库HBase 考核形式&#xff1a; 上机考试 年级、专业、层次&#xff1…

【wireshark】rtp流分析

分析wifi下的rtp传输 选中一个udp传输 udp.dstport == 41447解码为rtp 右键 decode as 过滤某一条rtp流 udp.dstport == 41447 && rtp

vscode 加上c++11编译选项

问题描述 vscode 运行C11代码出现此错误 error This file requires compiler and library support for the ISO C 2011 standard. This support must be enabled with the -stdc11 or -stdgnu11 compiler options. 提示我们需要在编译命令中加一行选项&#xff0c;加入c11编译…

Java 17 版本的新特性

Java 17 版本的新特性 &#x1f497;Sealed类&#x1f497;Pattern Matching for instanceof&#x1f497; 垃圾回收器改进&#x1f497;Vector API&#x1f497; Switch表达式的增强&#x1f493;Sealed类的示例代码&#x1f493; Pattern Matching for instanceof的示例代码&…

若依ruoyi数据权限详解

若依ruoyi数据权限详解 什么是数据权限&#xff1f;若依使用数据权限的步骤&#xff1a;数据权限的原理 什么是数据权限&#xff1f; 简单的例子就是&#xff1a; 比如一张商品表goods&#xff0c;很多人添加数据&#xff0c;销售部的就可以看到这个数据&#xff0c;生产部的就…

SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)

**一&#xff0c;什么是FreeMarker&#xff0c;FTL模板? ** FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户…

chatgpt赋能python:Python虚拟环境

Python虚拟环境 Python是一种脚本语言&#xff0c;它被广泛应用于各种类型的开发项目中。在其应用中&#xff0c;Python常常需要运行在特定的环境下&#xff0c;而Python虚拟环境就是为此而设计。 什么是Python虚拟环境 Python虚拟环境是Python的一种开发环境&#xff0c;可…

堆排序+TopK问题——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;好久不见&#xff0c;停更了很长一段时间吧&#xff0c;最近小雅兰会开始慢慢更新起来的&#xff0c;下面&#xff0c;就进入小雅兰今天的分享的知识点吧&#xff0c;让我们一起进入堆的世界&#xff01;&#xff01;&#xff01; 堆排序——…