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

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...