Flask + ajax上傳文件(三)--圖片上傳與OCR識別

本教程將詳細介紹如何使用Flask框架構建一個圖片上傳與文字識別(OCR)的Web應用。我們將使用EasyOCR作為OCR引擎,實現一個支持中文和英文識別的完整應用。

環境準備

首先,確保你已經安裝了Python 3.7+環境,然后安裝必要的依賴庫:

pip install flask easyocr pillow werkzeug

項目結構

/flask-ocr-app
├── app.py
├── upload/                # 上傳文件保存目錄
└── templates/└── index.html         # 前端頁面
└── static/├── js/                # jQuery等JS文件└── css/               # CSS樣式文件

代碼解析

1. Flask后端關鍵代碼 (app.py)

延遲加載EasyOCR以提高啟動速度

# 初始化EasyOCR閱讀器(延遲加載)
reader = None
def get_reader():global readerif reader is None:print("正在初始化EasyOCR,首次使用可能需要較長時間...")start_time = time.time()reader = easyocr.Reader(['ch_sim', 'en'])  # 支持中文簡體和英文print(f"EasyOCR初始化完成,耗時 {time.time() - start_time:.2f}秒")return reader

上傳圖片

@app.route('/upload_image', methods=['POST'])
def upload_image():"""處理圖片上傳和OCR識別"""try:# 安全保存文件filename = secure_filename(file.filename)filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)file.save(filepath)# 驗證是否為有效圖片try:with Image.open(filepath) as img:img.verify()except Exception as e:os.remove(filepath)return jsonify({'error': '無效的圖片文件'}), 400# 執行OCR識別start_time = time.time()ocr_reader = get_reader()result = ocr_reader.readtext(filepath, detail=0)  # detail=0只返回文本# 清理上傳的文件os.remove(filepath)# 處理識別結果text = ' '.join(result)print(f"識別完成,耗時 {time.time() - start_time:.2f}秒")return jsonify({'filter': text})except Exception as e:print(f"識別出錯: {str(e)}")return jsonify({'error': '識別過程中出錯'}), 500

檢查文件擴展名是否允許

def allowed_file(filename):allowed_extensions = {'png', 'jpg', 'jpeg', 'gif', 'bmp'}return '.' in filename and \filename.rsplit('.', 1)[1].lower() in allowed_extensions
關鍵點說明:
  1. 延遲加載EasyOCR:由于EasyOCR初始化耗時較長,我們使用延遲加載策略,在第一次使用時才初始化。
  2. 文件上傳安全處理
    • 使用secure_filename確保文件名安全
    • 限制文件大小(5MB)
    • 驗證文件擴展名
    • 使用Pillow驗證圖片有效性
  3. OCR處理:調用EasyOCR的readtext方法進行識別,detail=0只返回文本內容
  4. 資源清理:識別完成后立即刪除上傳的臨時文件

2. 前端頁面 (templates/index.html)

HTML結構部分

<div class="container py-4

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

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

相關文章

模型部署技巧(一)

模型部署技巧&#xff08;一&#xff09; 以下內容是參考CUDA與TensorRT模型部署內容第六章&#xff0c;主要針對圖像的前/后處理中的trick。 參考&#xff1a; 1.部署分類器-int8-calibration 2. cudnn安裝地址 3. 如何查找Tensor版本&#xff0c;與cuda 和 cudnn匹配 4. ti…

MySQL--數據引擎詳解

存儲引擎 MySQL體系結構 連接層&#xff1a; 主要接收客戶端的連接&#xff0c;然后完成一些鏈接的處理&#xff0c;以及認證授權的相關操作和安全方案&#xff0c;還要去檢查是否超過最大連接數等等&#xff0c;比如在連接MySQL服務器時需要輸入用戶名&#xff0c;密碼&#…

【含文檔+PPT+源碼】基于微信小程序的健康飲食食譜推薦平臺的設計與實現

項目介紹 本課程演示的是一款基于微信小程序的健康飲食食譜推薦平臺的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本…

當OA闖入元宇宙:打卡、報銷和會議的未來狂想

引言&#xff1a;虛實共生中的組織基因突變 元宇宙正以虛實共生的形態重構人類協作的底層邏輯。傳統OA系統建立的物理規則——指紋打卡驗證在場性、紙質票據堆砌信任鏈、會議室排期協調時空資源——在元宇宙的數字原野上迎來基因級重組。這場變革不僅是技術工具的迭代&#xf…

解決vscode cmake提示檢測到 #include 錯誤

一、問題 cmake已經包含了動態庫文件&#xff0c;依然提示“檢測到 #include 錯誤。請更新 includePath。” 二、解決方案 Ctrl Shift P進入CPP編輯配置&#xff0c;然后在JSON中加入下面一行&#xff1a; "configurationProvider": "ms-vscode.cmake-tools&…

2024ICPC成都題解

文章目錄 L. Recover Statistics(簽到)J. Grand Prix of Ballance(模擬簽到)A. Arrow a Row(構造)B. Athlete Welcome Ceremony(線性dp)G. Expanding Array(打表結論)I. Good Partitions(線段樹)E. Disrupting Communications(換根dpLCA倍增)K. Magical Set(費用流) 題目鏈接 …

達夢數據庫官方遷移工具SQLark:支持Oracle/MySQL/PostgreSQL遷移至達夢數據庫!

SQLark 百靈連接是一款面向信創應用開發者的數據庫開發和管理工具&#xff0c;由達夢數據歷時三年自主研發&#xff0c;注冊即可免費使用客戶端&#xff08;官網鏈接www.sqlark.com&#xff09;。今天&#xff0c;我們將重點介紹SQLark的特色功能之一——數據遷移&#xff0c;該…

映射關系4

好&#xff01;我明白了&#xff01;&#x1f4a5; 你希望我在你的基礎上&#xff0c;繼續優化 insertPathWithIds&#xff0c;讓它&#xff1a; ? 支持每一級節點的 idPart 是字符串&#xff08;而不是int&#xff09;。 ? 結構更清晰&#xff0c;更快拼接。 ? 完全符合C98…

PDF Shaper v15.0

如今對PDF處理的軟件很多都是只是單一的功能。PDF Shaper給你完全不同的體驗&#xff0c;因為PDF Shaper是一款免費的PDF工具集合的軟件。有了PDF Shaper&#xff0c;你以后再也不用下載其他處理PDF的軟件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

【Python爬蟲基礎篇】--4.Selenium入門詳細教程

先解釋&#xff1a;Selenium&#xff1a;n.硒&#xff1b;硒元素 目錄 1.Selenium--簡介 2.Selenium--原理 3.Selenium--環境搭建 4.Selenium--簡單案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠標操作 6.3.鍵盤操作 6.4.獲取斷言信息 6.5.…

mysql8.0版本部署+日志清理+rsync備份策略

mysql安裝&#xff1a;https://blog.csdn.net/qq_39399966/article/details/120205461 系統&#xff1a;centos7.9 數據庫版本&#xff1a;mysql8.0.28 1.卸載舊的mysql,保證環境純凈 rpm -qa | grep mariadb mariadb-5.... rpm -e --nodeps 軟件 rpm -e --nodeps mariadb-5.…

C#進階學習(十七)PriorityQueue<TElement, TPriority>優先級隊列的介紹

1. PriorityQueue是什么&#xff1f;作用是什么&#xff1f; 定義&#xff1a;PriorityQueue<TElement, TPriority> 是 C# (.NET 6 引入) 中的泛型優先級隊列數據結構。 那么是什么是優先級隊列呢&#xff1f;優先級隊列是一種抽象數據結構&#xff0c;其核心特性是元素按…

如何查看和驗證AWS CloudFront的托管區域ID

在使用AWS Route 53設置DNS記錄時,正確識別CloudFront分發的托管區域ID是至關重要的。本文將詳細介紹幾種查看和驗證CloudFront托管區域ID的方法,特別關注中國區CloudFront的特殊情況。 為什么托管區域ID很重要? 托管區域ID是AWS服務中的一個關鍵標識符。在創建指向CloudF…

kafka整合flume與DStream轉換

一、Kafka整合flume cd /opt/software/flume/conf/ vi flume-kafka.conf a1.sourcesr1 a1.sinksk1 a1.channelsc1 a1.sources.r1.typespooldirt a1.sources.r1.spoolDir/root/flume-kafka a1.sinks.k1.typeorg.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.to…

網絡通訊【QTcpServer、QTcpSocket、QAbstractSocket】

目錄 QTcpServer class簡單描述成員函數和信號 QTcpSocket Class詳細描述成員函數和信號 QAbstractSocket Class詳細描述成員函數和信號成員函數說明文檔 QT實現服務器和客戶端通訊服務器端&#xff1a;通訊流程原代碼 客戶端通信流程原代碼 QTcpServer class header: #includ…

大模型在腎癌診療全流程中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測腎癌術前情況 2.1 基于影像組學的腎癌良惡性及分級預測 2.1.1 MRI 影像組學模型預測腎透明細胞癌分級 2.1.2 CT 影像深度學習模型鑒別腎腫物良惡性及侵襲性 2.2 大模型對手術風…

網絡原理 - 11(HTTP/HTTPS - 2 - 請求)

目錄 HTTP 請求&#xff08;Request&#xff09; 認識 URL URL 基本格式 關于 URL encode 認識方法&#xff08;method&#xff09; 1. GET 方法 2. POST 方法 認識請求“報頭”&#xff08;header&#xff09; Host Content-Length Content-Type User-Agent&…

實現MySQL高可用性:從原理到實踐

目錄 一、概述 1.什么是MySQL高可用 2.方案組成 3.優勢 二、資源清單 三、案例實施 1.修改主機名 2.安裝MySQL數據庫&#xff08;Master1、Master2&#xff09; 3.配置mysql雙主復制 4.安裝haproxy&#xff08;keepalived1、keepalived2&#xff09; 5.安裝keepaliv…

CSS學習筆記8——表格

一、表格 1-1、創建表格 在Word文檔中&#xff0c;如果要創建表格&#xff0c;只需插入表格&#xff0c;然后設定相應的行數和列數即可。然而在HTML網頁中&#xff0c;所有的元素都是通過標簽定義的&#xff0c;要想創建表格&#xff0c;就需要使用與表格相關的標簽。使用標簽…

爬蟲學習筆記(一)

目的 通過編寫程序爬取互聯網上的優質資源 爬蟲必須要使用python嗎 非也~ 編程語言知識工具&#xff0c;抓取到數據才是目的&#xff0c;而大多數爬蟲采用python語言編寫的原因是python的語法比較簡單&#xff0c;python寫爬蟲比較簡單&#xff01;好用&#xff01;而且pyt…