版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章OCR文字識別原理與實戰(zhàn)
本章知識點:OCR系統(tǒng)的構(gòu)成及評價指標(biāo)Dbnet網(wǎng)絡(luò)結(jié)構(gòu)CRNN網(wǎng)絡(luò)結(jié)構(gòu)SVTR_Tiny網(wǎng)絡(luò)結(jié)構(gòu)PaddleOCR環(huán)境配置基于PP-OCRv3預(yù)訓(xùn)練模型進行finetune優(yōu)化OCR數(shù)據(jù)集的制作方法PaddleServing服務(wù)器部署檢測和識別模型進行Serving串聯(lián)部署4.1OCR算法簡介1、OCR介紹傳統(tǒng)OCR技術(shù)識別過程可以分為輸入、圖片預(yù)處理、文本檢測、文本識別、輸出等步驟。OCR技術(shù)的關(guān)鍵在于文本檢測和文本識別,而深度學(xué)習(xí)算法可以在這兩方面進行充分的優(yōu)化?;谏疃葘W(xué)習(xí)的文字圖像識別流程:2、百度飛漿框架中的OCR實現(xiàn)算法采用的是典型的兩階段OCR算法,即檢測模型+識別模型的方式。3、PP-OCR算法框架文本檢測模塊:核心是一個基于DB檢測算法的文本檢測模型,檢測出圖像中的文字區(qū)域;檢測框矯正模塊:將檢測到的文本框輸入檢測框矯正模塊,在這一階段,將四點表示的文本框矯正為矩形框,方便后續(xù)進行文本識別。另外會進行文本方向判斷和校正,例如如果判斷文本行是倒立的情況,則會進行轉(zhuǎn)正。該功能通過訓(xùn)練一個文本方向分類器實現(xiàn);文本識別模塊:最后文本識別模塊對矯正后的檢測框進行文本識別,得到每個文本框內(nèi)的文字內(nèi)容,PP-OCR中使用的經(jīng)典文本識別算法是CRNN。
除輸入輸出外,PP-OCR核心框架包含了3個模塊,分別是:文本檢測模塊(TextDetection)、檢測框矯正模塊(DetectionBoxesRectify)、文本識別模塊(TextRecognition)。
文本檢測是通過給定輸入圖像或者視頻,找出文本的區(qū)域,可以是單字符位置或者整個文本行位置。文本識別文本識別是OCR的另一個子任務(wù),目標(biāo)是識別一個固定區(qū)域的文本內(nèi)容,是文本檢測后的下一階段任務(wù),即將識別出來的圖像信息轉(zhuǎn)換為文字信息。
具體地,模型輸入一張定位好的文本行,由文本識別模型預(yù)測出圖片中的文字內(nèi)容和置信度。文本識別的應(yīng)用場景很多,有文檔識別、路標(biāo)識別、車牌識別、工業(yè)編號識別等,根據(jù)實際場景可以把文本識別任務(wù)分為兩大類:規(guī)則文本識別和不規(guī)則文本識別。規(guī)則文本識別:主要指印刷字體、掃描文本等,認為文本大致處在水平線位置。不規(guī)則文本識別:往往出現(xiàn)在自然場景中,且由于文本曲率、方向、變形等方面差異大,文字往往不在水平位置,存在彎曲、遮擋、模糊等問題。
4.2數(shù)顯屏數(shù)據(jù)自動識別系統(tǒng)
4.2.1系統(tǒng)結(jié)構(gòu)設(shè)計
系統(tǒng)中服務(wù)器通過字符識別算法識別相機采集的檢測數(shù)據(jù),其框架如圖所示。系統(tǒng)中字符識別算法采用文本檢測+文本識別的方式。1、文本檢測
文本檢測的任務(wù)是定位出輸入圖像中的文字區(qū)域。近年來學(xué)術(shù)界關(guān)于文本檢測的研究非常豐富,傳統(tǒng)方法是將文本檢測視為目標(biāo)檢測中的一個特定場景,基于通用目標(biāo)檢測算法進行改進適配。目前較為流行的文本檢測算法可以大致分為基于回歸和基于分割的兩大類算法?;诨貧w的算法借鑒通用物體檢測算法,通過設(shè)定anchor回歸檢測框,或者直接做像素回歸?;诜指畹乃惴ㄒ肓薓ask-RCNN,這類算法在各種場景、對各種形狀文本的檢測效果都可以達到一個更高的水平?;诜指畹奈谋緳z測結(jié)果示例如圖所示,算法對圖片中的文字區(qū)域用文本框進行截取。2、文本識別
文本識別的任務(wù)是識別出圖像中的文字內(nèi)容,一般輸入來自于文本檢測得到的文本框截取出的圖像文字區(qū)域。文本識別一般根據(jù)待識別文本形狀分為規(guī)則文本識別和不規(guī)則文本識別兩大類。規(guī)則文本識別算法根據(jù)解碼方式不同可以大致分為CTC和Sequence2Sequence兩種,主要區(qū)別是將序列特征轉(zhuǎn)化為最終識別結(jié)果的處理方式不同,CTC的經(jīng)典算法是CRNN。本案例以PP-OCRv3模型為基礎(chǔ),針對數(shù)顯屏數(shù)據(jù)識別場景進行優(yōu)化。PP-OCRv3是一個兩階段的OCR框架,其中文本檢測算法選用DB算法,如圖所示。文本識別算法選用CRNN,如圖所示。檢測和識別模塊之間添加文本方向分類器,以應(yīng)對不同方向的文本識別。4.2.2DBNet算法實現(xiàn)與解析
DBNet是一個基于分割的文本檢測算法,提出可微分閾值DifferenttiableBinarizationmodule(DBmodule)的方法動態(tài)調(diào)整閾值以區(qū)分文本區(qū)域和背景。
圖中,藍色箭頭描述的是基于分割的普通文本檢測算法的流程,此類方法得到分割結(jié)果之后采用一個固定的閾值得到二值化的分割圖,之后采用諸如像素聚類的啟發(fā)式算法得到文本區(qū)域。上圖箭頭描述的則是DBNet算法的流程,最大的不同在于DBNet有一個閾值圖,通過網(wǎng)絡(luò)預(yù)測圖片每個位置處的閾值,而不是采用一個固定值,能夠更好的分離文本背景與前景。DB算法有以下幾個優(yōu)勢:算法結(jié)構(gòu)簡單,無需繁瑣的后處理在開源數(shù)據(jù)上擁有良好的精度和性能但是標(biāo)準的二值化方法是不可微的,導(dǎo)致網(wǎng)絡(luò)無法端對端訓(xùn)練。為了解決這個問題,DB算法提出了可微二值化(DifferentiableBinarization,DB)??晌⒍祷瘜?biāo)準二值化中的階躍函數(shù)進行了近似,使用如下公式進行代替:在傳統(tǒng)的圖像分割算法中,獲取概率圖后,會使用標(biāo)準二值化(StandardBinarize)方法進行處理,將低于閾值的像素點置0,高于閾值的像素點置1,公式如下:
其中,P是上文中獲取的概率圖,T是上文中獲取的閾值圖,k是增益因子,在實驗中,根據(jù)經(jīng)驗選取為50。標(biāo)準二值化和可微二值化的對比圖如下圖3(a)所示。當(dāng)使用交叉熵損失時,正負樣本的loss分別為l+和l-:對輸入x求偏導(dǎo)則會得到:可以發(fā)現(xiàn),增強因子會放大錯誤預(yù)測的梯度,從而優(yōu)化模型得到更好的結(jié)果。圖(a)中,x<0的部分為正樣本預(yù)測為負樣本的情況,可以看到,增益因子k將梯度進行了放大;而圖(c)中x>0的部分為負樣本預(yù)測為正樣本時,梯度同樣也被放大了。
構(gòu)建DBNet文本檢測模型可以分為以下三個部分:Backbone網(wǎng)絡(luò),負責(zé)提取圖像的特征。FPN網(wǎng)絡(luò),特征金字塔結(jié)構(gòu)增強特征。Head網(wǎng)絡(luò),計算文本區(qū)域概率圖。4.2.3CRNN算法實現(xiàn)與解析
CRNN的網(wǎng)絡(luò)結(jié)構(gòu)體系,從下往上分別為卷積層、遞歸層和轉(zhuǎn)錄層三部分:
1)backbone:
卷積網(wǎng)絡(luò)作為底層的骨干網(wǎng)絡(luò),用于從輸入圖像中提取特征序列。由于conv、max-pooling、elementwise和激活函數(shù)都作用在局部區(qū)域上,所以它們是平移不變的。因此,特征映射的每一列對應(yīng)于原始圖像的一個矩形區(qū)域(稱為感受野),并且這些矩形區(qū)域與它們在特征映射上對應(yīng)的列從左到右的順序相同。由于CNN需要將輸入的圖像縮放到固定的尺寸以滿足其固定的輸入維數(shù),因此它不適合長度變化很大的序列對象。為了更好的支持變長序列,CRNN將backbone最后一層輸出的特征向量送到了RNN層,轉(zhuǎn)換為序列特征。遞歸層,在卷積網(wǎng)絡(luò)的基礎(chǔ)上,構(gòu)建遞歸網(wǎng)絡(luò),將圖像特征轉(zhuǎn)換為序列特征,預(yù)測每個幀的標(biāo)簽分布。RNN具有很強的捕獲序列上下文信息的能力。使用上下文線索進行基于圖像的序列識別比單獨處理每個像素更有效。以場景文本識別為例,寬字符可能需要幾個連續(xù)的幀來充分描述。此外,有些歧義字符在觀察其上下文時更容易區(qū)分。其次,RNN可以將誤差差分反向傳播回卷積層,使網(wǎng)絡(luò)可以統(tǒng)一訓(xùn)練。第三,RNN能夠?qū)θ我忾L度的序列進行操作,解決了文本圖片變長的問題。CRNN使用雙層LSTM作為遞歸層,解決了長序列訓(xùn)練過程中的梯度消失和梯度爆炸問題。2)neck:轉(zhuǎn)錄層,通過全連接網(wǎng)絡(luò)和softmax激活函數(shù),將每幀的預(yù)測轉(zhuǎn)換為最終的標(biāo)簽序列。最后使用CTCLoss在無需序列對齊的情況下,完成CNN和RNN的聯(lián)合訓(xùn)練。CTC有一套特別的合并序列機制,LSTM輸出序列后,需要在時序上分類得到預(yù)測結(jié)果??赡艽嬖诙鄠€時間步對應(yīng)同一個類別,因此需要對相同結(jié)果進行合并。為避免合并本身存在的重復(fù)字符,CTC引入了一個blank字符插入在重復(fù)字符之間。3)head:4.2.4PaddleOCR算法開發(fā)
近年來深度學(xué)習(xí)在很多機器學(xué)習(xí)領(lǐng)域都有著非常出色的表現(xiàn),面對繁多的應(yīng)用場景,百度公司提出的深度學(xué)習(xí)框架Paddle,節(jié)省了大量繁瑣的外圍工作,更聚焦業(yè)務(wù)場景和模型設(shè)計本身。所以,學(xué)會使用開源框架,對于初學(xué)者而言是非常重要的。PaddleOCR環(huán)境配置1.在Windows系統(tǒng)進行PaddleOCR的環(huán)境配置Windows用戶推薦使用Anaconda搭建Python環(huán)境。(1)推薦配置環(huán)境1)PaddlePaddle>=2.1.22)Python3.73)CUDA10.1/CUDA10.24)CUDNN7.6(2)成功配置環(huán)境后安裝PaddleOCR輸入如下指令:pipinstall"paddleocr>=2.0.1"#推薦使用2.0.1+版本(3)命令行使用PaddleOCRPaddleOCR提供了一系列測試圖片,下載并解壓,然后在終端中切換到相應(yīng)目錄。如果不使用提供的測試圖片,可以將下方代碼--image_dir參數(shù)替換為相應(yīng)的測試圖片路徑。cd/path/to/ppocr_imgpaddleocr--image_dir./imgs/11.jpg--use_angle_clstrue--use_gpufalse輸出結(jié)果是一個list,每個item包含了文本框、文字和識別置信度。此外,PaddleOCR也支持輸入pdf文件,并且可以通過指定參數(shù)page_num的數(shù)量來控制推理整個pdf的頁數(shù),默認為0,表示推理所有頁。paddleocr--image_dir./xxx.pdf--use_angle_clstrue--use_gpufalse_num2注:如果單獨使用檢測,則設(shè)置--rec為false。paddleocr--image_dir./imgs/11.jpg--recfalse輸出結(jié)果結(jié)果是一個list,每個item只包含文本框。注:單獨使用識別,則設(shè)置--det為false。paddleocr--image_dir./imgs_words/ch/word_1.jpg--detfalse結(jié)果是一個list,每個item只包含識別結(jié)果和識別置信度。
在AIStudio平臺完成算法搭建
本案例基于PaddleOCR開源套件,以PP-OCRv3模型為基礎(chǔ),針對數(shù)顯屏數(shù)據(jù)識別場景進行優(yōu)化。首先搭建安裝環(huán)境,代碼如下:#首先git官方的PaddleOCR項目,安裝需要的依賴#第一次運行打開該注釋#!gitclone/PaddlePaddle/PaddleOCR.git%cd/home/aistudio/PaddleOCR!pipinstall-rrequirements.txt1.數(shù)據(jù)準備(1)檢測數(shù)據(jù)集
本案例數(shù)據(jù)來源于實際項目中各種計量設(shè)備以及合成的一些其他數(shù)顯屏數(shù)據(jù),包含訓(xùn)練集755張、測試集355張。運行以下代碼準備檢測數(shù)據(jù)集。%cd/home/aistudio/PaddleOCR#在PaddleOCR下創(chuàng)建新的文件夾train_data!mkdirtrain_data#查看當(dāng)前掛載的數(shù)據(jù)集目錄!ls/home/aistudio/data/#解壓掛載的字符檢測數(shù)據(jù)集到指定路徑下!unzip/home/aistudio/data/data127845/icdar2015.zip-dtrain_data檢測數(shù)據(jù)集文件格式如下所示:運行以下代碼查看檢測數(shù)據(jù)集示例圖片。%cd/home/aistudio/PaddleOCR#隨機查看文字檢測數(shù)據(jù)集圖片fromPILimportImageimportmatplotlib.pyplotaspltimportnumpyasnpimportostrain='./train_data/icdar2015/text_localization/test'#從指定目錄中選取一張圖片defget_one_image(train):plt.figure()files=os.listdir(train)n=len(files)ind=np.random.randint(0,n)img_dir=os.path.join(train,files[ind])image=Image.open(img_dir)plt.imshow(image)plt.show()image=image.resize([208,208])#get_one_image(train)
(2)識別數(shù)據(jù)集識別數(shù)據(jù)集包括設(shè)備采集以及在網(wǎng)上搜集的一些其他數(shù)據(jù),其中訓(xùn)練集19912張,測試集4099張,運行以下代碼準備識別數(shù)據(jù)集。%cd/home/aistudio/PaddleOCR#解壓掛載的數(shù)據(jù)集到指定路徑下!unzip/home/aistudio/data/data128714/ic15_data.zip-dtrain_data運行以下命令查看識別數(shù)據(jù)集圖片示例:%cd/home/aistudio/PaddleOCR#隨機查看文字識別數(shù)據(jù)集圖片fromPILimportImageimportmatplotlib.pyplotaspltimportnumpyasnpimportostrain='./train_data/ic15_data/train'#從指定目錄中選取一張圖片defget_one_image(train):plt.figure()files=os.listdir(train)n=len(files)ind=np.random.randint(0,n)img_dir=os.path.join(train,files[ind])image=Image.open(img_dir)plt.imshow(image)plt.show()image=image.resize([208,208])#get_one_image(train)
檢測算法優(yōu)化
本部分基于PP-OCRv3檢測模型進行優(yōu)化,該模型的學(xué)生模型作為base模型,為了提升模型精度進行了以下4種優(yōu)化:l基于PP-OCRv3檢測預(yù)訓(xùn)練模型進行cml優(yōu)化l基于PP-OCRv3檢測的學(xué)生模型進行finetune優(yōu)化l基于PP-OCRv3檢測的教師模型進行finetune優(yōu)化l基于finetune好的學(xué)生和教師模型進行cml優(yōu)化
優(yōu)化前,首先需要下載PP-OCRv3檢測預(yù)訓(xùn)練模型,代碼如下:#跳轉(zhuǎn)到指定路徑%cd/home/aistudio/PaddleOCR#使用該指令下載需要的預(yù)訓(xùn)練模型!wget-P./pretrained_models//PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar#解壓預(yù)訓(xùn)練模型文件!tar-xf./pretrained_models/ch_PP-OCRv3_det_distill_train.tar-Cpretrained_models
訓(xùn)練之前,可以用以下指令評估預(yù)先訓(xùn)練模型的效果:%cd/home/aistudio/PaddleOCR#評估預(yù)訓(xùn)練模型!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model="./pretrained_models/ch_PP-OCRv3_det_distill_train/best_accuracy"
l基于PP-OCRv3檢測預(yù)訓(xùn)練模型進行cml優(yōu)化修改配置文件使用configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml,主要修改訓(xùn)練輪數(shù)和學(xué)習(xí)率參相關(guān)參數(shù),設(shè)置預(yù)訓(xùn)練模型路徑,設(shè)置數(shù)據(jù)集路徑。另外,batch_size可根據(jù)自己機器顯存大小進行調(diào)整。具體修改如下幾個地方:
開始訓(xùn)練使用上面修改的配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml,訓(xùn)練命令如下:%cd/home/aistudio/PaddleOCR#開始訓(xùn)練模型!pythontools/train.py-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml-oGlobal.pretrained_model=./pretrained_models/ch_PP-OCRv3_det_distill_train/best_accuracy訓(xùn)練后,進行效果評估,評估代碼如下:!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det/best_accuracy"
l基于PP-OCRv3檢測的學(xué)生模型進行finetune優(yōu)化修改配置文件使用configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml,主要修改訓(xùn)練輪數(shù)和學(xué)習(xí)率等相關(guān)參數(shù),設(shè)置預(yù)訓(xùn)練模型路徑、數(shù)據(jù)集路徑。另外,batch_size可根據(jù)自己機器顯存大小進行調(diào)整。具體修改如下幾個地方:
開始訓(xùn)練使用上面修改的配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml,訓(xùn)練命令如下:%cd/home/aistudio/PaddleOCR!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml\-oGlobal.pretrained_model=./pretrained_models/ch_PP-OCRv3_det_distill_train/student訓(xùn)練后,進行效果評估,評估代碼如下:!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det_student/best_accuracy"
l基于PP-OCRv3檢測的教師模型進行finetune優(yōu)化首先需要從提供的預(yù)訓(xùn)練模型best_accuracy.pdparams中提取teacher參數(shù),組合成適合協(xié)作指標(biāo)學(xué)習(xí)訓(xùn)練的初始化模型,提取代碼如下。%cd/home/aistudio/PaddleOCR/pretrained_models/#transformteacherparamsinbest_accuracy.pdparamsintoteacher_dml.paramersimportpaddle#loadpretrainedmodelall_params=\paddle.load("ch_PP-OCRv3_det_distill_train/best_accuracy.pdparams")#print(all_params.keys())#keepteacherparamst_params={key[len("Teacher."):]:all_params[key]\forkeyinall_paramsif"Teacher."inkey}#print(t_params.keys())s_arams={"Student."+key:t_params[key]forkeyint_params}s2_params={"Student2."+key:t_params[key]forkeyint_params}s_params={**s_params,**s2_params}#print(s_params.keys())paddle.save(s_params,\"ch_PP-OCRv3_det_distill_train/teacher_dml.pdparams")
修改配置文件訓(xùn)練前需要修改配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml,主要修改訓(xùn)練輪數(shù)和學(xué)習(xí)率等相關(guān)參數(shù),設(shè)置預(yù)訓(xùn)練模型路徑、數(shù)據(jù)集路徑等。另外,batch_size可根據(jù)自己機器顯存大小進行調(diào)整。具體修改的參數(shù)如下:
開始訓(xùn)練使用上面修改的配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml,訓(xùn)練命令如下:%cd/home/aistudio/PaddleOCR!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml-oGlobal.pretrained_model=./pretrained_models/ch_PP-OCRv3_det_distill_train/teacher_dml訓(xùn)練后,進行效果評估,評估代碼如下:!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det_teacher/best_accuracy"
基于finetune好的學(xué)生和教師模型進行cml優(yōu)化需要從之前訓(xùn)練得到的best_accuracy.pdparams中提取各自代表student和teacher的參數(shù),組合成適合cml訓(xùn)練的初始化模型,提取代碼如書中代碼。使用上面修改的配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml進行最終模型訓(xùn)練,訓(xùn)練代碼如下。%cd/home/aistudio/PaddleOCR!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model=./pretrained_models/ch_PP-OCRv3_det_distill_train/teacher_cml_studentGlobal.save_model_dir=./output/ch_PP-OCR_v3_det_finetune/訓(xùn)練后,進行效果評估,評估代碼如下。!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det_finetune/best_accuracy"
(1)模型導(dǎo)出導(dǎo)出代碼如下。%cd/home/aistudio/PaddleOCR#轉(zhuǎn)化為推理模型!pythontools/export_model.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model=./output/ch_PP-OCR_v3_det_finetune/best_accuracy\-oGlobal.save_inference_dir="./inference/det_ppocrv3"模型推理訓(xùn)練完成后,可以將訓(xùn)練模型轉(zhuǎn)換成inference模型。inference模型會額外保存模型的結(jié)構(gòu)信息,在預(yù)測部署、加速推理上性能優(yōu)越、靈活方便,適合于實際系統(tǒng)集成。
修改配置文件訓(xùn)練前需要修改配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml,主要修改訓(xùn)練輪數(shù)和學(xué)習(xí)率等相關(guān)參數(shù),設(shè)置預(yù)訓(xùn)練模型路徑、數(shù)據(jù)集路徑等。另外,batch_size可根據(jù)自己機器顯存大小進行調(diào)整。具體修改的參數(shù)如下:
(2)模型推理導(dǎo)出模型后,可以使用如下代碼進行推理預(yù)測。%cd/home/aistudio/PaddleOCR#推理預(yù)測!pythontools/infer/predict_det.py--image_dir="train_data/icdar2015/text_localization/test/1.jpg"--det_model_dir="./inference/det_ppocrv3/Student"
識別算法優(yōu)化首先需要下載解壓預(yù)訓(xùn)練模型,代碼如下。%cd/home/aistudio/PaddleOCR#使用該指令下載需要的預(yù)訓(xùn)練模型!wget-P./pretrained_models//PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar#解壓預(yù)訓(xùn)練模型文件!tar-xf./pretrained_models/ch_PP-OCRv3_rec_train.tar-Cpretrained_models
在訓(xùn)練之前,可以使用如下代碼評估預(yù)訓(xùn)練模型的效果。%cd/home/aistudio/PaddleOCR#評估預(yù)訓(xùn)練模型!pythontools/eval.py\ -cconfigs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml\-oGlobal.pretrained_model="./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy"
1.訓(xùn)練識別模型修改識別模型配置文件configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,主要修改訓(xùn)練輪數(shù)和學(xué)習(xí)率等相關(guān)參數(shù),設(shè)置預(yù)訓(xùn)練模型路徑、數(shù)據(jù)集路徑等。具體修改的參數(shù)如下:使用上面修改好的配置文件configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml進行訓(xùn)練,訓(xùn)練代碼如下。%cd/home/aistudio/PaddleOCR#開始訓(xùn)練識別模型!pythontools/train.py\-cconfigs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml訓(xùn)練完成后,可以對訓(xùn)練模型中最好的模型進行測試評估,評估代碼如下。%cd/home/aistudio/PaddleOCR#評估finetune效果!pythontools/eval.py\-cconfigs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml\-oGlobal.checkpoints="./output/ch_PP-OCR_v3_rec/best_accuracy"
2.模型推理訓(xùn)練完成后,可以將訓(xùn)練模型轉(zhuǎn)換成inference模型。首先將模型導(dǎo)出,導(dǎo)出代碼如下。%cd/home/aistudio/PaddleOCR#轉(zhuǎn)化為推理模型!pythontools/export_model.py\-cconfigs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy"\Global.save_inference_dir="./inference/rec_ppocrv3/"然后使用如下代碼進行模型推理預(yù)測。%cd/home/aistudio/PaddleOCR#推理預(yù)測!pythontools/infer/predict_rec.py\--image_dir="train_data/ic15_data/test/1_crop_0.jpg"\--rec_model_dir="./inference/rec_ppocrv3/Student"推理結(jié)果如下:
基于Python引擎,將上面訓(xùn)練好的檢測和識別模型進行系統(tǒng)串聯(lián)測試,代碼如下。#串聯(lián)測試!python3tools/infer/predict_system.py\--image_dir="./train_data/icdar2015/text_localization/test/1.jpg"\--det_model_dir="./inference/det_ppocrv3/Student"\--rec_model_dir="./inference/rec_ppocrv3/Student"測試結(jié)果保存在./inference_results/目錄下,可以用如下代碼進行可視化。%cd/home/aistudio/PaddleOCR#顯示結(jié)果importmatplotlib.pyplotaspltfromPILimportImageimg_path="./inference_results/142.jpg"img=Image.open(img_path)plt.figure("test_img",figsize=(30,30))plt.imshow(img)plt.show()系統(tǒng)串聯(lián)
可視化結(jié)果如圖下面代碼可獲取key-value信息,可以基于啟發(fā)式規(guī)則,將識別結(jié)果與關(guān)鍵字庫進行匹配。如果匹配上了,則取該字段為key,后面一個字段為value。代碼如下:
defpostprocess(rec_res):keys=["型號","廠家","版本號","檢定校準分類","計量器具編號","煙塵流量","累積體積","煙氣溫度","動壓","靜壓","時間","試驗臺編號","預(yù)測流速","全壓","煙溫","流速","工況流量","標(biāo)桿流量","煙塵直讀嘴","煙塵采樣嘴","大氣壓","計前溫度","計前壓力","干球溫度","濕球溫度","流量","含濕量"]key_value=[]iflen(rec_res)>1:foriinrange(len(rec_res)-1):rec_str,_=rec_res[i]forkeyinkeys:ifrec_strinkey:key_value.append([rec_str,rec_res[i+1][0]])breakreturnkey_valuekey_value=postprocess(filter_rec_res)4.3芯片表面序列碼識別系統(tǒng)014.3.1OCR算法實現(xiàn)4.3.1OCR算法實現(xiàn)1、圖片預(yù)處理系統(tǒng)采集的圖像受環(huán)境光線不均勻、光源不穩(wěn)定、檢測臺抖動等問題的影響,會導(dǎo)致圖像質(zhì)量下降,出現(xiàn)圖像噪聲,給檢測和識別造成很大的干擾。因此,在檢測和識別操作前必須對圖片進行預(yù)處理。系統(tǒng)采用的圖片預(yù)處理方法包括以下:(1)雙邊濾波雙邊濾波同時考慮被濾波像素點的空域信息和值域信息,設(shè)置好參數(shù)坐標(biāo)空間的標(biāo)注方差,能夠達到保護字符邊緣并且去除噪聲的效果。(2)形態(tài)學(xué)處理利用形態(tài)學(xué)中的開處理操作,可以有效減弱字符周圍一些斑點、輕微磨損造成的不規(guī)則形狀的干擾。利用閉處理操作,填充字符中的斑點或不飽滿的字符。2.序列碼檢測方案序列碼檢測算法使用Resnet18作為輕量型骨干網(wǎng)絡(luò),利用深層神經(jīng)網(wǎng)絡(luò)提取更抽象的特征。頸部網(wǎng)絡(luò)采用特征金字塔結(jié)構(gòu),對多尺度的特征圖進行特征融合,將高層的語義信息與底層的細粒度信息融合。在感知圖像序列碼區(qū)域分布的同時,也保證了對序列碼區(qū)域邊界的精細檢測。將頸部網(wǎng)絡(luò)產(chǎn)生的特征圖進行級聯(lián),輸出融合特征圖,然后分別產(chǎn)生概率圖和閾值圖。后處理部分根據(jù)概率圖用固定閾值生成二值圖,確定最終的序列碼區(qū)域邊框。3.序列碼識別方案CRNN(ConvolutionalRecurrentNeuralNetwork)算法,利用新的神經(jīng)網(wǎng)絡(luò)架構(gòu),將特征提取、序列建模和字符轉(zhuǎn)錄集成到統(tǒng)一的框架中。該算法可以靈活地處理任意長度的序列,不涉及字符級的標(biāo)注和分割,提高了識別的精度和速度,網(wǎng)絡(luò)結(jié)構(gòu)圖如圖。SVTR_LCNet針對文本識別任務(wù),將基于Transformer的SVTR網(wǎng)絡(luò)和輕量級CNN網(wǎng)絡(luò)PP-LCNet融合的一種輕量級文本識別網(wǎng)絡(luò)。使用該網(wǎng)絡(luò),預(yù)測速度優(yōu)于PP-OCRv2的識別模型20%,但是由于沒有采用蒸餾策略,該識別模型效果略差。024.3.2PaddleOCR算法開發(fā)1.字符檢測部分優(yōu)化模型策略:在優(yōu)化過程中我們主要使用了兩個蒸餾策略互學(xué)習(xí)蒸餾方法(DeepMutualLearning—DML)和協(xié)同互學(xué)習(xí)文本檢測方法(CollaborativeMutualLearning—CML)。DML通過兩個結(jié)構(gòu)相同的模型互相學(xué)習(xí),原理如圖所示CML的核心思想結(jié)合了傳統(tǒng)的Teacher指導(dǎo)Student的標(biāo)準蒸餾與Students網(wǎng)絡(luò)之間的DML互學(xué)習(xí),可以讓Students網(wǎng)絡(luò)互學(xué)習(xí)的同時,Teacher網(wǎng)絡(luò)予以指導(dǎo),原理如圖所示。1.字符檢測部分本案例的字符檢測算法采用基于分割的DB算法,它對不同形狀的文本檢測效果都比較好,分為以下步驟:(1)準備字符檢測數(shù)據(jù)集(2)檢測模型訓(xùn)練及評估(3)模型推理1.準備檢測數(shù)據(jù)集#1.在PaddleOCR下創(chuàng)建新的文件夾train_data,創(chuàng)建一次就可以%cdPaddleOCR!mkdirtrain_data#2.查看當(dāng)前掛載的數(shù)據(jù)集目錄!ls/home/aistudio/data/#3.解壓掛載的字符檢測數(shù)據(jù)集到指定路徑下!unzip/home/aistudio/data/data180690/icdar2015.zip-dtrain_data
2、檢測模型訓(xùn)練#1.使用該指令下載需要的預(yù)訓(xùn)練模型!wget-P./pretrained_models//PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar#2.解壓預(yù)訓(xùn)練模型文件!tar-xf./pretrained_models/ch_PP-OCRv3_det_distill_train.tar-Cpretrained_models#評估預(yù)訓(xùn)練模型!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model="./pretrained_models/ch_PP-\OCRv3_det_distill_train/best_accuracy"
使用訓(xùn)練好的模型進行評估,評估結(jié)果指標(biāo)如以下表格所示:
上圖評估結(jié)果均是在1500張圖片(1200張訓(xùn)練集,300張測試集)上訓(xùn)練、評估得到,本文的數(shù)據(jù)集有所差異,因此得到的指標(biāo)也有相應(yīng)差異。直接使用預(yù)訓(xùn)練模型的Hmeans并不是很高,只有63%,不能直接進行使用,所以接下來進行模型優(yōu)化。
首先基于PP-OCRv3檢測的學(xué)生模型進行優(yōu)化,使用的配置文件是:configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml,代碼如下:#迭代次數(shù)epoch_num:200#加載預(yù)訓(xùn)練模型pretrained_model:/home/aistudio/PaddleOCR/pretrained_models/ch_PPOCRv3_det_distill_train/student#模型保存路徑save_model_dir:./output/ch_PP-OCR_V3_det_student/#開啟可視化use_visualdl:true#修改學(xué)習(xí)率learning_rate:0.00001#batch_size_per_card可根據(jù)自己服務(wù)器配置進行設(shè)置#開始訓(xùn)練!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml#進行評估!pythontools/eval.py-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml-oGlobal.pretrained_model="/output/ch_PP-OCR_V3_det_student/best_accuracy"評估結(jié)果如圖所示??梢钥吹骄入m然提升了8%,但還是達不到使用要求。繼續(xù)基于PP-OCRv3檢測的教師模型進行fintune優(yōu)化。需要先從提供的預(yù)訓(xùn)練模型best_accuracy.pdparams中提取teacher參數(shù),組合成適合dml訓(xùn)練的初始化模型,代碼如下:%cdpretrained_modelsimportpaddle#加載預(yù)訓(xùn)練模型all_params=paddle.load("ch_PPOCRv3_det_distill_train/best_accuracy.pdparams")#提取教師參數(shù)t_params={key[len("Teacher."):]:all_params[key]forkeyinall_paramsif"Teacher."inkey}#print(t_params.keys())#提取學(xué)生參數(shù)s_params={"Student."+key:t_params[key]forkeyint_params}s2_params={"Student2."+key:t_params[key]forkeyint_params}s_params={**s_params,**s2_params}#print(s_params.keys())#保存教師參數(shù)paddle.save(s_params,"ch_PPOCRv3_det_distill_train/teacher_dml.pdparams")利用DML蒸餾策略,繼續(xù)進行優(yōu)化configs/det/ch_PP-OCRv3/ch_PPOCRv3_det_dml.yml,代碼如下:主要修改以下參數(shù):#迭代次數(shù)epoch_num:200#加載預(yù)訓(xùn)練模型pretrained_model:/home/aistudio/PaddleOCR/pretrained_models/ch_PPOCRv3_det_distill_train/teacher_dml#模型保存路徑save_model_dir:./output/ch_PP-OCR_v3_det_teacher/#開啟可視化use_visualdl:true#修改學(xué)習(xí)率learning_rate:0.00001#batch_size_per_card可根據(jù)自己服務(wù)器配置進行設(shè)置#%cd..#開始訓(xùn)練!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PPOCRv3_det_dml.yml!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml\-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det_teacher/best_accuracy"
運行結(jié)果如圖,可以看到精度雖然提升到了81%,但是由于teacher模型較大,因此需要進一步采用cml策略進行訓(xùn)練繼續(xù)優(yōu)化?;趂intune好的學(xué)生和教師模型進行cml優(yōu)化,從前面訓(xùn)練的ch_PP-OCR_v3_det_student和ch_PP-OCR_v3_det_teacher的best_accuracy.pdparams中提取各自代表student和teacher的參數(shù),組合成適合cml訓(xùn)練的初始化模型。代碼如下:#transformteacherparamsandstudentparametersintocmlmodelimportpaddleall_params=paddle.load("./pretrained_models/ch_PP-OCRv3_det_distill_train/best_accuracy.pdparams")#print(all_params.keys())t_params=paddle.load("./output/ch_PP-OCR_v3_det_teacher/best_accuracy.pdparams")#print(t_params.keys())s_params=paddle.load("/home/aistudio/PaddleOCR/output/ch_PP-OCR_V3_det_student/best_accuracy.pdparams")#print(s_params.keys())forkeyinall_params:#teacherisOKif"Teacher."inkey:new_key=key.replace("Teacher","Student")#print("{}>>{}\n".format(key,new_key))assertall_params[key].shape==t_params[new_key].shapeall_params[key]=t_params[new_key]if"Student."inkey:new_key=key.replace("Student.","")#print("{}>>{}\n".format(key,new_key))assertall_params[key].shape==s_params[new_key].shapeall_params[key]=s_params[new_key]if"Student2."inkey:new_key=key.replace("Student2.","")#print("{}>>{}\n".format(key,new_key))assertall_params[key].shape==s_params[new_key].shapeall_params[key]=s_params[new_key]paddle.save(all_params,"./pretrained_models/ch_PP-OCRv3_det_distill_train/teacher_cml_student.pdparams")使用配置文件configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml修改以下參數(shù);epoch_num:200save_model_dir:./output/ch_PPOCR_v3_det_finetune/pretrained_model:./pretrained_models/ch_PPOCRv3_det_distill_train/teacher_cml_studentuse_visualdl:true,learning_rate:0.0001#開始訓(xùn)練!pythontools/train.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml#模型評估!pythontools/eval.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml-oGlobal.pretrained_model="./output/ch_PP-OCR_v3_det_finetune/best_accuracy"3、模型推理訓(xùn)練完成后,將訓(xùn)練好的模型轉(zhuǎn)換成推理模型。推理模型會額外保存模型的結(jié)構(gòu)信息,在預(yù)測部署、加速推理上性能優(yōu)越、靈活方便,適合于實際系統(tǒng)集成。(1)模型導(dǎo)出代碼如下:#轉(zhuǎn)化為推理模型!pythontools/export_model.py\-cconfigs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml\-oGlobal.pretrained_model=./output/ch_PP-OCR_v3_det_finetune/best_accuracy\-oGlobal.save_inference_dir="./inference/det"(2)模型測試通過運行上面代碼轉(zhuǎn)換為推理模型后,使用圖片進行測試。為了保證模型的泛化性,需要用幾張訓(xùn)練數(shù)據(jù)集沒出現(xiàn)過的圖片進行測試,代碼如下:%cdPaddleOCR#推理預(yù)測!pythontools/infer/predict_det.py--image_dir="/home/aistudio/test"--det_model_dir="./inference/det/Student"#顯示檢測結(jié)果importmatplotlib.pyplotaspltfromPILimportImage測試結(jié)果如圖:1.字符識別部分
字符識別的任務(wù)是識別出圖像中的字符內(nèi)容,一般輸入來自于文本檢測得到的文本框截取出的圖像文字區(qū)域。文本識別一般可以根據(jù)待識別文本形狀分為規(guī)則文本識別和不規(guī)則文本識別兩大類。本案例使用的字符識別算法是優(yōu)化的SVTR算法,分為以下步驟:
(1)準備字符識別數(shù)據(jù)集
(2)準備字典
(3)利用TextRender合成圖片
(4)識別模型訓(xùn)練
(5)模型推理1、準備數(shù)據(jù)集
字符識別數(shù)據(jù)集數(shù)據(jù)來源于實際項目以及在網(wǎng)上搜集的一些其他數(shù)據(jù),訓(xùn)練集19912張,測試集4099張。代碼如下:%cd~#解壓掛載的數(shù)據(jù)集到指定路徑下!unzip/home/aistudio/data/data128714/ic15_data.zip\-dtrain_data#隨機查看文字檢測數(shù)據(jù)集圖片fromPILimportImageimportmatplotlib.pyplotaspltimportnumpyasnpimportostrain='/home/aistudio/data/ic15_data/chip'
2、準備字典根據(jù)我們需要識別的內(nèi)容制作字典。本案例需要識別的字符包括:0--9,A—Z,a--z以及一些符號("#()*+-./:)。注:由于數(shù)據(jù)集的數(shù)量沒有特別多,數(shù)據(jù)集沒有出現(xiàn)的字符需要進行手工添加。代碼如下:#準備字典importcodecsclass_set=set()lines=[]file=open("/home/aistudio/data/ic15_data/label.txt","r",encoding="utf-8")#待轉(zhuǎn)換文檔,這里我們使用的是數(shù)據(jù)集的標(biāo)簽文件。foriinfile:a=i.strip('\n').split('\t')[-1]lines.append(a)file.closeforlineinlines:foreinline:class_set.add(e)class_list=sorted(list(class_set))print("classnum:{0}".format(len(class_list)))withcodecs.open("/home/aistudio/PaddleOCR/ppocr/utils/new_dict.txt","w",encoding='utf-8')aslabel_list:forid,cinenumerate(class_list):label_list.write("{0}\n".format(c))3.利用TextRender合成圖片
訓(xùn)練數(shù)據(jù)的數(shù)量和需要解決問題的復(fù)雜度有關(guān),難度越大,精度要求越高,則數(shù)據(jù)集需求越大。注:訓(xùn)練字符識別模型要想達到比較好的結(jié)果必須保證每個字符出現(xiàn)在數(shù)據(jù)集中的次數(shù)必須足夠(例如200次),才能保證基本的識別效果。由于字典中的字符出現(xiàn)在數(shù)據(jù)集中的次數(shù)不均勻。所以這里使用TextRender工具合成一批數(shù)據(jù)。(1)準備TextRender環(huán)境代碼如下:#1.返回根目錄%cd~#克隆text_renderer!gitclone/wowowoll/text_renderer.git#3.安裝text_renderer的依賴!pipinstall-rtext_renderer/requirements.txt
(2)修改配置文件
configs文件夾中有兩個文件,分別是default.yaml和test.yaml。配置文件中主要是一些文字特效,包括:透視變換、隨機裁剪、彎曲、lightborder字邊緣發(fā)亮(文字筆畫外層有一層白色)、Darkborder(文字筆畫外層有一層黑色)、隨機字符空白(大)、字符間距變大、隨機字符空白(?。⒆址g距變小、中間線(類似刪除線)、表格線、下劃線、浮雕、反色(顏色相反)、blur模糊、文本顏色、線顏色等,如圖所示。可以通過下行代碼生成圖片:!python3/home/aistudio/text_renderer/main.py--help4、識別模型訓(xùn)練
本案例由于待識別的字符都是沒有中文,所以使用的是英文量化后的模型en_PP-OCRv3_rec。訓(xùn)練代碼如下:%cdPaddleOCR#使用該指令下載需要的預(yù)訓(xùn)練模型!wget-P./pretrained_models//PP-\OCRv3/english/en_PP-OCRv3_rec_slim_train.tar#解壓預(yù)訓(xùn)練模型文件!tar-xf./pretrained_models/en_PP-OCRv3_rec_slim_train.tar\-Cpretrained_models#評估預(yù)訓(xùn)練模型,由于參數(shù)沒有對齊,acc為零,我們直接進行訓(xùn)練!pythontools/eval.py\-c./configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml\-oGlobal.pretrained_model="./pretrained_models\/en_PP-OCRv3_rec_slim_train/best_accuracy"(2)優(yōu)化預(yù)訓(xùn)練模型前期工作已經(jīng)準備好了,這里只需要進行配置文件的修改即可,這里對應(yīng)的配置文件為PP-OCRv3/en_PP-OCRv3_rec.yml,主要包括以下修改內(nèi)容及代碼如下:epoch_num:500save_epoch_step:100pretrained_model:./pretrained_models/en_PP-OCRv3_rec_slim_train/best_accuracydisort:trueuse_visualdl:truecharacter_dict_path:ppocr/utils/new_dict.txtmax_text_length:&max_text_length40learning_rate:0.0002Train:data_dir:/home/aistudio/PaddleOCR/train_data/ic15_data/chiplabel_file_list:/home/aistudio/PaddleOCR/train_data/ic15_data/train_list.txtbatch_size_per_card:64Eval:data_dir:/home/aistudio/PaddleOCR/train_data/ic15_data/chiplabel_file_list:/home/aistudio/PaddleOCR/train_data/ic15_data/test_list.txtbatch_size_per_card:64訓(xùn)練代碼:!pythontools/train.py\-cconfigs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml通過可視化功能,可以看到訓(xùn)練時的記錄,如圖所示。acc和loss曲線(2)優(yōu)化預(yù)訓(xùn)練模型
模型評估代碼如下:#評估finetune效果!pythontools/eval.py\-cconfigs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml\-oGlobal.checkpoints="./output/v3_en_rec/best_accuracy"評估結(jié)果如圖所示,可以看到有些過擬合了。5、模型推理同樣,我們將訓(xùn)練好的模型轉(zhuǎn)換為推理模型,代碼如下。(1)模型導(dǎo)出#轉(zhuǎn)化為推理模型!pythontools/export_model.py\-cconfigs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml\-oGlobal.pretrained_model="./output/v3_en_rec/best_accuracy"\\Global.save_inference_dir="./inference/rec_ppocrv3/"5、模型推理(2)模型測試注:在使用predict_rec.py進行推理的時候,需要修改/home/aistudio/PaddleOCR/tools/infer/utility.py中的字典為我們訓(xùn)練模型使用的字典:parser.add_argument("--rec_char_dict_path",type=str,default="ppocr/utils/new_dict.txt")#推理預(yù)測!pythontools/infer/predict_rec.py\--image_dir="/home/aistudio/test1"\--rec_model_dir="./inference/rec_ppocrv3"推理結(jié)果:[2022/12/0522:04:56]ppocrINFO:InPP-OCRv3,rec_image_shapeparameterdefaultsto'3,48,320',ifyouareusingrecognitionmodelwithPP-OCRv2oranolderversion,pleaseset--rec_image_shape='3,32,320[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/1.jpg:('DS90LV047A',0.9876775741577148)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/2.jpg:('07330',0.9986056089401245)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/3.jpg:('ATS2503',0.9999926686286926)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/4.jpg:('1102H1T885',0.9948743581771851)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/5.jpg:('XC6VLX240TTM',0.9664036631584167)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/6.jpg:('N51822',0.9301093220710754)[2022/12/0522:04:58]ppocrINFO:Predictsof/home/aistudio/test1/7.jpg:('150A796409FA',0.9999510645866394)6.小結(jié)至此,完成了本案例系統(tǒng)訓(xùn)練和預(yù)測。識別精度的高低和數(shù)據(jù)量多少以及真實場景下數(shù)據(jù)質(zhì)量有著密切的關(guān)系。若對于某些字符,數(shù)據(jù)準備不多,合成數(shù)據(jù)集的時候也沒有使用類似的字體合成相關(guān)的圖片,則識別誤差會比較大。034.3.3系統(tǒng)測試與部署系統(tǒng)測試將4.2.3中訓(xùn)練好的字符檢測模型和字符識別模型進行串聯(lián)測試,代碼如下。#串聯(lián)測試!python3tools/infer/predict_system.py\--image_dir="/home/aistudio/test"\--det_model_dir="./inference/det/Student"\--rec_model_dir="./inference/rec_ppocrv3"#顯示測試結(jié)果importmatplotlib.pyplotaspltfromPILimportImageimg_path="./inference_results/39.jpg"img=Image.open(img_path)plt.figure("test_img",figsize=(30,30))plt.imshow(img)plt.show()推理結(jié)果如圖所示。使用PaddleServing進行部署1.環(huán)境配置和數(shù)據(jù)準備首先安裝服務(wù)所需whl包,共有3種:client、app、server,安裝代碼如下:!wget/test-dev/whl/paddle_serving_server_gpu-0.8.3.post102-py3-none-any.whl!pipinstallpaddle_serving_ser
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 62305:2025 SER EN-FR Protection against lightning - ALL PARTS
- 四川省瀘州市瀘州高級中學(xué)校2024-2025學(xué)年七年級上學(xué)期1月期末地理試卷(含答案)
- 內(nèi)蒙古自治區(qū)烏蘭察布市2024-2025學(xué)年八年級上學(xué)期基礎(chǔ)教育階段學(xué)生學(xué)科素養(yǎng)提升監(jiān)測物理試題(含答案)
- 廣東省潮州市2024-2025學(xué)年高二上學(xué)期期末地理試卷( 含答案)
- 6#樓勞務(wù)分包合同
- 2024訂票服務(wù)詳細條款協(xié)議示例
- 田徑接力跑 說課稿-2023-2024學(xué)年高二上學(xué)期體育與健康人教版必修第一冊
- 2024青年雞養(yǎng)殖廢棄物資源化利用合作合同模板3篇
- 福建省南平市嵐下中學(xué)2020-2021學(xué)年高二化學(xué)期末試卷含解析
- 2024石灰石礦產(chǎn)品環(huán)保產(chǎn)業(yè)發(fā)展規(guī)劃與合作合同3篇
- 2024年山東省高中自主招生數(shù)學(xué)模擬試卷試題(含答案)
- 2024年臨床執(zhí)業(yè)醫(yī)師考試真題含答案
- 算術(shù)平方根2課件
- 【人教版】九年級化學(xué)上冊期末試卷及答案【【人教版】】
- 四年級數(shù)學(xué)上冊期末試卷及答案【可打印】
- (正式版)SHT 3227-2024 石油化工裝置固定水噴霧和水(泡沫)噴淋滅火系統(tǒng)技術(shù)標(biāo)準
- 中小學(xué)人工智能教育方案
- 湖北省襄陽市襄城區(qū)2023-2024學(xué)年七年級上學(xué)期期末學(xué)業(yè)水平診斷英語試題
- 營銷組織方案
- LS/T 1234-2023植物油儲存品質(zhì)判定規(guī)則
- 部編版五年級語文上冊期末 小古文閱讀 試卷附答案
評論
0/150
提交評論