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

目录

  • 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.hqwc.cn/news/4630.html

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

相关文章

【机器学习】信息熵和信息度量

一、说明 信息熵是概率论在信息论的应用,它简洁完整,比统计方法更具有计算优势。在机器学习中经常用到信息熵概念,比如决策树、逻辑回归、EM算法等。本文初略介绍一个皮毛,更多细节等展开继续讨论。 二、关于信息熵的概念 2.1 要素描述 信息熵:熵是一种测量随机变量 X …

CVE-2023-34541 LangChain 任意命令执行

漏洞简介 LangChain是一个用于开发由语言模型驱动的应用程序的框架。 在LangChain受影响版本中,由于load_prompt函数加载提示文件时未对加载内容进行安全过滤,攻击者可通过构造包含恶意命令的提示文件,诱导用户加载该文件,即可造…

C# csc构建dll 和 csc构建时指定dll

新建一个mydll.cs; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace myDLL {public class MyMath{public int add(int x, int y){return x y;}public int sub(int x, int y){return x - y;}} } 用下图命令构建…

爬虫---某翻译响应解密和sign逆向

目标网址接口:aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl 仅供学习交流使用,非商业用途,如有侵权,请联系删除!!!仅供学习交流使用,非商业用途,如有侵权,请联系删除!!!仅供学习交流使用&…

【Linux】—— 进程的环境变量

序言: 在上期我们已经对进程PCB以及进程状态进行了详细的解释说明。今天,我将带领大家学习的是关于进程的环境变量的问题。 目录 (一)孤儿进程 1、基本介绍 2、代码演示 (二)环境变量 1、基本概念 2…

RedmiBook Pro 15S AMD Ryzen 7 5800H电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板RedmiBook Pro 15S 2021 处理器AMD Ryzen™ 7 5800H已驱动 内存16 GB 3200 MHz DDR4已驱动 硬盘Samsung 970EVO 512GB已驱动 显卡HD …

SpringMVC (一) 什么是SpringMVC

一、回顾MVC 1.1、什么是MVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。…

红色通信史(二):半部电台起家

上一期,我给大家介绍了“四一二”反革命政变后,我党在上海开通了第一部秘密电台的过程。 秘密电台的开通,标志着我党通信事业正式起步。然而,没过多久,顾顺章叛变,给上海党组织带来了极大的破坏。于是&…

论文笔记--Goat: Fine-tuned LLaMA Outperforms GPT-4 on Arithmetic Tasks

论文笔记--Goat: Fine-tuned LLaMA Outperforms GPT-4 on Arithmetic Tasks 1. 文章简介2. 文章概括3 文章重点技术3.1 LLM的选择3.2 算数任务的可学习性(learnability)3.3 大模型的加减乘除 4. 数值实验结果5. 文章亮点6. 原文传送门7. References 1. 文章简介 标题&#xff…

Java基础---为什么不能用浮点数表示金额

目录 缘由 十进制转二进制 不是所有数都能用二进制表示 IEEE 754 避免精度丢失 缘由 因为不是所有的小数都能用二进制表示,所以,为了解决这个问题,IEEE提出了一种使用近似值表示小数的方式,并且引入了精度的概念这就是我们所…

Day6——Web安全基础

网络安全学习笔记Day6 Web安全基础 一.Web简介什么是Web?什么是因特网?互联网,因特网,万维网的关系万维网构想的诞生http协议URL 二.Web发展史Web1.0Web2.01.0与2.0的区别Web1.0的安全漏洞Web2.0的安全漏洞 三.杂项门户网站静态页…

tomcat接入skywalking

tomcat接入skywalking 一、说明二、步骤2.1 准备java-agent包2.2 tomcat部署2.2.1 下载2.2.2 tomcat修改catalina.sh文件2.2.3 tomcat修改启动端口2.2.4 启动tomcat 三、验证四、问题排查4.1 tomcat的启动日志 一、说明 服务器中已经运行着skywalking,准备在同一台…