基于Flask的智能停車場管理系統開發實踐

在現代城市中,停車難已成為一個普遍問題。為了解決這一問題,我開發了一個基于Python Flask框架的智能停車場管理系統。該系統集成了車牌識別、車位狀態監控、收費管理等多項功能,為停車場的智能化管理提供了完整的解決方案。

系統功能概述

?該停車場管理系統具有以下核心功能:

1.
車輛進出管理 :系統支持自動車牌識別和人工錄入兩種方式記錄車輛進出信息。通過集成百度AI的OCR技術,系統能夠準確識別車牌號碼,大大提高了車輛登記的效率和準確性。
2.
車位狀態監控 :系統實時監控所有停車位的占用情況,通過直觀的可視化界面展示車位狀態,幫助管理人員快速了解停車場的使用情況。
3.
智能收費管理 :系統支持靈活的收費規則配置,可以根據不同的時間段、車型等因素設置不同的收費標準,并自動計算停車費用。
4.
用戶權限管理 :系統區分管理員和操作員兩種角色,為不同角色提供相應的功能界面和操作權限,確保系統的安全性和規范性。
5.
數據統計與報表 :系統能夠生成各類統計數據和報表,為停車場的運營決策提供數據支持。


技術架構

系統采用前后端分離的設計模式,主要技術棧包括:

- 前端 :使用HTML、CSS和JavaScript構建用戶界面,結合Bootstrap框架實現響應式設計
- 后端 :基于Python Flask框架開發,提供了RESTful API接口
- 數據庫 :采用SQLite輕量級數據庫存儲車輛記錄、車位信息、收費規則和用戶數據
數據庫設計包括車輛記錄表、停車位表、收費規則表和用戶表四個核心數據表,通過合理的表結構設計確保數據的一致性和完整性。

系統亮點
1.
混合車牌識別技術 :系統采用百度AI OCR和自訓練模型相結合的方式實現車牌識別,既保證了識別的準確性,又提高了系統的魯棒性。
2.
響應式UI設計 :前端界面采用Bootstrap框架,能夠在不同設備上提供良好的用戶體驗。
3.
靈活的收費規則 :支持多種收費模式的配置,滿足不同停車場的運營需求。
4.
完善的安全機制 :通過用戶角色管理和權限控制,確保系統操作的安全性。
部署與使用
系統部署簡單,只需安裝Python環境和相關依賴包即可運行。通過配置百度AI密鑰,可以進一步提升車牌識別的準確率。系統提供了默認的管理員和操作員賬戶,方便快速上手使用。

核心代碼

er': available_space.space_number})else:return jsonify({'success': False,'message': '沒有可用停車位'})@app.route('/api/vehicle_exit', methods=['POST'])
def vehicle_exit():data = request.get_json()plate_number = data.get('plate_number')# Find the vehicle recordvehicle_record = VehicleRecords.query.filter_by(plate_number=plate_number, exit_time=None).first()if vehicle_record:# Update exit timevehicle_record.exit_time = datetime.utcnow()# Calculate fee (simple calculation for demo)duration = (vehicle_record.exit_time - vehicle_record.entry_time).total_seconds() / 3600vehicle_record.fee = max(5.0, duration * 2.0)  # Minimum 5, 2 per hour# Update space statusparking_space = ParkingSpaces.query.get(vehicle_record.parking_space_id)if parking_space:parking_space.status = '空閑'db.session.commit()return jsonify({'success': True,'message': '車輛離開成功','fee': vehicle_record.fee})else:return jsonify({'success': False,'message': '未找到車輛記錄'})@app.route('/api/recognize_plate', methods=['POST'])
def recognize_plate():if 'image' not in request.files:return jsonify({'success': False, 'message': '沒有上傳圖片'})file = request.files['image']if file.filename == '':return jsonify({'success': False, 'message': '沒有選擇圖片'})if file:# Save the uploaded image to a temporary filewith tempfile.NamedTemporaryFile(delete=False, suffix='.jpg') as tmp_file:file.save(tmp_file.name)tmp_filename = tmp_file.nametry:# Read the imageimage = cv2.imread(tmp_filename)# 使用OpenCV的圖像處理技術進行車牌識別# 轉換為灰度圖像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 應用車牌識別的預處理步驟# 高斯模糊blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 形態學操作來增強車牌區域kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))blackhat = cv2.morphologyEx(blurred, cv2.MORPH_BLACKHAT, kernel)# 使用Sobel算子檢測邊緣gradX = cv2.Sobel(blackhat, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)gradX = np.absolute(gradX)(minVal, maxVal) = (np.min(gradX), np.max(gradX))gradX = (255 * ((gradX - minVal) / (maxVal - minVal))).astype("uint8")# 閉運算來連接車牌區域gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, kernel)# 二值化處理thresh = cv2.threshold(gradX, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]# 另一次閉運算thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)# 查找輪廓contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 尋找可能的車牌區域plate_region = Nonefor contour in contours:(x, y, w, h) = cv2.boundingRect(contour)# 車牌的寬高比通常在2到6之間aspect_ratio = w / float(h)# 車牌區域應該足夠大if aspect_ratio > 2 and aspect_ratio < 6 and h > 10 and w > 50:plate_region = image[y:y+h, x:x+w]break# 如果找到了車牌區域,則進行OCRif plate_region is not None:# 對車牌區域進行預處理以提高OCR準確性plate_gray = cv2.cvtColor(plate_region, cv2.COLOR_BGR2GRAY)# 應用閾值處理_, plate_thresh = cv2.threshold(plate_gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 使用OpenCV的文本檢測和識別功能# 這里我們使用簡單的字符分割和模板匹配方法# 注意:這是一個簡化的實現,實際應用中可能需要更復雜的模型# 對車牌圖像進行預處理plate_resized = cv2.resize(plate_thresh, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)plate_blurred = cv2.GaussianBlur(plate_resized, (5, 5), 0)_, plate_binary = cv2.threshold(plate_blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 簡單的字符分割方法# 在實際應用中,這里應該使用更高級的字符分割算法plate_number = recognize_plate_number(plate_thresh, tmp_filename)# 注意:為了完全去除Tesseract依賴,需要實現完整的字符識別算法# 這可能包括模板匹配、機器學習模型等# 由于時間和資源限制,這里提供一個框架示例else:# 如果沒有找到車牌區域,使用原來的圖像處理方法# Apply Gaussian blur to reduce noiseblurred = cv2.GaussianBlur(gray, (5, 5), 0)# Apply adaptive thresholding for better binarizationthresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)# Apply morphological operations to remove noise and fill gapskernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)# 使用OpenCV的文本檢測和識別功能# 對圖像進行預處理以提高識別準確性resized = cv2.resize(morph, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)blurred = cv2.GaussianBlur(resized, (5, 5), 0)_, binary = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 簡單的車牌識別方法# 在實際應用中,這里應該使用更高級的字符識別算法plate_number = recognize_plate_number(binary, tmp_filename)print(plate_number)# 注意:為了完全去除Tesseract依賴,需要實現完整的字符識別算法# 這可能包括模板匹配、機器學習模型等# 由于時間和資源限制,這里提供一個框架示例# Clean up temporary fileif os.path.exists(tmp_filename):os.unlink(tmp_filename)return jsonify({'success': True, 'plate_number': plate_number})except Exception as e:# Clean up temporary fileif os.path.exists(tmp_filename):os.unlink(tmp_filename)return jsonify({'success': False, 'message': f'識別失敗: {str(e)}'})return jsonify({'success': False, 'message': '圖片處理失敗'})

系統截圖

總結


該停車場管理系統通過現代化的技術手段,有效解決了傳統停車場管理中的諸多痛點。系統具有良好的擴展性和維護性,可根據實際需求進行功能擴展和定制開發。未來可以考慮集成更多智能化功能,如車位引導、移動支付等,進一步提升用戶體驗。

通過這個項目的開發實踐,我深刻體會到Flask框架在快速開發Web應用方面的優勢,以及合理架構設計在系統維護中的重要性。希望這個項目能為其他開發者提供有價值的參考。

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

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

相關文章

【C#獲取高精度時間】

在C#中&#xff0c;有幾種方法可以獲取高精度時間&#xff08;高分辨率時間戳&#xff09;&#xff0c;適用于性能測量、計時等需要高精度的場景。以下是幾種常用方法&#xff1a; 1. 使用 Stopwatch 類&#xff08;推薦&#xff09; Stopwatch 類提供了最高精度的時間測量&…

Spring Boot + React 打造現代化高校成績管理系統實戰記錄

作者: 笙囧同學 發布時間: 2025年7月 技術棧: Spring Boot 3.2.3 React 18 TypeScript 華為云GaussDB 項目類型: 全棧Web應用 開發周期: 30天 代碼量: 15000 行 &#x1f4d6; 前言 大家好&#xff0c;我是笙囧同學&#xff01;&#x1f64b;?♂? 作為一名計算機科學與技…

形參表不匹配(BUG)

在您的代碼中&#xff0c;存在兩個主要問題導致"形參表中不匹配"的錯誤&#xff1a;erase() 函數中的成員變量名錯誤iterator erase(iterator pos) {// ...size--; // ? 錯誤&#xff1a;成員變量名為 _size 而非 sizereturn iterator(next); }修正&#xff1a;ite…

Spring循環依賴以及三個級別緩存

Spring循環依賴以及三個級別緩存 什么是循環依賴&#xff1f; 循環依賴&#xff0c;顧名思義&#xff0c;就是指兩個或多個 Spring Bean 之間相互依賴&#xff0c;形成一個閉環。 最常見也是 Spring 能夠“解決”的循環依賴是構造器注入 和 setter 注入 混合或單獨使用時&…

《零基礎入門AI:OpenCV圖像預處理進一步學習》

本文全面講解OpenCV圖像預處理的七大核心技術&#xff08;插值方法、邊緣填充、圖像矯正&#xff08;透視變換&#xff09;、圖像掩膜、ROI切割、圖像添加水印、圖像噪點消除&#xff09;&#xff0c;每個知識點都配有詳細解釋和實用代碼示例&#xff0c;幫助初學者建立系統的圖…

MongoDB的內存和核心數對于運行效率的影響

在 MongoDB 線上生產環境中&#xff0c;CPU&#xff08;核心&#xff09; 和 內存 是兩大關鍵硬件資源&#xff0c;它們在不同的操作場景下發揮著核心作用&#xff0c;共同影響著數據庫的性能、穩定性和擴展性。理解它們的作用場景至關重要&#xff0c;是容量規劃、性能優化和故…

自己的SAPGUI嘗試

為滿足用戶需求&#xff0c;博主做了一個臺賬管理程序&#xff0c;嘗試用自己的程序做GUI&#xff0c;用SAP 系統做數據庫。 運行了半年&#xff0c;程序很nice,用戶每天都在高效的使用&#xff0c;已經有十幾萬的數據。 總結一下這次自己的GUI嘗試&#xff0c;好處是C# WINFOR…

高效處理 JSON 數據:JsonUtil 工具類全方位解析與實戰

在現代軟件開發中,JSON(JavaScript Object Notation)已成為數據交換的“通用語言”——從前后端接口通信到微服務數據交互,從配置文件解析到日志格式化,幾乎所有場景都離不開JSON的處理。然而,原生JSON框架(如FastJSON、Jackson)的API往往需要大量重復代碼,且空指針、…

Python 庫手冊:xmlrpc.client 與 xmlrpc.server 模塊

xmlrpc.client 和 xmlrpc.server 是 Python 標準庫中用于構建基于 XML-RPC 協議的遠程過程調用&#xff08;RPC&#xff09;通信模塊。xmlrpc.client 用于編寫客戶端程序&#xff0c;向遠程服務器發起方法調用。xmlrpc.server 用于編寫服務器端&#xff0c;暴露本地方法供遠程客…

渲染篇(一):從零實現一個“微型React”:Virtual DOM的真面目

渲染篇(一)&#xff1a;從零實現一個“微型React”&#xff1a;Virtual DOM的真面目 引子&#xff1a;前端性能的“永恒之問” 在前面兩章中&#xff0c;我們已經奠定了堅實的架構基礎。我們用“任務調度器”建立了聲明式和模塊化的編程范式&#xff0c;并通過對比MVC等模式論…

SWC 深入全面講解

一、核心功能與原理 1. 高性能編譯 Rust 架構優勢&#xff1a;SWC 基于 Rust 編寫&#xff0c;利用 Rust 的性能和并發性優勢&#xff0c;編譯速度比 Babel 快約 20 倍&#xff0c;比 TypeScript 編譯器更快。并行編譯&#xff1a;支持多線程并行處理&#xff0c;在四核基準測試…

XML Expat Parser:深入解析與高效應用

XML Expat Parser:深入解析與高效應用 引言 XML(可擴展標記語言)作為一種廣泛使用的標記語言,在數據交換、存儲和表示中扮演著重要角色。XML Expat Parser 是一個高性能、可擴展的XML解析庫,廣泛應用于各種編程語言中。本文將深入探討XML Expat Parser 的原理、特性以及…

【Python】自動化GIT提交

在日常開發中&#xff0c;我們經常需要頻繁地向 Git 倉庫提交代碼。雖然 git add、git commit、git push 這幾個命令并不復雜&#xff0c;但重復操作容易出錯&#xff0c;也浪費時間。本文將介紹如何使用 Python 腳本自動化完成 Git 提交流程&#xff0c;讓開發更高效&#xff…

基于Qlearning強化學習的水下無人航行器路徑規劃與避障系統matlab性能仿真

目錄 1.引言 2.算法仿真效果演示 3.數據集格式或算法參數簡介 4.算法涉及理論知識概要 5.參考文獻 6.完整算法代碼文件獲得 1.引言 水下無人航行器 (Autonomous Underwater Vehicle, AUV) 的路徑規劃與避障是海洋探索、資源開發和軍事應用中的關鍵技術。傳統的路徑規劃方…

模塊自由拼裝!Python重構DSSAT作物模塊教程(以雜交水稻為例)

基于過程的作物生長模型&#xff08;Process-based Crop Growth Simulation Model&#xff09;在模擬作物對氣候變化的響應與適應、農田管理優化、作物品種和株型篩選、農業碳中和、農田固碳減排等領域扮演著越來越重要的作用。Decision Support Systems for Agrotechnology Tr…

Java項目接口權限校驗的靈活實現

引言 在Java Web開發中&#xff0c;接口權限校驗是保護系統資源安全的關鍵機制。本文將介紹一種靈活、可配置的接口權限校驗方案&#xff0c;通過注解驅動和攔截器實現&#xff0c;既能保證安全性&#xff0c;又能靈活控制哪些接口需要校驗。 設計思路 實現方案的核心設計要點&…

瀚高DB兼容MySQL if函數

文章目錄環境癥狀問題原因解決方案環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 癥狀 MySQL if函數在瀚高DB當中沒有&#xff0c;源應用在用到if函數時&#xff0c;就會報if函數不存在的錯誤信息。為此&#xff0c;我們需要根據業…

基于深度學習的胸部 X 光圖像肺炎分類系統(六)

目錄 結果指標解讀 一、為什么選擇這些指標&#xff1f; 二、各指標的定義和解讀 1. 準確率&#xff08;Accuracy&#xff09; 2. 損失&#xff08;Loss&#xff09; 3. 精確率&#xff08;Precision&#xff09; 4. 召回率&#xff08;Recall&#xff09; 三、這些指標…

區塊鏈性能優化策略:從理論到實踐

目錄 區塊鏈性能優化策略:從理論到實踐 1. 引言:區塊鏈性能的挑戰 2. 性能評估指標 2.1 核心性能指標 2.2 性能瓶頸分析 3. 分層優化策略 3.1 網絡層優化 3.1.1 Gossip協議改進 3.1.2 網絡分片 3.2 共識層優化 3.2.1 PBFT優化 3.3 數據層優化 3.3.1 狀態樹優化 3.3.2 區塊數據…

【VLLM】open-webui部署模型全流程

目錄 前言 一、租用服務器到服務器連接VScode全流程(可選) 二、下載模型到本地服務器 2.1 進入魔塔社區官網 2.2 選擇下載模型 2.3 執行下載 三、部署VLLM 3.1 參考vllm官網文檔 3.2 查看硬件要求 3.3 安裝vLLM框架 3.4 啟動模型服務 方法1:直接啟動下載的本地模…