基于Python實現(xiàn)的車牌識別系統(tǒng)
引言
車牌識別技術(shù)的應(yīng)用場景
車牌識別技術(shù)具有廣泛的應(yīng)用場景,其在交通管理、安防監(jiān)控以及智慧城市建設(shè)等領(lǐng)域都發(fā)揮著重要的作用。
- 交通管理:車牌識別技術(shù)在交通管理中起到了至關(guān)重要的作用。通過實時自動識別車輛的車牌號碼,交通管理部門可以準確記錄每輛車的信息,實現(xiàn)違章監(jiān)測和電子收費等功能,提高交通流程的效率和安全性。
- 智能停車系統(tǒng):車牌識別技術(shù)可應(yīng)用于智能停車系統(tǒng)中,通過識別車輛的車牌號碼,實現(xiàn)車輛進出場的自動識別和計費,并提供導(dǎo)航引導(dǎo)服務(wù),簡化停車過程,提升停車管理的便利性和效率。
- 安防監(jiān)控:車牌識別技術(shù)在安防監(jiān)控領(lǐng)域被廣泛使用。通過檢測和識別車輛的車牌信息,可以實現(xiàn)對車輛進出口的實時監(jiān)控和記錄,輔助安保人員對可疑車輛進行追蹤和調(diào)查,提高社會治安維護的效果。
- 物流管理:車牌識別技術(shù)可以應(yīng)用于物流管理中,幫助物流公司實現(xiàn)對運輸車輛的自動識別和追蹤,提高貨物配送的準確性和及時性,優(yōu)化物流運輸過程。
- 智慧城市建設(shè):車牌識別技術(shù)是智慧城市建設(shè)中的重要組成部分。通過大規(guī)模應(yīng)用車牌識別技術(shù),可以實現(xiàn)交通擁堵監(jiān)測與調(diào)控、智能紅綠燈控制、智能化停車管理等功能,為城市交通運行和管理提供更加高效和智能的解決方案。
Python在車牌識別領(lǐng)域的優(yōu)勢
Python在車牌識別領(lǐng)域具有豐富的開源資源、簡潔易讀的語法、跨平臺性、強大的社區(qū)支持以及可擴展性等優(yōu)勢。這些特點使得使用Python進行車牌識別系統(tǒng)的開發(fā)變得更加高效、靈活和方便。
- 豐富的開源庫和工具:Python擁有眾多優(yōu)秀的開源圖像處理和機器學習庫,如OpenCV、Pillow、Scikit-learn等,這些庫提供了豐富的圖像處理和機器學習算法,使得開發(fā)者能夠輕松實現(xiàn)車牌識別系統(tǒng)的各項功能和流程。
- 簡潔易讀的語法:Python語言以其簡潔易讀的語法著稱,這使得開發(fā)和調(diào)試車牌識別系統(tǒng)變得更加高效和便捷。Python的代碼對于初學者和新手來說也更易于理解和掌握,降低了學習和使用門檻。
- 跨平臺性:Python是一種跨平臺的編程語言,在不同操作系統(tǒng)(如Windows、Linux和MacOS)上都能很好地運行。這意味著開發(fā)者可以在不同的環(huán)境中進行車牌識別系統(tǒng)的開發(fā)和部署,提供了更大的靈活性和適應(yīng)性。
- 強大的社區(qū)支持:Python擁有龐大而活躍的開發(fā)者社區(qū),提供了豐富的教程、文檔和示例代碼。無論是初學者還是有經(jīng)驗的開發(fā)者,都可以從社區(qū)中獲取支持和解決問題,加快開發(fā)進程并提升系統(tǒng)性能。
- 可擴展性:Python是一種可擴展的語言,可以集成其他編程語言(如C++)編寫的模塊和庫。對于需要處理大規(guī)模數(shù)據(jù)和復(fù)雜算法的車牌識別系統(tǒng),開發(fā)者可以通過調(diào)用底層C/C++庫,提高系統(tǒng)的運行效率和性能。
車牌識別技術(shù)概述
圖像處理和計算機視覺的基本原理
圖像處理和計算機視覺的基本原理是相互關(guān)聯(lián)和互補的,在車牌識別等應(yīng)用中,常常結(jié)合使用以提取、分析和識別圖像中的車牌信息。這些原理為實現(xiàn)精確、高效的圖像處理和計算機視覺應(yīng)用提供了重要的方法和技術(shù)支持。
圖像處理的基本原理:
- 圖像獲取:通過攝像頭或其他設(shè)備獲取到的圖像數(shù)據(jù)。
- 圖像預(yù)處理:對原始圖像進行去噪、增強、調(diào)整亮度對比度等操作,以優(yōu)化圖像質(zhì)量,方便后續(xù)處理。
- 特征提?。簭膱D像中提取有用的特征信息,如邊緣、角點、紋理等。常用的方法包括Canny邊緣檢測、Harris角點檢測、Gabor濾波等。
- 圖像分割:將圖像分為不同的區(qū)域或?qū)ο?。常見的方法有閾值分割、邊緣檢測、區(qū)域生長等。
- 目標識別與跟蹤:在圖像中識別和跟蹤感興趣的目標或區(qū)域。常用的方法有模板匹配、特征匹配、目標檢測算法(如Haar特征、HOG特征、深度學習)等。
- 圖像重建與合成:根據(jù)已有的圖像信息,重建出完整或高分辨率的圖像,或者通過將多個圖像合成成一幅圖像。
計算機視覺的基本原理:
- 特征提取與描述:從圖像中提取有用的特征并進行描述,如角點、邊緣、紋理等。常見的特征描述算法包括SIFT、SURF、ORB等。
- 物體檢測與識別:在圖像中自動檢測和識別物體。常用的方法有基于特征的分類器(如支持向量機、隨機森林)、級聯(lián)分類器、深度學習(如卷積神經(jīng)網(wǎng)絡(luò))等。
- 三維重建與攝像測量:通過多個視角的圖像,推導(dǎo)出物體的三維結(jié)構(gòu)或重建出三維場景。常用的方法有立體匹配、結(jié)構(gòu)光、視差法、多視幾何等。
- 運動分析與跟蹤:對圖像序列進行運動分析和目標跟蹤。常見的方法有光流法、卡爾曼濾波、粒子濾波等。
- 圖像檢索與分類:根據(jù)圖像的內(nèi)容進行檢索和分類,以實現(xiàn)圖像庫管理和圖像信息的快速檢索。常見的方法有顏色直方圖、局部二值模式、深度學習特征等。
車牌識別的基本流程
車牌識別的基本流程可以分為圖像獲取、預(yù)處理、車牌定位、字符分割、字符識別等步驟,實際應(yīng)用中還需要考慮各種異常情況的處理,如光照、遮擋、車牌變形等因素。同時,不同的算法和技術(shù)在各個步驟中也有差異,需要根據(jù)具體場景和應(yīng)用需求選擇合適的方法和參數(shù)進行調(diào)節(jié)。
常用的車牌識別算法和方法
車牌識別算法和方法有很多種,不同的算法和方法適用于不同的應(yīng)用場景和數(shù)據(jù)集,需要根據(jù)實際需求進行選擇和優(yōu)化,這里簡要介紹幾種常用的:
- 基于顏色特征的車牌定位算法:
該算法通過提取車牌區(qū)域的顏色特征,如藍色、黃色等,然后對圖像進行二值化和形態(tài)學變換,最后選取符合條件的區(qū)域作為車牌區(qū)域。該算法簡單易懂,但對顏色和光照變化敏感。 - 基于深度學習的車牌定位和識別算法:
深度學習方法在圖像處理和計算機視覺領(lǐng)域中得到廣泛應(yīng)用,其基本思想是通過對海量數(shù)據(jù)的學習,自動生成特征表示或者建立模型來實現(xiàn)目標檢測或者識別等任務(wù)。在車牌識別中,可以使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)等深度學習模型實現(xiàn)車牌定位和字符識別。該算法具有較高的識別精度,但需要大量的訓練數(shù)據(jù)和計算資源。 - 基于形態(tài)學變換的車牌字符分割算法:
車牌字符分割是車牌識別中的關(guān)鍵步驟,目的是將車牌上的字符分割開來,方便后續(xù)的字符識別?;谛螒B(tài)學變換的方法是一種常用的字符分割算法,其基本思想是在圖像中使用不同的形態(tài)學結(jié)構(gòu)元素對字符區(qū)域進行膨脹和腐蝕操作,從而得到清晰的字符輪廓,再通過垂直投影點數(shù)或其他特征對字符進行分割。 - 基于SVM和特征提取的字符識別算法:
支持向量機(SVM)是一種常用的分類算法,其可以通過對數(shù)據(jù)進行特征提取和訓練,實現(xiàn)對車牌字符的分類和識別。常用的特征提取算法有灰度共生矩陣(GLCM)、局部二值模式(LBP)等,這些特征主要描述字符的紋理和形狀信息,對于字符的識別具有較高的魯棒性和準確性。
準備工作
安裝和配置Python環(huán)境
安裝和配置Python環(huán)境的步驟如下:
- 下載Python:首先需要從Python官方網(wǎng)站(https://www.python.org)下載Python的安裝包。根據(jù)操作系統(tǒng)選擇對應(yīng)的版本,一般建議下載最新的穩(wěn)定版本。
- 運行安裝程序:雙擊下載的安裝包并運行,會打開Python安裝向?qū)А?/li>
- 選擇安裝選項:在安裝向?qū)е?,可以選擇自定義安裝路徑、添加Python到系統(tǒng)環(huán)境變量等選項。如果不熟悉,可以使用默認選項進行安裝。
- 完成安裝:等待安裝程序完成安裝過程,可能需要一些時間。
- 驗證安裝:安裝完成后,打開命令行工具(如Windows的命令提示符或PowerShell,或者Mac/Linux的終端),輸入以下命令驗證是否成功安裝:
python --version
如果顯示Python的版本號,則說明安裝成功。
- 配置環(huán)境變量(可選):如果在安裝時沒有選擇添加Python到系統(tǒng)環(huán)境變量,可以手動配置。將Python的安裝路徑添加到系統(tǒng)的PATH環(huán)境變量中,這樣就可以在任何位置直接使用python命令。
- 安裝第三方庫(可選):根據(jù)具體需求,可以使用pip工具安裝Python的第三方庫。例如,使用以下命令安裝常用的科學計算庫NumPy:
pip install numpy
數(shù)據(jù)集準備
要基于Python實現(xiàn)車牌識別,首先需要準備訓練和測試所需的數(shù)據(jù)集。
- 收集車牌圖像數(shù)據(jù):收集包含車牌的圖像數(shù)據(jù),可以通過不同的方式獲取,如現(xiàn)場拍攝、公開數(shù)據(jù)集等。確保數(shù)據(jù)集包含多種類型和角度的車牌圖像,以提高算法的魯棒性。
- 數(shù)據(jù)集劃分:將收集到的數(shù)據(jù)集劃分為訓練集和測試集。通常,大部分數(shù)據(jù)用于訓練模型,少量數(shù)據(jù)用于評估模型的性能??梢园凑?0-30或80-20的比例劃分數(shù)據(jù)集,也可以使用交叉驗證等更復(fù)雜的劃分方式。
- 標注數(shù)據(jù):對每張圖像進行標注,將車牌區(qū)域框出來,并提供對應(yīng)的車牌字符標簽??梢允褂脠D像處理工具或?qū)iT的標注工具進行標注。確保標注準確且一致,以便模型學習車牌的位置和字符信息。
- 數(shù)據(jù)增強(可選):對訓練集進行數(shù)據(jù)增強操作,以擴充數(shù)據(jù)集并增加數(shù)據(jù)的多樣性。例如,可以進行旋轉(zhuǎn)、平移、縮放、亮度調(diào)整等操作,以提高模型的泛化能力。
- 數(shù)據(jù)預(yù)處理:對圖像數(shù)據(jù)進行預(yù)處理操作,如調(diào)整大小、歸一化、灰度化等。確保所有圖像的尺寸和格式與模型要求相符。
- 數(shù)據(jù)加載:編寫Python代碼,使用合適的庫(如OpenCV、PIL)加載圖像數(shù)據(jù),并將其轉(zhuǎn)換為模型可接受的輸入格式(如NumPy數(shù)組或張量)。
圖像預(yù)處理
圖像讀取與灰度轉(zhuǎn)換
可以使用Python的OpenCV庫來讀取圖像并進行灰度轉(zhuǎn)換。
import cv2 # 讀取圖像 img = cv2.imread('image.jpg') # 將圖像轉(zhuǎn)換為灰度圖像 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
在代碼中,cv2.imread('image.jpg')
函數(shù)用于讀取名為’image.jpg’的圖像,可以根據(jù)自己的實際情況修改文件名和路徑。cv2.cvtColor()
函數(shù)用于將讀取到的彩色圖像轉(zhuǎn)換為灰度圖像,第一個參數(shù)為原始圖像,第二個參數(shù)為轉(zhuǎn)換方式。cv2.COLOR_BGR2GRAY
表示將BGR色彩空間的圖像轉(zhuǎn)換為灰度圖像。
在灰度圖像中每個像素只有一個值,范圍為0~255,所以輸出的灰度圖像應(yīng)該是單通道的。而且,在進行圖像處理時,最好使用灰度圖像進行處理,因為灰度圖像計算量較小,處理速度較快。
圖像增強與濾波
圖像增強和濾波是圖像處理中常用的技術(shù),可以使用OpenCV庫來實現(xiàn)。
圖像增強:
import cv2 import numpy as np # 讀取圖像 img = cv2.imread('image.jpg') # 增加對比度和亮度 alpha = 1.5 # 對比度增加的倍數(shù) beta = 30 # 亮度增加的值 enhanced_img = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
在代碼中,cv2.convertScaleAbs()
函數(shù)用于增加圖像的對比度和亮度。alpha
參數(shù)表示對比度的倍數(shù),越大對比度越高;beta
參數(shù)表示亮度的增加值,越大亮度越高。
圖像濾波:
import cv2 import numpy as np # 讀取圖像 img = cv2.imread('image.jpg') # 使用均值濾波 kernel_size = (5, 5) # 濾波器大小 filtered_img = cv2.blur(img, kernel_size)
在代碼中,cv2.blur()
函數(shù)用于進行均值濾波。kernel_size
參數(shù)表示濾波器的大小,其中(5, 5)
表示濾波器為5x5大小的方形濾波器。均值濾波通過計算圖像中每個像素周圍鄰域的平均值來實現(xiàn)平滑(模糊)圖像。
邊緣檢測與輪廓提取
邊緣檢測:
import cv2 # 讀取圖像并進行灰度轉(zhuǎn)換 img = cv2.imread('image.jpg') gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用Canny算法進行邊緣檢測 edges = cv2.Canny(gray_img, threshold1=30, threshold2=100)
在代碼中,cv2.Canny()
函數(shù)用于進行邊緣檢測。gray_img
是輸入的灰度圖像,threshold1
和threshold2
是閾值參數(shù),用于控制邊緣檢測的靈敏度。根據(jù)實際情況調(diào)整這兩個閾值以得到合適的邊緣圖像。
輪廓提?。?/strong>
import cv2 # 讀取圖像并進行灰度轉(zhuǎn)換 img = cv2.imread('image.jpg') gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用Canny算法進行邊緣檢測 edges = cv2.Canny(gray_img, threshold1=30, threshold2=100) # 尋找輪廓 contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 繪制輪廓 contour_img = cv2.drawContours(img.copy(), contours, -1, (0, 255, 0), 2)
在代碼中,cv2.findContours()
函數(shù)用于尋找圖像的輪廓。第一個參數(shù)是邊緣圖像,一般使用經(jīng)過邊緣檢測后的圖像作為輸入;第二個參數(shù)是輪廓的檢索模式,cv2.RETR_EXTERNAL
表示只提取最外層的輪廓;第三個參數(shù)是輪廓的近似方法,cv2.CHAIN_APPROX_SIMPLE
表示使用簡化的輪廓表示。函數(shù)返回的contours
是一個包含所有輪廓的列表。
然后,可以使用cv2.drawContours()
函數(shù)將輪廓繪制到原始圖像上,以便可視化。img.copy()
用于創(chuàng)建繪制輪廓的圖像副本,(0, 255, 0)
表示繪制輪廓的顏色,2表示繪制輪廓線的粗細。
對于OpenCV版本4及以上,cv2.findContours()函數(shù)的返回值略有不同,需要對返回值進行修改:
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
字符識別
特征提取與選擇
特征提取和選擇是機器學習和數(shù)據(jù)挖掘領(lǐng)域中的重要步驟,可以通過不同的方法來完成。
特征提?。?/strong>
- 直接提?。褐苯訌脑紨?shù)據(jù)中提取特定的特征。例如,對于圖像數(shù)據(jù)可以使用顏色直方圖、紋理特征或形狀描述符等提取特征。
- 統(tǒng)計特征:通過對數(shù)據(jù)進行統(tǒng)計分析,提取統(tǒng)計特征。例如,平均值、方差、最大值、最小值等。
- 頻域特征:將數(shù)據(jù)轉(zhuǎn)換到頻域,提取頻域特征。常用的方法包括快速傅里葉變換(FFT)和小波變換。
- 基于模型的特征提?。和ㄟ^訓練一個模型來提取特征。例如,使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)的卷積層輸出作為圖像特征。
特征選擇:
- 過濾方法:通過對特征進行評估和排序,選擇與目標變量相關(guān)性高的特征。常用的指標包括互信息、卡方檢驗、相關(guān)系數(shù)等。
- 包裹方法:將特征選擇看作是一個子集選擇的問題,通過嘗試不同的特征子集并評估模型性能來選擇最佳特征子集。常用的方法包括遞歸特征消除(RFE)、遺傳算法等。
- 嵌入方法:將特征選擇嵌入到模型訓練中,在訓練過程中選擇最佳的特征。常用的方法包括L1正則化、決策樹的特征重要性等。
示例代碼,演示使用sklearn庫進行特征提取和選擇:
from sklearn.feature_selection import SelectKBest, chi2 from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline # 假設(shè)有X和y作為輸入數(shù)據(jù)和目標變量 # 創(chuàng)建特征選擇器 feature_selector = SelectKBest(score_func=chi2, k=10) # 創(chuàng)建分類器 classifier = LogisticRegression() # 創(chuàng)建流水線,結(jié)合特征選擇和分類器 pipeline = Pipeline([('selector', feature_selector), ('classifier', classifier)]) # 訓練模型 pipeline.fit(X, y) # 使用選擇好的特征進行預(yù)測 predictions = pipeline.predict(X)
在代碼中,SelectKBest
被用作特征選擇器,chi2
作為評估指標。k參數(shù)表示選擇的特征數(shù)量。然后,通過Pipeline
將特征選擇器和分類器結(jié)合在一起,形成一個流水線,可以直接對數(shù)據(jù)進行訓練和預(yù)測。
分類器的訓練與優(yōu)化
分類器的訓練和優(yōu)化是機器學習中的關(guān)鍵步驟,通過示例代碼,演示使用sklearn庫進行分類器的訓練和優(yōu)化:
from sklearn.model_selection import GridSearchCV from sklearn.ensemble import RandomForestClassifier # 假設(shè)有X和y作為輸入數(shù)據(jù)和目標變量 # 創(chuàng)建分類器 classifier = RandomForestClassifier() # 設(shè)置待調(diào)優(yōu)的參數(shù)范圍 param_grid = { 'n_estimators': [100, 200, 300], 'max_depth': [None, 5, 10], 'min_samples_split': [2, 5, 10] } # 使用GridSearchCV進行參數(shù)優(yōu)化和模型選擇 grid_search = GridSearchCV(classifier, param_grid=param_grid, cv=5) grid_search.fit(X, y) # 輸出最佳參數(shù)和對應(yīng)的模型性能 print("Best Parameters: ", grid_search.best_params_) print("Best Score: ", grid_search.best_score_) # 使用最佳參數(shù)的模型進行訓練和預(yù)測 best_classifier = grid_search.best_estimator_ best_classifier.fit(X, y) predictions = best_classifier.predict(X_new)
在代碼中,創(chuàng)建一個分類器對象RandomForestClassifier()
。然后,定義待調(diào)優(yōu)的參數(shù)范圍param_grid,包含了希望優(yōu)化的參數(shù)及其可能取值的列表。
接下來,使用GridSearchCV
類進行參數(shù)優(yōu)化和模型選擇。cv參數(shù)用于指定交叉驗證的折數(shù),這里選擇了5折交叉驗證。GridSearchCV
會自動遍歷所有參數(shù)組合,并使用交叉驗證評估模型性能。
在調(diào)用fit()
方法進行訓練之后,可以通過best_params_和best_score_
屬性獲取最佳參數(shù)和對應(yīng)的模型性能。
可以使用最佳參數(shù)的模型進行訓練和預(yù)測。best_estimator_
屬性返回了具有最佳參數(shù)的分類器對象。使用該對象的fit()
方法訓練模型,然后可以使用predict()
方法進行預(yù)測。
字符識別實現(xiàn)與性能評估
字符識別是一個常見的機器學習任務(wù),可以使用交叉驗證來更準確地評估模型性能,還可以嘗試不同的特征提取方法、調(diào)整分類器超參數(shù)等來提高性能。
from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.svm import SVC # 假設(shè)有X和y作為輸入數(shù)據(jù)和目標變量 # 將數(shù)據(jù)集劃分為訓練集和測試集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 創(chuàng)建分類器 classifier = SVC() # 訓練模型 classifier.fit(X_train, y_train) # 在測試集上進行預(yù)測 predictions = classifier.predict(X_test) # 計算準確率 accuracy = accuracy_score(y_test, predictions) print("Accuracy: ", accuracy)
在代碼中,首先將數(shù)據(jù)集劃分為訓練集和測試集,其中test_size
參數(shù)用于控制測試集的比例,這里設(shè)置為0.2表示將20%的數(shù)據(jù)作為測試集。
創(chuàng)建一個分類器對象SVC()
,這里選擇了支持向量機作為分類器,你也可以選擇其他的分類器(如決策樹、隨機森林等)。
接下來,使用訓練集調(diào)用fit()方法對模型進行訓練。利用訓練好的模型對測試集進行預(yù)測,并使用accuracy_score()函數(shù)計算分類器在測試集上的準確率,最后,輸出準確率即可評估分類器的性能。
以上就是基于Python實現(xiàn)的車牌識別系統(tǒng)的詳細內(nèi)容,更多關(guān)于Python車牌識別系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django模板獲取field的verbose_name實例
這篇文章主要介紹了Django模板獲取field的verbose_name實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05使用Python進行數(shù)據(jù)清洗和預(yù)處理的實現(xiàn)代碼
Python作為數(shù)據(jù)科學領(lǐng)域的熱門編程語言,提供了豐富的庫和工具來處理和清洗數(shù)據(jù),本文將介紹如何使用Python進行數(shù)據(jù)清洗和預(yù)處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2024-05-05Python爬取奶茶店數(shù)據(jù)分析哪家最好喝以及性價比
這篇文章主要介紹了用Python告訴你奶茶哪家最好喝性價比最高,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-09-09一文帶你學會如何利用Python實現(xiàn)一個三維繪圖系統(tǒng)
tkinter是Python標準庫中自帶的GUI工具,使用十分方便,所以本文旨在帶大家學會如何將matplotlib嵌入到tkinter中并繪制三維繪圖系統(tǒng),感興趣的可以了解下2023-09-09python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中
這篇文章主要介紹了python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02