深度學習篇---paddleocr正則化提取


文章目錄

  • 前言
  • 一、代碼總述&介紹
    • 1.1導入必要的庫
      • 1.1.1cv2
      • 1.1.2re
      • 1.1.3paddleocr
    • 1.2初始化PaddleOCR
    • 1.3打開攝像頭
    • 1.4使用 PaddleOCR 進行識別
    • 1.5定義正則表達式模式
    • 1.6打印提取結果
    • 1.7異常處理
  • 二、正則表達式
    • 2.1簡介
    • 2.2常用正則表達式模式及原理
      • 2.2.1. 快遞單號模式
      • 2.2.2. 手機號模式
      • 2.2.3. 姓名模式
    • 2.3正則表達式的使用原理


前言

本文簡單介紹了paddleocr中使用的到的正則化。


一、代碼總述&介紹

import cv2
import re
from paddleocr import PaddleOCR# 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")# 打開攝像頭
cap = cv2.VideoCapture(0)if not cap.isOpened():print("無法打開攝像頭")exit()try:while True:# 讀取攝像頭幀ret, frame = cap.read()if not ret:print("無法獲取幀,退出...")break# 使用 PaddleOCR 進行識別result = ocr.ocr(frame, cls=True)text = ""for line in result:for word_info in line:text += word_info[1][0] + " "# 定義正則表達式模式# 快遞單號:通常是數字和字母的組合,長度可能在 10 到 20 位左右express_pattern = r'[A-Za-z0-9]{10,20}'# 手機號:以 1 開頭,后面跟 10 位數字phone_pattern = r'1\d{10}'# 姓名:簡單假設為 2 到 4 個漢字name_pattern = r'[\u4e00-\u9fa5]{2,4}'# 查找匹配項express_numbers = re.findall(express_pattern, text)phone_numbers = re.findall(phone_pattern, text)names = re.findall(name_pattern, text)# 打印提取結果print("快遞單號:", express_numbers)print("手機號:", phone_numbers)print("姓名:", names)# 顯示幀cv2.imshow('Camera Feed', frame)# 按 'q' 鍵退出循環if cv2.waitKey(1) & 0xFF == ord('q'):breakexcept Exception as e:print(f"發生錯誤: {e}")
finally:# 釋放攝像頭并關閉窗口cap.release()cv2.destroyAllWindows()

1.1導入必要的庫

python
import cv2
import re
from paddleocr import PaddleOCR

1.1.1cv2

import cv2:導入 OpenCV 庫,它是一個廣泛用于計算機視覺任務的庫,這里主要用于攝像頭操作和圖像顯示

1.1.2re

import re:導入 Python 的 re 模塊,用于進行正則表達式匹配,方便從識別出的文本中提取特定信息

1.1.3paddleocr

from paddleocr import PaddleOCR:從 paddleocr 庫中導入 PaddleOCR 類,用于進行光學字符識別(OCR)。

1.2初始化PaddleOCR

## 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
ocr = PaddleOCR(use_angle_cls=True, lang="ch"):創建一個 PaddleOCR 對象 ocr。use_angle_cls=True 表示啟用角度分類功能,能更好地處理不同角度的文字;lang="ch" 表示使用中文進行識別。

1.3打開攝像頭

# 打開攝像頭
cap = cv2.VideoCapture(0)
------
cap = cv2.VideoCapture(0):使用 cv2.VideoCapture 函數打開默認攝像頭(編號為 0),并將返回的視頻捕獲對象賦值給 cap。
檢查攝像頭是否成功打開
if not cap.isOpened():print("無法打開攝像頭")exit()
------
if not cap.isOpened()::檢查攝像頭是否成功打開。如果 cap.isOpened() 返回 False,說明攝像頭未成功打開。
print("無法打開攝像頭"):若攝像頭未成功打開,打印提示信息。
exit():終止程序運行。
開始循環讀取攝像頭幀
try:while True:
------
try::開啟一個異常處理塊,用于捕獲可能出現的異常。
while True::創建一個無限循環,持續從攝像頭讀取幀。
讀取攝像頭幀# 讀取攝像頭幀ret, frame = cap.read()
------
ret, frame = cap.read():調用 cap.read() 方法從攝像頭讀取一幀圖像。ret 是一個布爾值,表示是否成功讀取到幀;frame 是讀取到的圖像幀。
檢查是否成功讀取幀if not ret:print("無法獲取幀,退出...")break
------
if not ret::如果 ret 為 False,說明未成功讀取到幀。
print("無法獲取幀,退出..."):打印提示信息。
break:跳出循環,結束程序。

1.4使用 PaddleOCR 進行識別

 使用 PaddleOCR 進行識別result = ocr.ocr(frame, cls=True)
------
result = ocr.ocr(frame, cls=True):調用 ocr.ocr 方法對當前幀 frame 進行 OCR 識別,cls=True 表示啟用角度分類。識別結果存儲在 result 中。
提取識別到的文本text = ""for line in result:for word_info in line:text += word_info[1][0] + " "
------
text = "":初始化一個空字符串 text,用于存儲識別到的所有文本。
for line in result::遍歷識別結果 result 中的每一行。
for word_info in line::遍歷每一行中的每個單詞信息。
text += word_info[1][0] + " ":將每個單詞的文本內容添加到 text 中,并在后面添加一個空格。

1.5定義正則表達式模式

      # 定義正則表達式模式# 快遞單號:通常是數字和字母的組合,長度可能在 10 到 20 位左右express_pattern = r'[A-Za-z0-9]{10,20}'# 手機號:以 1 開頭,后面跟 10 位數字phone_pattern = r'1\d{10}'# 姓名:簡單假設為 2 到 4 個漢字name_pattern = r'[\u4e00-\u9fa5]{2,4}'
------
express_pattern = r'[A-Za-z0-9]{10,20}':定義快遞單號的正則表達式模式,匹配由 1020 位的字母(大小寫均可)和數字組成的字符串。
phone_pattern = r'1\d{10}':定義手機號的正則表達式模式,匹配以數字 1 開頭,后面跟 10 位數字的字符串。
name_pattern = r'[\u4e00-\u9fa5]{2,4}':定義姓名的正則表達式模式,匹配由 24 個中文字符組成的字符串。
查找匹配項# 查找匹配項express_numbers = re.findall(express_pattern, text)phone_numbers = re.findall(phone_pattern, text)names = re.findall(name_pattern, text)
------
express_numbers = re.findall(express_pattern, text):使用 re.findall 方法在 text 中查找所有匹配快遞單號模式的字符串,并將結果存儲在 express_numbers 列表中。
phone_numbers = re.findall(phone_pattern, text):同理,查找所有匹配手機號模式的字符串,存儲在 phone_numbers 列表中。
names = re.findall(name_pattern, text):查找所有匹配姓名模式的字符串,存儲在 names 列表中。

1.6打印提取結果

      # 打印提取結果print("快遞單號:", express_numbers)print("手機號:", phone_numbers)print("姓名:", names)
------
分別打印提取到的快遞單號、手機號和姓名列表。
顯示幀# 顯示幀cv2.imshow('Camera Feed', frame)
cv2.imshow('Camera Feed', frame):使用 cv2.imshow 函數顯示當前幀,窗口標題為 Camera Feed。
按 'q' 鍵退出循環# 按 'q' 鍵退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break
------
cv2.waitKey(1):等待 1 毫秒,檢測是否有按鍵事件。
cv2.waitKey(1) & 0xFF == ord('q'):檢查按下的鍵是否為 'q'。如果是,則跳出循環。

1.7異常處理

except Exception as e:print(f"發生錯誤: {e}")
------
except Exception as e::捕獲所有異常,并將異常對象賦值給 e。
print(f"發生錯誤: {e}"):打印錯誤信息。
釋放攝像頭并關閉窗口
finally:# 釋放攝像頭并關閉窗口cap.release()cv2.destroyAllWindows()
------
finally::無論是否發生異常,都會執行 finally 塊中的代碼。
cap.release():釋放攝像頭資源。
cv2.destroyAllWindows():關閉所有由 OpenCV 創建的窗口。

二、正則表達式

2.1簡介

正則表達式是一種用于匹配字符串模式的工具,在處理文本數據時非常有用。

2.2常用正則表達式模式及原理

2.2.1. 快遞單號模式

express_pattern = r'[A-Za-z0-9]{10,20}'

原理剖析:
[A-Za-z0-9]:這是一個字符類,它表示匹配方括號內任意一個字符。A-Z 代表所有大寫字母,a-z 代表所有小寫字母,0-9 代表所有數字。所以這個字符類可以匹配任意一個字母(大小寫均可)或者數字。
{10,20}:這是一個量詞,它規定了前面字符類(也就是 [A-Za-z0-9])出現的次數范圍。{10,20} 表示前面的字符類至少出現 10 次,最多出現 20 次。
綜合起來,[A-Za-z0-9]{10,20} 可以匹配由 10 到 20 位字母(大小寫均可)和數字組成的字符串,比較符合常見快遞單號的特征。

2.2.2. 手機號模式

phone_pattern = r'1\d{10}'

原理剖析:
1:這是一個普通字符,它直接匹配字符 1。在中國,手機號碼都是以數字 1 開頭的。
\d:這是一個元字符,它代表任意一個數字,等價于 [0-9]。
{10}:這是一個量詞,它規定了前面的 \d 必須出現 10 次。
綜合起來,1\d{10} 可以匹配以數字 1 開頭,后面跟著 10 位數字的字符串,符合中國手機號碼的格式。

2.2.3. 姓名模式

name_pattern = r'[\u4e00-\u9fa5]{2,4}'

原理剖析:
[\u4e00-\u9fa5]:這是一個字符類,\u4e00 到 \u9fa5 是 Unicode 編碼中漢字的范圍,所以這個字符類可以匹配任意一個中文字符。
{2,4}:這是一個量詞,它規定了前面的字符類(也就是 [\u4e00-\u9fa5])至少出現 2 次,最多出現 4 次。
綜合起來,[\u4e00-\u9fa5]{2,4} 可以匹配由 2 到 4 個中文字符組成的字符串,簡單模擬了常見姓名的長度。

2.3正則表達式的使用原理

在 Python 里,re 模塊提供了正則表達式的支持。常用的函數有 re.findall、re.search、re.match 等。在你的代碼中,使用了 re.findall 函數:

express_numbers = re.findall(express_pattern, text)
phone_numbers = re.findall(phone_pattern, text)
names = re.findall(name_pattern, text)

re.findall(pattern, string):該函數會在 string 中查找所有匹配 pattern 的子字符串,并將它們作為一個列表返回。例如,re.findall(express_pattern, text) 會在 text 中查找所有符合 express_pattern 模式的子字符串,然后把這些子字符串組成一個列表賦值給 express_numbers。
正則表達式的匹配過程通常是從字符串的開頭開始,依次嘗試匹配模式。如果匹配成功,就記錄下匹配的子字符串,然后繼續從匹配結束的位置往后匹配,直到字符串結束。

綜上所述,這段代碼實現了從攝像頭實時讀取幀,使用 PaddleOCR 進行文字識別,并通過正則表達式提取快遞單號、手機號和姓名的功能。用戶可以通過按 ‘q’ 鍵退出程序。


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

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

相關文章

JavaScript DOM與元素操作

目錄 DOM 樹、DOM 對象、元素操作 一、DOM 樹與 DOM 對象 二、獲取 DOM 元素 1. 基礎方法 2. 現代方法(ES6) 三、修改元素內容 四、修改元素常見屬性 1. 標準屬性 2. 通用方法 五、通過 style 修改樣式 六、通過類名修改樣式 1. className 屬…

單元測試的編寫

Python 單元測試示例 在 Python 中,通常使用 unittest 模塊來編寫單元測試。以下是一個簡單的示例: 示例代碼:calculator.py # calculator.py def add(a, b):return a bdef subtract(a, b):return a - b 單元測試代碼:test_c…

大模型學習:從零到一實現一個BERT微調

目錄 一、準備階段 1.導入模塊 2.指定使用的是GPU還是CPU 3.加載數據集 二、對數據添加詞元和分詞 1.根據BERT的預訓練,我們要將一個句子的句頭添加[CLS]句尾添加[SEP] 2.激活BERT詞元分析器 3.填充句子為固定長度 代碼解釋: 三、數據處理 1.…

10組時尚復古美學自然冷色調肖像電影照片調色Lightroom預設 De La Mer – Nautical Lightroom Presets

De La Mer 預設系列包含 10 種真實的調色預設,適用于肖像、時尚和美術。為您的肖像攝影帶來電影美學和個性! De La Mer 預設非常適合專業人士和業余愛好者,可在桌面或移動設備上使用,為您的攝影項目提供輕松的工作流程。這套包括…

SDL多窗口多線程渲染技術解析

SDL多窗口多線程渲染技術解析 技術原理 SDL多線程模型與窗口管理 SDL通過SDL_Thread結構體實現跨平臺線程管理。在多窗口場景中,每個窗口需關聯獨立的渲染器,且建議遵循以下原則: 窗口與渲染器綁定:每個窗口創建時生成專屬渲染器(SDL_CreateRenderer),避免跨線程操作…

QT 跨平臺發布指南

一、Windows 平臺發布 1. 使用 windeployqt 工具 windeployqt --release --no-compiler-runtime your_app.exe 2. 需要包含的文件 應用程序 .exe 文件 Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll 等 Qt 庫 platforms/qwindows.dll 插件 styles/qwindowsvistastyle.dll (如果使…

L2-037 包裝機 (分數25)(詳解)

題目鏈接——L2-037 包裝機 問題分析 這個題目就是模擬了物品在傳送帶和筐之間的傳送過程。傳送帶用隊列模擬,筐用棧模擬。 輸入 3 4 4 GPLT PATA OMSA 3 2 3 0 1 2 0 2 2 0 -1輸出 根據上述操作,輸出的物品順序是: MATA樣例分析 初始…

機器學習的一百個概念(4)下采樣

前言 本文隸屬于專欄《機器學習的一百個概念》,該專欄為筆者原創,引用請注明來源,不足和錯誤之處請在評論區幫忙指出,謝謝! 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

qt6下配置qopengl

qt部件選擇 Qt 6:需要手動選擇 Qt Shader Tools 和 Qt 5 Compatibility Module(如果需要兼容舊代碼) cmake文件 cmake_minimum_required(VERSION 3.16) # Qt6 推薦最低 CMake 3.16 project(myself VERSION 0.1 LANGUAGES CXX)set(CMAKE_A…

數據安全系列4:密碼技術的應用-接口調用的身份識別

傳送門 數據安全系列1:開篇 數據安全系列2:單向散列函數概念 數據安全系列3:密碼技術概述 什么是認證? 一談到認證,多數人的反應可能就是"用戶認證" 。就是應用系統如何識別用戶的身份,直接…

STL之map和set

1. 關聯式容器 vector、list、deque、 forward_list(C11)等,這些容器統稱為序列式容器,因為其底層為線性序列的數據結構,里面存儲的是元素本身。 關聯式容器也是用來存儲數據的,與序列式容器不同的是,其里面存儲的是結…

Vue3 其它API Teleport 傳送門

Vue3 其它API Teleport 傳送門 在定義一個模態框時,父組件的filter屬性會影響子組件的position屬性,導致模態框定位錯誤使用Teleport解決這個問題把模態框代碼傳送到body標簽下

C++練習

1.將File練習題&#xff0c;內部的FILE*描述符&#xff0c;改成int描述符 2。寫一個類Fifo管道類。提高難度&#xff0c;什么都不提示。只要求&#xff1a;使用自己編寫的Fifo類對象&#xff0c;實現2個終端之間互相聊天 file.cpp #include <iostream> #include <c…

《Python Web網站部署應知應會》No4:基于Flask的調用AI大模型的高性能博客網站的設計思路和實戰(上)

基于Flask的調用AI大模型的高性能博客網站的設計思路和實戰&#xff08;上&#xff09; 摘要 本文詳細探討了一個基于Flask框架的高性能博客系統的設計與實現&#xff0c;該系統集成了本地AI大模型生成內容的功能。我們重點關注如何在高并發、高負載狀態下保持系統的高性能和…

實現一個簡易版的前端監控 SDK

【簡易版的前端監控系統】 1、Promise的錯誤如何監控&#xff1f;–promise不是所有都是接口請求 2、接口的報錯如何監控&#xff1f;–全局監控sdk&#xff0c;不改動公共的請求方法、不改動業務代碼&#xff1b;一般接口使用axios請求 3、資源的報錯如何監控&#xff1f; 4、…

【操作系統】軟中斷vs硬中斷

在操作系統中&#xff0c;中斷&#xff08;Interrupt&#xff09; 是 CPU 響應外部事件的重要機制&#xff0c;分為 硬中斷&#xff08;Hardware Interrupt&#xff09; 和 軟中斷&#xff08;Software Interrupt&#xff09;。它們的核心區別在于 觸發方式 和 處理機制。 1. 硬…

力扣刷題-熱題100題-第27題(c++、python)

21. 合并兩個有序鏈表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/merge-two-sorted-lists/description/?envTypestudy-plan-v2&envIdtop-100-liked 常規法 創建一個新鏈表&#xff0c;遍歷list1與list2&#xff0c;將新鏈表指向list1與list2…

Python包下載路徑 Chrome用戶數據 修改到非C盤

查看 site-packages 是否能通過命令行完成&#xff1f; 可以&#xff0c;使用以下命令&#xff08;不需寫腳本&#xff09;&#xff1a; python -m site輸出包含&#xff1a; sys.path site-packages 路徑&#xff08;全局和用戶級&#xff09; 如果只想看安裝路徑&#…

【鴻蒙5.0】鴻蒙登錄界面 web嵌入(隱私頁面加載)

在鴻蒙應用中嵌入 Web 頁面并加載隱私頁面&#xff0c;可借助 WebView 組件來實現。以下是一個完整示例&#xff0c;展示如何在鴻蒙 ArkTS 里嵌入 Web 頁面并加載隱私政策頁面。 在 HarmonyOS 應用開發中&#xff0c;如果你希望嵌入一個網頁&#xff0c;并且特別關注隱私頁面加…

AI加Python的文本數據情感分析流程效果展示與代碼實現

本文所使用數據來自于梯田景區評價數據。 一、數據預處理 數據清洗 去除重復值、空值及無關字符(如表情符號、特殊符號等)。 提取中文文本,過濾非中文字符。 統一文本格式(如全角轉半角、繁體轉簡體)。 中文分詞與去停用詞 使用 jieba 分詞工具進行分詞。 加載自定義詞…