Python OCR 圖片轉文字進階:讀光OCR之行檢測模型+行識別模型

Python OCR 圖片轉文字進階:讀光OCR之行檢測模型+行識別模型

  • 介紹
      • 阿里云文字識別OCR(讀光OCR)
      • 前置條件
        • 模型1:行檢測模型
        • 模型1:行識別模型
      • 代碼:main.py

介紹

什么是OCR?

OCR是“Optical Character Recognition”的縮寫,中文意為“光學字符識別”。它是一種技術,可以識別和轉換打印在紙張或圖像上的文字和字符為機器可處理的格式,如計算機文本文件。通過使用OCR技術,可以快速地將紙質文檔數字化,從而使文本可以被編輯、搜索和分析。這項技術廣泛應用于各種場合,如圖書館和檔案館的文獻數字化、 pdf 文件的文本搜索、以及掃描文檔中的條形碼和二維碼等。

阿里云文字識別OCR(讀光OCR)

阿里云文字識別OCR(讀光OCR),是一款由阿里巴巴達摩院打造的OCR產品,用于識別圖片、文檔、卡證等文件所包含的文字信息。

前置條件

1、準備電腦環境(我當前用的是 4060 顯卡)
2、安裝環境(conda、python)
3、下載模型(通過下方鏈接地址下載模型)

模型1:行檢測模型
https://www.modelscope.cn/models/iic/cv_resnet18_ocr-detection-db-line-level_damo/summary
模型1:行識別模型
https://www.modelscope.cn/models/iic/cv_convnextTiny_ocr-recognition-general_damo/summary

代碼:main.py

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasksfrom PIL import Image, ImageDraw# 加載行檢測模型
ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-db-line-level_damo')# 目標圖片路徑
pic_path = 'ipp.jpg'
result = ocr_detection(pic_path)
print(result)# 多邊形坐標
polygons = result["polygons"]
fg_name = "cropped_image_"
# 打開圖片
image = Image.open(pic_path)# 創建新圖片
cropped_images = []# 遍歷每個多邊形
for i, polygon_coords in enumerate(polygons):# 獲取多邊形邊界框x_min, y_min = min(polygon_coords[::2]), min(polygon_coords[1::2])x_max, y_max = max(polygon_coords[::2]), max(polygon_coords[1::2])# 根據邊界框裁剪圖像cropped_region = image.crop((x_min, y_min, x_max, y_max))# 將裁剪后的圖片保存到列表中cropped_images.append(cropped_region)# 保存裁剪后的圖片
for i, cropped_image in enumerate(cropped_images):cropped_image.save(f"{fg_name}{i}.jpg")print("圖片已成功裁剪并保存。")# 加載行識別模型
ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo')# 循環識別獲取結果
for i, cropped_image in enumerate(cropped_images):img_url = f"{fg_name}{i}.jpg"result = ocr_recognition(img_url)print(result)
  1. from modelscope.pipelines import pipeline: 導入ModelScope的pipeline模塊,這個模塊允許用戶通過配置任務類型和模型來快速構建一個模型管道。
  2. from modelscope.utils.constant import Tasks: 導入ModelScope的常量定義,其中Tasks是一個枚舉類型,定義了不同的任務類型。
  3. ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-db-line-level_damo'): 創建一個文本檢測的管道,使用的是damo/cv_resnet18_ocr-detection-db-line-level_damo這個模型。
  4. pic_path = 'ipp.jpg': 設置要處理的圖片的路徑。
  5. result = ocr_detection(pic_path): 將圖片路徑輸入到文本檢測管道中,得到檢測結果。
  6. polygons = result["polygons"]: 從結果中提取多邊形坐標,這些坐標代表了文本區域的邊界。
  7. image = Image.open(pic_path): 使用Pillow庫打開指定的圖片。
  8. cropped_images = []: 初始化一個空列表,用于存儲裁剪后的圖像。
  9. for i, polygon_coords in enumerate(polygons):: 遍歷每個文本區域的多邊形坐標。
  10. x_min, y_min = min(polygon_coords[::2]), min(polygon_coords[1::2]): 計算每個多邊形的最小x和y坐標。
  11. x_max, y_max = max(polygon_coords[::2]), max(polygon_coords[1::2]): 計算每個多邊形的最小x和y坐標。
  12. cropped_region = image.crop((x_min, y_min, x_max, y_max)): 根據計算出的邊界框裁剪圖像。
  13. cropped_images.append(cropped_region): 將裁剪后的圖像保存到列表中。
  14. for i, cropped_image in enumerate(cropped_images):: 遍歷裁剪后的圖像列表。
  15. cropped_image.save(f"{fg_name}{i}.jpg"): 將每個裁剪后的圖像保存到文件系統。
  16. print("圖片已成功裁剪并保存。"): 打印成功消息。
  17. ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo'): 創建一個文本識別的管道,使用的是damo/cv_convnextTiny_ocr-recognition-general_damo這個模型。
  18. for i, cropped_image in enumerate(cropped_images):: 遍歷裁剪后的圖像列表。
  19. img_url = f"{fg_name}{i}.jpg": 為每個裁剪后的圖像創建一個文件路徑。
  20. result = ocr_recognition(img_url): 將裁剪后的圖像路徑輸入到文本識別管道中,得到識別結果。
  21. print(result): 打印識別結果。

在這里插入圖片描述

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

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

相關文章

Leetcode:字符串轉換整數 (atoi)

題目鏈接:8. 字符串轉換整數 (atoi) - 力扣(LeetCode) 普通版本(條件限制) class Solution { public:int myAtoi(string s) {int res 0;int i 0;int flag 1;//假設整數為正while(s[i] )//跳過空格{i;}if(s[i] …

德人合科技——@天銳綠盾 | -文檔透明加密系統

天銳綠盾文檔透明加密系統是一種先進的數據安全解決方案,旨在保護企業和組織的敏感信息,防止未經授權的訪問和泄漏。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是該系統的一些關鍵特點和功…

[C++11/14新特性] tuple元組介紹

C11 標準新引入了一種類模板,命名為 tuple(中文可直譯為元組)。tuple 最大的特點是:實例化的對象可以存儲任意數量、任意類型的數據。tuple 的應用場景很廣泛,例如當需要存儲多個不同類型的元素時,可以使用…

3D目標檢測入門:探索OpenPCDet框架

前言 在自動駕駛和機器人視覺這兩個飛速發展的領域中,3D目標檢測技術扮演著核心角色。隨著深度學習技術的突破性進展,3D目標檢測算法的研究和應用正日益深入。OpenPCDet,這個由香港中文大學OpenMMLab實驗室精心打造的開源工具箱,…

加密算法簡述

目錄 1 加密算法的分類 2 對稱加密 3 非對稱加密 4 哈希算法 1 加密算法的分類 數據加密的基本過程是將原本的明文數據依照某種算法進行一定的處理,使之成為一段不可讀的密文,只有通過相應的密鑰與算法進行計算后才可顯示出原文。而這個過程中的算法…

【用Python畫畫】六一兒童節畫愛心

本文收錄于 《Python編程入門》專欄,從零基礎開始,分享一些Python編程基礎知識,歡迎關注,謝謝! 文章目錄 一、前言二、代碼示例三、知識點梳理四、總結 一、前言 本文介紹如何使用Python的海龜畫圖工具turtle&#xf…

linux中如和查找端口是否被占用

在Linux系統中&#xff0c;可以使用以下命令來查找特定端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <port_number>其中&#xff0c;-t表示TCP協議&#xff0c;-u表示UDP協議&#xff0c;-l表示監聽狀態&#xff0c;-n表示顯示端口號…

Docker從安裝開始精通

從虛擬機到容器 1.環境配置的難題 軟件開發最大的麻煩事之一&#xff0c;就是環境配置。用戶計算機的環境都不相同&#xff0c;你怎么知道自家的軟件&#xff0c;能在那些機器跑起來&#xff1f; 用戶必須保證兩件事&#xff1a;操作系統的設置&#xff0c;各種庫和組件的安裝…

堆排序的實現

在上一篇博客中&#xff0c;介紹了堆的實現&#xff0c;現在來介紹一下堆排序。 一.打印有序&#xff1a; 現在先給一個無序的數組&#xff0c;現在我們利用我們實現的堆的功能先完成一下打印排序&#xff1a; 在for循環里是一個建堆的過程&#xff0c;每來一個數據就放入堆中…

c++ map/multimap容器

在C中&#xff0c;std::map 和 std::multimap 是兩種關聯容器&#xff0c;它們包含了可重復的&#xff08;對于 multimap&#xff09;或唯一的&#xff08;對于 map&#xff09;鍵值對。這些容器都根據它們的鍵自動排序&#xff0c;并允許非常快速地根據鍵查找、插入和刪除元素…

監控易監測對象及指標之:深入監測Exchange 2013郵件服務器的關鍵指標

在當今的信息化時代&#xff0c;Exchange 2013郵件服務器因其高效、穩定的特點被廣泛應用于企業通信中。為了確保郵件服務器的持續穩定運行&#xff0c;及時發現并解決潛在問題至關重要。監控易作為一款功能強大的監控工具&#xff0c;為Exchange 2013郵件服務器提供了一系列細…

linux進程的加載和啟動過程分析

我們的源代碼通過預處理,編譯,匯編,鏈接后形成可執行文件,那么當我們在終端敲下指令$ ./a.out argv1 argv2 后,操作系統是怎么將我們的可執行文件加載并運行的呢? 首先知道,計算機的操作系統的啟動程序是寫死在硬件上的,每次計算機上電時,都將自動加載啟動程序,之后…

python第五次作業

1.請實現一個裝飾器&#xff0c;每次調用函數時&#xff0c;將函數名字以及調用此函數的時間點寫入文件中 # 導入datetime模塊&#xff0c;用于獲取當前時間并格式化輸出 import datetime# 定義一個裝飾器工廠函數log_funcName_time&#xff0c;它接受一個參數time def log_fu…

紅外聽力教學考試系統-紅外語音聽力廣播在大學英語四六級聽力考試中應用

紅外聽力教學考試系統-紅外語音聽力廣播在大學英語四六級聽力考試中的應用 由北京海特偉業科技有限公司任洪卓發布于2024年6月1日 紅外語音聽力廣播&#xff08;即紅外聽力教學考試系統&#xff09;在英語四六級聽力考試的應用正日益凸顯出其重要性和優越性。在當前的高等教育…

xcode刪除依賴包package,刪除不必要的依賴項

點擊項目&#xff0c;然后點擊PROJECT項里面的Package DepenDependencies&#xff1a; 選中一個依賴項&#xff0c;然后點擊減號&#xff0c;就可以把依賴項刪除掉了&#xff0c;左側項目下面的Package已經沒有了這個依賴項 TARGET下面的package也要刪除&#xff1a;在這里刪除…

【C++】【Windows】程序加載DLL庫時依次查找哪些目錄

搜索的順序通常如下&#xff1a; 應用程序目錄&#xff1a;首先&#xff0c;系統會在包含可執行文件&#xff08;EXE&#xff09;的目錄中查找DLL。系統目錄&#xff1a;接下來&#xff0c;系統會在Windows系統目錄中查找&#xff0c;比如 C:\Windows\System32。16位系統目錄&…

人工智能與未來工作:未來已來,你準備好了嗎?

1. 引言 隨著人工智能技術的飛速發展&#xff0c;它正在逐漸滲透到我們生活的方方面面&#xff0c;尤其是工作領域。本文將探討人工智能的基本概念&#xff0c;它在不同行業的應用&#xff0c;以及它對未來就業市場和教育體系可能帶來的影響。 2. 人工智能的基本概念 2.1 定…

ESP32S3外設學習筆記

GPIO ESP32的GPIO&#xff08;通用輸入輸出&#xff09;引腳非常靈活&#xff0c;支持多種工作模式。這些模式可以通過編程來配置&#xff0c;以適應不同的應用需求。以下是ESP32 GPIO引腳的主要工作模式&#xff1a; 1. 輸入模式 普通輸入模式&#xff1a;在這種模式下&…

dubbo復習:(14)通過上下文傳遞附加數據

服務調用和響應時&#xff0c;除了請求的方法和返回的響應&#xff0c;還可以通過上下文(Context)傳遞更多的數據(附加數據&#xff09; 一、接口定義 package cn.edu.tju.service;public interface ContextService {String invoke(String param); }二、服務端接口實現&#x…

OA前端用什么開發:深入探索技術選型與最佳實踐

OA前端用什么開發&#xff1a;深入探索技術選型與最佳實踐 在開發OA&#xff08;辦公自動化&#xff09;系統的前端時&#xff0c;技術選型是至關重要的一步。它不僅決定了系統的外觀和用戶體驗&#xff0c;還直接影響到系統的性能、安全性和可維護性。本文將從四個方面、五個…