当前位置: 首页 > 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 我新创建了一个项目&…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...