使用 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 識別,并結合圖像預處理技術提升識別率。在實際項目中,你可以根據圖像質量和識別場景進一步調整預處理參數,比如增加二值化處理、去背景等操作。

此外,若圖像中包含不同區域的文本信息,可擴展代碼實現批量處理和區域定位,從而用于更大規模的自動化識別任務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897666.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897666.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker安裝和卸載

服務器系統:Ubuntu Server 18.04.2 64bit 1 安裝docker: 1.1 在線安裝 1.# yum install docker 1.2 離線安裝 https://download.csdn.net/download/qq_27106141/90477700 1.# docker-18.03.1-ce.tgz 1.2.1 解壓 tar -xzvf docker-18.03.1-ce.tgz 1.2.2…

機器人交互系統 部署構建

環境要求 Ubuntu 20.04 或更高版本ROS Noetic 或兼容版本Python 3.8 安裝步驟 1. 安裝ROS環境(如未安裝) sudo apt update sudo apt install ros-noetic-desktop-full source /opt/ros/noetic/setup.bash2. 創建工作空間并克隆代碼 mkdir -p ~/code…

【Go每日一練】構建一個簡單的用戶信息管理系統

👻創作者:丶重明 👻創作時間:2025年3月7日 👻擅長領域:運維 目錄 1.😶?🌫?題目:簡單的用戶信息管理系統2.😶?🌫?代碼開發3.😶?&a…

全員DeepSeek時代,前端能做些什么?

全員DeepSeek時代,前端能做些什么? 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc #mermaid-svg-VNyL95jkz9jEXgUq {font-family:&…

Machine Learning: 十大基本機器學習算法

機器學習算法分類:監督學習、無監督學習、強化學習 基本的機器學習算法: 線性回歸、支持向量機(SVM)、最近鄰居(KNN)、邏輯回歸、決策樹、k平均、隨機森林、樸素貝葉斯、降維、梯度增強。 機器學習算法大致可以分為三類: 監督學習算法 (Sup…

【Linux docker 容器】關于想要讓虛擬機在開機時候也docker自己啟動,容器也自己啟動,省去要自己開docker和容器

確認 Docker 服務狀態: 首先,你需要確保 Docker 服務已經在虛擬機上安裝并正確配置。你可以使用如下命令來檢查 Docker 服務的狀態: systemctl status docker.service 如果服務沒有運行,你可以使用以下命令啟動它: s…

前端系統測試(單元、集成、數據|性能|回歸)

有關前端測試的面試題 系統測試 首先,功能測試部分。根據資料,單元測試是驗證最小可測試單元的正確性,比如函數或組件。都提到了單元測試的重要性,強調其在開發早期發現問題,并通過自動化提高效率。需要整合我搜索到的資料中的觀點,比如單元測試的方法(接口測試、路徑覆…

linux 命令 ls

ls 是 Linux 系統中用于列出目錄內容的核心命令,幾乎所有日常操作都會用到。以下是其詳細用法和常見場景說明 1. 基礎語法 ls [選項] [目錄/文件] 不指定目錄時,默認列出當前目錄的內容。 可以指定文件或目錄路徑,支持通配符(如…

CI/CD—GitLab部署

GitLab簡介: GitLab 是一個用于代碼托管和軟件開發協作的平臺,在全球開發者社區及企業中應用廣泛,以下是對它的詳細介紹: 主要功能 代碼托管:提供了基于 Git 的代碼倉庫管理功能,支持創建、克隆、推送、…

ubuntu軟件

視頻軟件,大部分的編碼都能適應 sudo apt install vlc圖片軟件 sudo apt install gwenview截圖軟件 sudo apt install flameshot設置快捷鍵 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一個自定義的路徑 菜單更換 sudo apt r…

Easysearch 使用 AWS S3 進行快照備份與還原:完整指南及常見錯誤排查

Easysearch 可以使用 AWS S3 作為遠程存儲庫,進行索引的快照(Snapshot)備份和恢復。同時,Easysearch 內置了 S3 插件,無需額外安裝。以下是完整的配置和操作步驟。 1. 在 AWS S3 上創建存儲桶 登錄 AWS 控制臺&#x…

【系統架構設計師】性能評估

目錄 1. 說明2. 基準測試程序3. Web服務器的性能評估4. 系統監視5. 例題5.1 例題1 1. 說明 1.性能評估是為了一個目的,按照一定的步驟,選用一定的度量項目,通過建模和實現,對一個系統的性能進行各項檢測,對測試結果做…

動態規劃-第2篇

前言:在上一篇文章中,我們了解了動態規劃的基本概念和解決問題的基本思路。通過分解問題、存儲子問題的解,動態規劃為我們提供了高效的解決方案。然而,動態規劃并不是一成不變的,它有很多不同的技巧和變種,…

基于Redis實現限流

限流盡可能在滿足需求的情況下越簡單越好! 1、基于Redsi的increment方法實現固定窗口限流 Redis的increment方法保證并發線程安全窗口盡可能越小越好(太大可能某一小段時間就打滿請求剩下的都拿不到令牌了)這個原理其實就是用當前時間戳然后除窗口大小 在這個窗口大…

【工具使用】IDEA 社區版如何創建 Spring Boot 項目(詳細教程)

IDEA 社區版如何創建 Spring Boot 項目(詳細教程) Spring Boot 以其簡潔、高效的特性,成為 Java 開發的主流框架之一。雖然 IntelliJ IDEA 專業版提供了Spring Boot 項目向導,但 社區版(Community Edition&#xff09…

探索高性能AI識別和邊緣計算 | NVIDIA Jetson Orin Nano 8GB 開發套件的全面測評

隨著邊緣計算和人工智能技術的迅速發展,性能強大的嵌入式AI開發板成為開發者和企業關注的焦點。NVIDIA近期推出的Jetson Orin Nano 8GB開發套件,憑借其40 TOPS算力、高效的Ampere架構GPU以及出色的邊緣AI能力,引起了廣泛關注。本文將從配置性…

緊急救援!MySQL數據庫誤刪后的3種恢復方案

一、誤刪場景分類與恢復策略 ?常見誤操作場景?: DROP TABLE 誤刪單表(高頻事故)DELETE 誤刪數據(可通過事務回滾搶救)DROP DATABASE 刪除整個庫(需全量備份)服務器rm -rf(物理文件刪除)?恢復方案選擇矩陣?: 場景推薦方案時間窗口表結構刪除(DROP)備份恢復 + B…

開源免費日志服務ELK Syack代替syslog

一、ELK Stack 采集 syslog 日志的主要方式 通常,ELK Stack 使用 Logstash 或者 Filebeat 來采集 syslog 日志。 Beats 通常更輕量級,適合作為代理部署在各個日志源服務器上,而 Logstash 則功能更強大,可以進行更復雜的日志處理和…

單片機設計暖腳器研究

標題:單片機設計暖腳器研究 內容:1.摘要 本文聚焦于基于單片機設計暖腳器的研究。背景方面,在寒冷季節,暖腳器能有效改善腳部寒冷狀況,提升人們的舒適度,但傳統暖腳器存在功能單一、溫控不準確等問題。目的是設計一款智能、高效且…

藍橋杯省賽真題C++B組2024-握手問題

一、題目 【問題描述】 小藍組織了一場算法交流會議,總共有 50 人參加了本次會議。在會議上,大家進行了握手交流。按照慣例他們每個人都要與除自己以外的其他所有人進行一次握手(且僅有一次)。但有 7 個人,這 7 人彼此之間沒有進行握手(但這…