使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例
引言
在智能交通、地图定位等应用场景中,经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理,通过固定区域裁剪,来有效地识别出图像上显示的经纬度信息。
1. OCR 与 pytesseract 简介
OCR(Optical Character Recognition,光学字符识别)技术能够将图片中的文字信息转换成可编辑的文本。Tesseract 是一款开源的 OCR 引擎,功能强大且准确率较高;而 pytesseract 则是其 Python 封装,可以方便地在 Python 项目中调用 Tesseract 进行识别。
在我们的示例中,我们主要针对图像上固定位置的经纬度区域进行处理与识别。由于经纬度中只包含数字、小数点、°、N、S、E、W 等字符,我们可以通过设置 白名单 限制识别字符,从而提高识别准确率
2.示例代码
下面给出完整示例代码,并附带详细的注释说明每一步的实现逻辑:
import time
import pytesseract
from PIL import Image, ImageFilter, ImageEnhanceclass OCRReader:def __init__(self, center_x, center_y, width, height, sharpness=2.0, contrast=2.0, blur_radius=1):"""初始化 OCRReader 类,使用中心点和宽高设置裁剪区域的参数,并配置图像预处理的超参数。参数:center_x (int): 经度/纬度信息区域中心点的 x 坐标(从左向右)center_y (int): 经度/纬度信息区域中心点的 y 坐标(从上向下)width (int): 裁剪区域的宽度height (int): 裁剪区域的高度sharpness (float): 锐化处理的增强系数,数字越大效果越明显contrast (float): 对比度增强系数,数字越大表示对比度越明显blur_radius (float): 高斯模糊的半径,主要用于图像降噪"""self.center_x = center_xself.center_y = center_yself.width = widthself.height = heightself.sharpness = sharpnessself.contrast = contrastself.blur_radius = blur_radius# 对于经纬度,白名单中仅包含数字、°、小数点以及方向字符self.whitelist = "0123456789°.NSEW"def preprocess_image(self, img):"""对裁剪后的图像进行预处理:包括图像的锐化、对比度增强以及高斯模糊降噪。参数:img (Image): PIL 图像对象返回:Image: 预处理后的图像对象"""# 锐化处理,增强图像细节sharpener = ImageEnhance.Sharpness(img)img = sharpener.enhance(self.sharpness)# 增强对比度,使文字更明显enhancer = ImageEnhance.Contrast(img)img = enhancer.enhance(self.contrast)# 应用高斯模糊降噪if self.blur_radius > 0:img = img.filter(ImageFilter.GaussianBlur(self.blur_radius))return imgdef read_coordinates(self, image_path):"""从给定图像文件中提取经纬度信息。参数:image_path (str): 图像文件的路径返回:str: OCR 识别出的文本"""# 加载图像img = Image.open(image_path)# 如果图像带有透明度,则将其转换为 RGB 模式(填充背景为白色)if img.mode == 'RGBA':background = Image.new('RGB', img.size, (255, 255, 255))background.paste(img, mask=img.split()[3])img = backgroundelif img.mode == 'LA':background = Image.new('L', img.size, 255)background.paste(img, mask=img.split()[1])img = background.convert('RGB')# 根据中心点坐标和宽高,计算出裁剪区域的左上角和右下角坐标left = self.center_x - self.width // 2top = self.center_y - self.height // 2right = self.center_x + self.width // 2bottom = self.center_y + self.height // 2# 裁剪图像得到经纬度显示区域cropped_img = img.crop((left, top, right, bottom))cropped_img.save('sub_img.jpg') # 保存裁剪后的图像,便于调试# 对裁剪后的图像进行预处理processed_img = self.preprocess_image(cropped_img)processed_img.save('processed_sub_img.jpg') # 保存预处理后的图像,便于调试# 配置 Tesseract 的识别参数:# --psm 6 表示将图像看作单一文本块# tessedit_char_whitelist 限定识别的字符集custom_config = f'--psm 6 -c tessedit_char_whitelist={self.whitelist}'result = pytesseract.image_to_string(processed_img, config=custom_config, timeout=1)return result# 示例使用
if __name__ == '__main__':ocr_reader = OCRReader(center_x=1440, center_y=802, width=204, height=20)t1 = time.time()result = ocr_reader.read_coordinates('./ocr_test.png')print("\n识别结果:", result)print(f"Time: {time.time() - t1}")
2.1 类的初始化与参数设定
- center_x 与 center_y:代表图像中经纬度展示区域的中心坐标。
- width 与 height:定义裁剪区域的尺寸。
- sharpness、contrast 和 blur_radius:预处理步骤中用于改善图像质量的参数。
- whitelist:指定 OCR 识别时只允许出现的字符,本例中仅包含经纬度所必需的字符。
2.2 图像预处理
预处理步骤主要有三个:
- 锐化:通过 ImageEnhance.Sharpness 增加图像的细节,帮助提高文字的边缘清晰度。
- 对比度增强:利用 ImageEnhance.Contrast 调整图像的对比度,使目标文字更醒目。
- 高斯模糊:适当的模糊可以起到降噪的作用,有利于提高 OCR 的识别率。
2.3 裁剪与 OCR 识别
- 裁剪区域计算:通过中心点和尺寸参数计算出目标区域的四个边界的坐标,然后使用 crop 方法裁剪图像。
- 透明度处理:有的图像可能带有透明通道(如 PNG 图片),通过转换为 RGB 模式确保 OCR 引擎能够正确处理。
- OCR 参数配置:设置 --psm 6 以适应单一文本块的场景,并通过白名单限制识别字符范围,进一步提高识别准确性。
- 超时设置:timeout=1 参数确保在识别超时时不会阻塞程序。

3. 总结与扩展
通过本文示例,我们展示了如何利用 pytesseract 进行专门的区域 OCR 识别,并结合图像预处理技术提升识别率。在实际项目中,你可以根据图像质量和识别场景进一步调整预处理参数,比如增加二值化处理、去背景等操作。
此外,若图像中包含不同区域的文本信息,可扩展代码实现批量处理和区域定位,从而用于更大规模的自动化识别任务。
相关文章:
使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例
引言 在智能交通、地图定位等应用场景中,经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理,通过固定区域裁剪,来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …...
【18】单片机编程核心技巧:变量赋值与高位填充机制
【18】单片机编程核心技巧:变量赋值与高位填充机制 七律 变量赋值探秘 单字赋多字疑云开,高位零填自天来。 清零保守虽稳妥,强制转换更悠哉。 实验验证真章显,编译器间无异态。 嵌入式海行舟稳,类型分明避坑台。 注释…...
网络安全系统集成
随着信息技术的迅猛发展,网络安全问题变得越来越突出。为了应对这一挑战,软考网络安全系统集成应运而生,成为众多企业和机构的重要需求。软考网络安全系统集成旨在培养具备网络安全系统设计、实施和维护能力的专业人才,以满足国家…...
【51单片机】程序实验15.DS18B20温度传感器
主要参考学习资料:B站【普中官方】51单片机手把手教学视频 开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html 单片机套装:普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…...
Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上
1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录,在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…...
数字孪生技术在工业制造中的应用探索
一、数字孪生:工业4.0的虚实纽带 1.1 技术定义与发展脉络 数字孪生(Digital Twin)通过实时数据映射,在虚拟空间构建物理实体的动态镜像。其演进历程: 概念萌芽(2002年):NASA首次提…...
# linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包?
linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包? 文章目录 linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包?1 显…...
【心理课堂】学习软件的道路上若感到了困难和迷茫怎么办
在科技飞速发展的今天,软件领域以其广阔的发展前景和丰厚的薪资待遇吸引着众多人投身其中。然而,学习软件并非一帆风顺,在这个过程中,我们难免会遇到困难和迷茫。那么,当我们在学习软件的道路上感到力不从心时…...
【Docker项目实战】使用Docker与Caddy部署BanBan任务管理工具
【Docker项目实战】使用Docker部署BanBan任务管理工具 一、BanBan介绍1.1 BanBan简介1.2 主要特点1.3 使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载BanBan镜像五、…...
InternVL:论文阅读 -- 多模态大模型(视觉语言模型)
更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1)…...
【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。
报错: [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图: 原因:Java 版本和 Spring 不兼容,显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…...
康谋应用 | 基于多传感器融合的海洋数据采集系统
在海洋监测领域,基于无人艇能够实现高效、实时、自动化的海洋数据采集,从而为海洋环境保护、资源开发等提供有力支持。其中,无人艇的控制算法训练往往需要大量高质量的数据支持。然而,海洋数据采集也面临数据噪声和误差、数据融合…...
双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!
2025-03-10 语言更新 模式匹配支持守卫(Pattern Guard) 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式,并且模式守卫为真的情况下才会执行。如果模式守卫为假,则会…...
深入探索 Java Stream
目录 引言一、Java Stream 基础二、Java Stream 常用操作的语法结构及示例三、Java Stream 的应用场景四、总结 引言 在 Java 编程领域,随着数据量的不断增长以及对高效数据处理需求的日益迫切,Java 8 引入的 Stream API 成为了开发者们的得力助手。Str…...
搜广推校招面经四十六
Minimax llm&广告推荐算法 一、反向梯度下降的数学推导(以逻辑回归为例) 1.1. 模型定义 假设模型为逻辑回归,输入特征为 x ∈ R d \mathbf{x} \in \mathbb{R}^d x∈Rd,权重参数为 w ∈ R d \mathbf{w} \in \mathbb{R}^d …...
【Java 和 Scala】-- Java 与 Scala 的 Assert 断言对比
目录 Java 与 Scala 的 Assert 断言对比 1. 什么是 Assert(断言)? 2. 断言的使用场景 3. Java 断言示例 3.1 Java 断言的基本用法 3.2 Java 启用断言 4. Scala 断言示例 4.1 Scala 断言的基本用法 4.2 Scala 断言默认行为 5. Java 与…...
嵌入式软件测试的东方智慧:WinAMS工具的技术哲学与实践启示——一名汽车电子工程师的七年工具演进观察
引言:在丰田精益生产线上诞生的测试哲学 2017年参与某日系车企的ECU(电子控制单元)联合开发时,我第一次在名古屋工厂见到产线旁部署的WinAMS测试站。不同于欧美工具强调的“全流程覆盖”,这个诞生于日本制造业精益文化…...
MCP-代码解读TypeScript版本
MCP-代码解读TypeScript版本 文章目录 MCP-代码解读TypeScript版本1-参考网址2-TypeScript代码3-代码解读1-[非重点]定义函数2-[非重点]定义工具说明3-[重点]运行MCP服务 1-参考网址 B站视频参考 2-TypeScript代码 import { McpServer } from "modelcontextprotocol/sd…...
写了一个二叉树构造函数和画图函数,方便debug
代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…...
docker 小记
一、卸载 查看当前版本 docker -v2. 如果有,先停止docker systemctl stop docker如果是yum安装,卸载方式为 #已防版本冲突,直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…...
G-Star 公益行起航,挥动开源技术点亮公益!
公益组织,一直是社会温暖的传递者,但在数字化浪潮中,也面临着诸多比大众想象中复杂的挑战:项目管理如何更高效?志愿者管理又该如何创新?宣传推广怎么才能更有影响力?内部管理和技术支持又该如何…...
CMD批处理一些冷门命令,编写windows脚本常用?
场景1: 考虑一种情况,需要使用变量对变量循环替换这个时候,如果不加以一些特殊的设置,很有可能出现与预设的结果不相符的情况,这个时候可以通过设置这样一个命令来避免这个问题。 解决方式: setlocal ena…...
医疗AI测试实战:如何确保人工智能安全赋能医疗行业?
一、医疗AI测试的重要性 人工智能(AI)正广泛应用于医疗行业,如疾病诊断、医学影像分析、药物研发、手术机器人和智能健康管理等领域。医疗AI技术的应用不仅提高了诊断效率,还能降低误诊率,改善患者治疗效果。然而&…...
k9s入门及实战
概述 k9s,GitHub,是用于管理k8s集群的CLI,提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能,k9s会以特定时间间隔监控k8s的变化,默认为2秒,并提供后续命令来与k8s资源进行交互,k9s可让…...
嵌入式硬件篇---手柄控制控制麦克纳姆轮子
文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值(psx_buf[7])4.2 右摇杆水平值(psx_buf[8])4.3 左摇杆水平值(psx_buf[5])4.4 左摇杆垂直值(psx_buf[6]&am…...
redis增加ip白名单
Redis增加IP白名单 随着互联网的快速发展,网络安全问题也日益凸显。为了保护服务器安全,我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库,可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…...
git commit messege 模板设置 (规范化管理git)
配置方法 git config --global core.editor vim (设置 Git 的默认编辑器为 Vim)在用户根目录下(~),创建一个.git_commit_msg文件,然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…...
Franka机器人ROS 2 发布:赋能机器人研究和行业应用
Franka机器人 ROS 2 发布:赋能机器人研究和行业应用 Franka ROS 2 发布:赋能机器人研究和行业应用 由zlem Odeh 于Franka Robotics 发布 在机器人操作系统 (ROS) 等技术和生态系统的推动下,机器人世界正以前所未有的速度发展。ROS 2 是广受…...
docker部署jenkins,安装使用一条龙教程
Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 2. 什么是CI / CD…...
短视频下载去水印,用什么工具好?
去除视频和图片水印是许多用户的需求,尤其是在分享或保存内容时。以下是6款超好用的工具,帮助你轻松去除水印,享受纯净的视觉体验: 1. 易下载去水印小程序 特点: 操作简单,支持抖音、快手、小红书、哔哩哔哩…...
