当前位置: 首页 > news >正文

【OCR】实战使用 - 如何提高识别文字的精准度?

实战使用 - 如何提高文字识别的精准度

我们在平常使用OCR的时候,经常会出现文字识别不精准的情况,我们改如何提高文字识别的精度呢?

以下是一些提高OCR(Optical Character Recognition,光学字符识别)文字识别精准度的方法:

  1. 图像预处理:
  • 转换为灰度图像:将彩色图像转换为灰度图像可以减少噪音和干扰,提高识别精度。
  • 二值化:将图像转换为黑白二值图像,使得文本和背景对比更明显。
  • 去噪:去除图像中的噪点和不必要的元素,如线条、污渍等。
  • 边缘检测和轮廓提取:通过边缘检测和轮廓提取来增强文本区域的边界。
  1. 调整图像参数:
  • 改变亮度和对比度:调整图像的亮度和对比度可以改善文本的可见性。
  • 使用滤波器:应用高斯滤波器、中值滤波器等可以平滑图像并减少噪声。
  1. 选择合适的字体库:
  • 确保你的Tesseract OCR引擎安装了正确的语言数据包,并且包含了你需要识别的字体类型。
  1. 设置识别参数:
  • 使用image_to_data函数获取详细的识别结果,包括每个字符的坐标、置信度等信息。
  • 根据实际情况调整识别参数,如使用psm(页面分割模式)来指定图像的布局。
  1. 训练自定义模型:
  • 如果现有的Tesseract OCR引擎无法满足你的识别需求,你可以考虑训练一个自定义的OCR模型。这通常需要大量的标注数据和一定的机器学习知识。
  1. 优化图像质量:
  • 提供清晰、高质量的图像作为输入,避免模糊、倾斜、旋转或有遮挡的文本。
  1. 使用更高级的OCR工具或服务:
  • 如果上述方法仍然无法达到满意的识别精度,你可以考虑使用更先进的OCR工具或服务,如Google Cloud Vision API、Amazon Textract等。

综合运用以上方法,你可以逐步提高OCR文字识别的精准度。但是请注意,对于某些复杂的图像或特定类型的文本,可能无法达到完美的识别效果。

实现

以下是一个使用Python和Tesseract OCR进行图像预处理和文字识别的简单示例,展示了如何应用一些提高OCR识别精度的方法:

import pytesseract
from PIL import Image, ImageFilter, ImageEnhancedef preprocess_image(image_path):# 打开图片文件img = Image.open(image_path)# 转换为灰度图像gray_img = img.convert('L')# 二值化binary_img = gray_img.point(lambda x: 0 if x < 128 else 255, '1')# 使用中值滤波器去噪filtered_img = binary_img.filter(ImageFilter.MedianFilter(size=3))# 提高对比度enhancer = ImageEnhance.Contrast(filtered_img)enhanced_img = enhancer.enhance(2.0)return enhanced_imgdef ocr_image(image_path, lang='eng'):# 预处理图像processed_img = preprocess_image(image_path)# 使用pytesseract进行文字识别text = pytesseract.image_to_string(processed_img, lang=lang)return text# 设置识别语言为中文(简体)
pytesseract.pytesseract.tesseract_cmd = '/usr/bin/tesseract'  # 如果需要指定Tesseract路径
language = 'chi_sim'# 识别图像中的文字
image_path = 'your_image_file_path.jpg'
text = ocr_image(image_path, lang=language)# 打印识别出的文字
print(text)

在这个示例中:

  1. preprocess_image函数负责图像预处理,包括转换为灰度图像、二值化、应用中值滤波器去噪和提高对比度。
  2. ocr_image函数负责打开图像、预处理图像并使用Tesseract进行文字识别。

注意:这只是一个基本的示例,实际的图像预处理步骤可能需要根据你的具体需求和图像的特性进行调整。此外,你可能还需要考虑其他提高识别精度的方法,如设置识别参数、使用更高级的OCR工具或服务等。

问题1: 1.ValueError: image has wrong mode

这个ValueError: image has wrong mode错误通常在使用Tesseract OCR进行文字识别时出现,原因是传递给Tesseract的图像模式(mode)不正确。Tesseract期望图像为单色(黑白)或彩色(RGB/RGBA),而你提供的图像可能是其他模式,如CMYK、P等。
要解决这个问题,你可以尝试以下步骤:

  1. 确保你的图像已经被正确地转换为Tesseract支持的模式。例如,如果你的图像已经是灰度图像,可以使用以下代码检查其模式:
   from PIL import Imageimage = Image.open('your_image_file_path.jpg')print(image.mode)

如果输出不是L(表示灰度图像),你需要将其转换为灰度模式:

image = image.convert('L')
  1. 如果你的图像已经是彩色图像,确保其模式为RGB或RGBA。如果不是,可以使用以下代码将其转换为RGB模式:
if image.mode != 'RGB':image = image.convert('RGB')
  1. 在调用pytesseract.image_to_string()函数之前,确保你的图像已经过正确的预处理和模式转换。

以下是一个完整的示例:

import pytesseract
from PIL import Imagedef ocr_image(image_path, lang='eng'):# 打开图片文件img = Image.open(image_path)# 确保图像模式为RGB或Lif img.mode == 'RGB':pass  # 图像已经是RGB模式,无需转换elif img.mode == 'L':pass  # 图像是灰度模式,无需转换else:# 将图像转换为RGB模式img = img.convert('RGB')# 使用pytesseract进行文字识别text = pytesseract.image_to_string(img, lang=lang)return text# 设置识别语言为中文(简体)
pytesseract.pytesseract.tesseract_cmd = '/usr/bin/tesseract'  # 如果需要指定Tesseract路径
language = 'chi_sim'# 识别图像中的文字
image_path = 'your_image_file_path.jpg'
text = ocr_image(image_path, lang=language)# 打印识别出的文字
print(text)

这个示例会检查图像模式,并在必要时将其转换为Tesseract支持的模式。这应该可以避免ValueError: image has wrong mode的错误。

如果对于文字识别还未入门可以先看我前一篇文章:
【OCR】实战使用 - ocr 识别图片中的文字

相关文章:

【OCR】实战使用 - 如何提高识别文字的精准度?

实战使用 - 如何提高文字识别的精准度 我们在平常使用OCR的时候&#xff0c;经常会出现文字识别不精准的情况&#xff0c;我们改如何提高文字识别的精度呢&#xff1f; 以下是一些提高OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;文字识…...

css3浮动定位

css3浮动定位 前言浮动float的基本概念浮动的使用浮动的顺序贴靠特性浮动的元素一定能设置宽高 使用浮动实现网页布局BFC规范和浏览器差异如何创建BFCBFC的其他作用浏览器差异 清除浮动相对定位 relative绝对定位 absolute绝对定位脱离标准文档流绝对定位的参考盒子绝对定位的盒…...

Linux 上 Nginx 配置访问 web 服务器及配置 https 访问配置过程记录

目录 一、前言说明二、配置思路三、开始修改配置四、结尾 一、前言说明 最近自己搭建了个 Blog 网站&#xff0c;想把网站部署到服务器上面&#xff0c;本文记录一下搭建过程中 Nginx 配置请求转发的过程。 二、配置思路 web项目已经在服务器上面运行起来了&#xff0c;运行的端…...

css less sass 动态宽高

less height: ~"calc(100% - 30px)";若要需要按照某个比例固定高度可以用 min-height: e("calc(100vh - 184px)")css height: calc(100% - 50px);sass height:calc(100% - var(--height) );...

sqlserver导出数据为excel再导入到另一个数据库

要将SQL Server中的数据导出为Excel文件&#xff0c;然后再将该Excel文件导入到另一个数据库中&#xff0c;你可以按照以下步骤进行操作&#xff1a; 导出数据为Excel文件 echo offset SourceServer源服务器名称 set SourceDB数据库名称 set ExcelFilePath导出到的Excel文件路…...

异构微服务远程调用如何打jar包

1.服务提供方打 jar 包 RemoteUserService.java package com.finance.system.api;import com.finance.system.api.domain.dto.Enterprise; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springfra…...

赋能智慧农业生产,基于YOLOv7开发构建农业生产场景下油茶作物成熟检测识别系统

AI赋能生产生活场景&#xff0c;是加速人工智能技术落地的有利途径&#xff0c;在前文很多具体的业务场景中我们也从实验的角度来尝试性地分析实践了基于AI模型来助力生产生活制造相关的各个领域&#xff0c;诸如&#xff1a;基于AI硬件实现农业作物除草就是一个比较熟知的场景…...

Docker入门介绍

【一】从 dotCloud 到 Docker——低调奢华有内涵 1、追根溯源:dotCloud 时间倒回到两年前&#xff0c;有一个名不见经传的小公司&#xff0c;他的名字叫做:dotCloud。 dotCloud 公司主要提供的是基于 PaaS(Platform as a Service&#xff0c;平台及服务) 平台为开发者或开发商…...

第四站:指针的进阶-(二级指针,函数指针)

目录 二级指针 二级指针的用途 多级指针的定义和使用 指针和数组之间的关系 存储指针的数组(指针数组:保存地址值) 指向数组的指针(数组指针) 传参的形式(指针) 数组传参时会退化为指针 void类型的指针 函数指针 定义: 调用:两种方式:(*指针名)(参数地址) 或者 指针…...

浏览器渲染原理(面试重点)

一、浏览器是如何渲染页面的 常见的简洁答案&#xff1a; 浏览器内核拿到内容后&#xff0c;渲染流程大致如下&#xff1a;解析HTML&#xff0c;构建Dom树&#xff1b;解析CSS&#xff0c;构建Render树&#xff1b;&#xff08;将CSS代码解析成树形的数据结构&#xff0c;与D…...

C //练习 5-3 用指针方式实现第2章中的函数strcat。函数strcat(s, t)将t指向的字符串复制到s指向的字符串的尾部。

C程序设计语言 &#xff08;第二版&#xff09; 练习 5-3 练习 5-3 用指针方式实现第2章中的函数strcat。函数strcat(s, t)将t指向的字符串复制到s指向的字符串的尾部。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可能需要变更。…...

深度剖析Redis:从基础到高级应用

目录 引言 1、 Redis基础 1.1 Redis数据结构 1.1.1 字符串&#xff08;String&#xff09; 1.1.2 列表&#xff08;List&#xff09; 1.1.3 集合&#xff08;Set&#xff09; 1.1.4 散列&#xff08;Hash&#xff09; 1.1.5 有序集合&#xff08;Sorted Set&#xff09;…...

视频监控录像服务器(中心录像服务器)功能详细介绍

目 录 一、概述 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;视频监控中心录像服务器 二、存储策略服务 &#xff08;一&#xff09;存储策略配置 1、 录入页面 2、 选择需要进行录像的视频 3、批量选择多个通道号 4、其他关键参数…...

SouthernBiotech抗荧光淬灭封片剂

荧光淬灭又称荧光熄灭或萃灭&#xff0c;是指导致特定物质的荧光强度和寿命减少的所有现象。引起荧光淬灭的物质称为荧光淬灭剂。SouthernBiotech专门开发的Fluoromount-G系列荧光封片剂是以甘油为基础&#xff0c;加入抗荧光淬灭剂&#xff0c;可明显降低荧光淬灭现象&#xf…...

[Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例

在群組中看到上述問題&#xff0c;研判應是一份隨月份變動的產品報價表單&#xff0c;空白欄可能表示該月份價格與上個月份一致。這個問題是需要取得最近一次單價和倒數第二次單價&#xff0c;常用且實務的excel案例值得紀錄。 最近一次單價: INDEX($B2:$G2,1,LARGE(IF(ISBLAN…...

TypeScript进阶(二)深入理解装饰器

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…...

书生·浦语第三次作业

我最近在参加书生浦语大模型实战营&#xff0c;这是第三次作业打卡&#xff01; 如果你也想两周玩转大模型微调&#xff0c;部署与测评全链路。报名链接&#xff1a;invite 书生浦语大模型实战营报名 邀请码可以填026014 一、基础作业&#xff1a;复现课程知识库助手搭建过程…...

GPT实战系列-LangChain + ChatGLM3构建天气查询助手

GPT实战系列-LangChain ChatGLM3构建天气查询助手 用ChatGLM的工具可以实现很多查询接口和执行命令&#xff0c;而LangChain是很热的大模型应用框架。如何联合它们实现大模型查询助手功能&#xff1f;例如调用工具实现网络天气查询助手功能。 LLM大模型相关文章&#xff1a; …...

LeetCode 2696.删除子串后的字符串最小长度:栈

【LetMeFly】2696.删除子串后的字符串最小长度&#xff1a;栈 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-string-length-after-removing-substrings/ 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操…...

Xcode15 升级问题记录

这里写自定义目录标题 新版本Xcode15升级问题1&#xff1a;rsync error: some files could not be transferred (code 23) at ...参考 新版本Xcode15升级 下载地址&#xff1a;https://developer.apple.com/download/all/ 我目前使用的版本是Xcode15.2 我新创建了一个项目&…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...