文/劉麗媛 劉宏展 郝源 吳一
(華南師范大學(xué)信息光電子科技學(xué)院 廣東省廣州市 510006)
在工業(yè)和檢測領(lǐng)域,數(shù)字儀表因具有精度高、讀取方便、易設(shè)置等優(yōu)點(diǎn)而被廣泛的應(yīng)用。但是在復(fù)雜工業(yè)環(huán)境下,部分儀器儀表并沒有提供與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信的接口,需要人工讀數(shù)來實(shí)現(xiàn)數(shù)據(jù)分析[1],這極大增加了作業(yè)負(fù)擔(dān)且存在讀數(shù)誤差[2]。在科技發(fā)展迅速、智能化程度極高的今天,使用智能化技術(shù)代替人工讀數(shù)的工作十分必要。
因此,本文提出了一種新的儀表信息識別技術(shù),運(yùn)用Python語言編程實(shí)現(xiàn)儀表信息的獲取。Python語言[3]是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,也是當(dāng)下非常熱門的一種編程語言,主要具有簡單易學(xué)、可移植性較好、擴(kuò)展性較強(qiáng)、資源免費(fèi)等優(yōu)點(diǎn)[4]?;赑ython和OCR的儀表信息識別技術(shù)的主要過程是對儀表圖進(jìn)行圖像預(yù)處理,繼而請求調(diào)用文字識別接口進(jìn)行OCR識別。同時(shí)利用此技術(shù)對預(yù)處理方法和識別接口這兩個(gè)影響因素進(jìn)行了實(shí)驗(yàn)對比和分析。
在復(fù)雜的工業(yè)工程環(huán)境中,通常通過圖像信息處理系統(tǒng)提取出儀器儀表的有用信息,但獲取儀表信息面臨著圖像背景復(fù)雜、拍攝角度和光線強(qiáng)弱等眾多因素造成的分辨率低、對比度和亮度不均勻等多種問題[5]。
針對獲取復(fù)雜環(huán)境下儀器儀表中彩色圖像信息困難的問題,本文提出并完成了一種基于Python和百度OCR的儀表信息識別技術(shù),主要研究過程可分為兩大部分:圖像預(yù)處理和圖像識別。研究對象是使用相機(jī)采集儀器儀表被測目標(biāo)所得到的彩色儀表原圖。此技術(shù)的具體流程如圖1所示。主要是先對彩色儀表原圖進(jìn)行儀表圖像的預(yù)處理,包括加權(quán)平均法的灰度化和大律法的二值化,得到待識別圖,繼而請求調(diào)用百度的文字識別API接口對待識別樣本圖進(jìn)行OCR識別,最后輸出識別結(jié)果。
在復(fù)雜機(jī)械工業(yè)環(huán)境下,由相機(jī)所拍攝得到的儀表圖片的質(zhì)量必然會(huì)受到光線明暗,是否聚焦,拍攝角度是否適當(dāng)?shù)韧獠凯h(huán)境的影響,而導(dǎo)致圖像出現(xiàn)陰暗,模糊,傾斜等問題,這些關(guān)系到識別的準(zhǔn)確性。因此,首先需要對所拍攝的儀表圖像進(jìn)行預(yù)處理,再識別,盡可能地降低這些不好的影響,以提高后續(xù)信息識別的準(zhǔn)確率[6]。
預(yù)處理部分是對儀表圖片進(jìn)行灰度化,通過相機(jī)所采集的儀器儀表圖像都是彩色的,對彩色圖像進(jìn)行灰度化處理能夠極大減少圖像信息。因?yàn)楹筒噬珗D像相比,灰度圖中沒有色度,同時(shí)也大大減少了信息計(jì)算量,并且有利于后續(xù)的操作處理和計(jì)算[7]。所以使用YUV顏色空間編碼方法來實(shí)現(xiàn)圖像灰度化,YUV是一種像素格式,其中Y為亮度信號,U和V為色度信號。它將亮度參量和色度參量分開表示,可以避免相互干擾,保證了在提取圖像亮度信息、獲得需要的灰度圖像時(shí)可以不受色度參量的干擾。我們在彩色儀表圖像中提取了每個(gè)像素的顏色信息,即R、G、B值,然后將每個(gè)像素的R、G、B值通過公式轉(zhuǎn)換為相應(yīng)的亮度信息,從而得到灰度圖像。三個(gè)顏色分量R、G、B與灰度值Y的關(guān)系為[8]:
圖1:流程框圖
對儀器儀表圖像進(jìn)行灰度化的數(shù)字圖像處理時(shí),采用的灰度化方法如公式1所示[9]。將實(shí)驗(yàn)中儀表原圖經(jīng)灰度化預(yù)處理后得到待識別圖。以下是在Python下使用Opencv[10]庫進(jìn)行灰度化操作時(shí)的部分代碼:
對彩色儀表原圖進(jìn)行上述灰度化方法的預(yù)處理后,得到了待識別樣本圖,接下來最關(guān)鍵的是請求百度文字識別API接口,對待識別樣本圖進(jìn)行OCR識別。
目前傳統(tǒng)的圖像文字識別技術(shù)大多采用傳統(tǒng)光學(xué)字符識別(Optical Character Recognition,OCR)[11],光學(xué)字符識別在金融、醫(yī)療以及海關(guān)等眾多領(lǐng)域中得到越來越廣泛的應(yīng)用,有良好的發(fā)展前景。同時(shí),百度智能云是面向Cloud2.0的云計(jì)算服務(wù)商,其中人工智能的圖像技術(shù)應(yīng)用包含多個(gè)文字識別的API接口可進(jìn)行通用場景文字識別。百度OCR能夠適應(yīng)不同業(yè)務(wù)場景對識別精度、識別速度的需求,針對圖片模糊、傾斜、翻轉(zhuǎn)等情況進(jìn)行了優(yōu)化,魯棒性強(qiáng),識別速度快,且支持2W+大字庫,準(zhǔn)確率高。百度智能云開放了API、SDK等調(diào)用方式,可以體驗(yàn)不同應(yīng)用的實(shí)際效果[12]。
圖2:基于Python和百度OCR的儀表信息識別過程圖
識別部分首先是環(huán)境準(zhǔn)備,需要登錄百度云的控制臺界面,創(chuàng)建通用文字識別的應(yīng)用來獲取密鑰;然后在Python中創(chuàng)建Client實(shí)例來獲取Region ID、AccessKey ID和AccessKey Secret;最后在Python中通過輸入密鑰來請求調(diào)用文字識別API接口,將經(jīng)上述灰度化預(yù)處理后的待識別樣本圖作為圖片參數(shù),完成API請求的創(chuàng)建和參數(shù)設(shè)置,并發(fā)起請求、處理應(yīng)答或異常。最終將圖像信息還原成文本信息實(shí)現(xiàn)OCR識別,得到識別結(jié)果。
利用上述技術(shù)分別對單張彩色儀表原圖、多張彩色儀表原圖進(jìn)行儀表信息識別實(shí)驗(yàn)。實(shí)驗(yàn)對象是使用相機(jī)采集儀器儀表被測目標(biāo)所得到的彩色儀表原圖。同時(shí)為進(jìn)一步研究此技術(shù),結(jié)合研究過程和實(shí)驗(yàn)來討論圖像灰度化、不同二值化預(yù)處理方法,以及采用不同版本的百度OCR接口API對圖像識別結(jié)果的影響,對其各自的識別效果進(jìn)行實(shí)驗(yàn)對比與分析。
采用上述研究技術(shù)對單張儀表圖像進(jìn)行識別實(shí)驗(yàn),圖2為基于Python和百度OCR的儀表信息識別過程示意圖,其中圖2(a)為彩色儀表原圖,圖2(b)是經(jīng)上述預(yù)處理后得到的待識別圖,識別結(jié)果如圖2(c)所示,其識別準(zhǔn)確率為90.8%。
通過上述實(shí)驗(yàn)表明,本技術(shù)對單張彩色儀表圖像的識別準(zhǔn)確率為90.8%。考慮到復(fù)雜環(huán)境下相機(jī)所采集的彩色儀表圖像的差異性會(huì)影響其識別準(zhǔn)確率,因此,加大儀表測試樣本圖的數(shù)量盡可能來減小誤差,用此技術(shù)對50張不同復(fù)雜環(huán)境下所獲取的彩色儀表圖像進(jìn)行相同的預(yù)處理和圖像識別,對識別準(zhǔn)確率進(jìn)行平均值統(tǒng)計(jì),如表1所示。
如表1所示,將50張彩色儀表圖像的識別準(zhǔn)確率進(jìn)行平均值統(tǒng)計(jì),平均識別率為90.7%。
在上述圖2的識別過程中,待識別的測試樣本圖是彩色儀表圖像經(jīng)灰度化的圖像預(yù)處理后得到的。然而通過對本技術(shù)的原理進(jìn)行綜合考慮可知,經(jīng)不同的預(yù)處理方法后得到的不同的待識別樣本圖,對后續(xù)的圖像識別有一定的影響。
灰度化是其他預(yù)處理操作的基礎(chǔ)?;叶然蟮膬x表圖像仍可以選擇繼續(xù)進(jìn)行二值化的預(yù)處理,可使圖像包含更少的信息量,更簡單[13],但它也會(huì)影響后面字符識別的準(zhǔn)確率。二值化是在圖像處理中的一種經(jīng)典的圖像分割技術(shù),能夠迅速區(qū)分圖像的前景與背景,凸顯出目標(biāo)的輪廓,獲取有效信息。二值化方法主要有全局迭代算法、大律法(OTSU算法)、最大熵方法等[14]。由于大律法具有特點(diǎn)明顯、處理快速、效果較好等優(yōu)點(diǎn),所以本文采用全局閾值法中的大律法進(jìn)行二值化處理。該方法的基本原理是,設(shè)一個(gè)閾值將圖像分成目標(biāo)部分和背景部分兩類,如果該閾值使得類內(nèi)方差最小且類間方差最大,則此閾值為最佳閾值[9]。OTSU算法的實(shí)質(zhì)是自動(dòng)找出圖像灰度直方圖中波谷對應(yīng)的灰度值,然后將其作為閾值[15]。本實(shí)驗(yàn)是在 Python 環(huán)境下實(shí)現(xiàn)OTSU二值化算法,采用Opencv[10]庫中的cv.threshold()函數(shù),傳入cv.THRESH_OTSU參數(shù)。因此,實(shí)驗(yàn)中使用OTSU算法來完成二值化的圖像預(yù)處理,核心代碼如下所示:
因此,在圖像預(yù)處理過程中,把儀表測試樣本圖經(jīng)三種不同的圖像預(yù)處理后可得到三種待識別樣本圖,分別為儀表圖像的原圖、灰度化后圖、二值化后圖,本實(shí)驗(yàn)由10張儀表測試樣本圖分別依次得到各自對應(yīng)的三種待識別樣本圖,并用同樣的通用文字識別API接口對其進(jìn)行了OCR識別。對比研究不同預(yù)處理方法對識別準(zhǔn)確率影響的實(shí)驗(yàn)結(jié)果如表2所示。
由表2可知,由10張測試樣本圖分別經(jīng)三種不同的預(yù)處理后得到各樣本對應(yīng)的原圖、灰度化后圖、二值化后圖,對這些待識別樣本圖進(jìn)行識別,平均識別率分別為86.80%,90.64%,85.63%。由此可見,在保證其他實(shí)驗(yàn)條件相同的情況下,圖像的預(yù)處理方法對后續(xù)的OCR文字識別是有影響的。由實(shí)驗(yàn)結(jié)果可知,在保持識別部分一致的實(shí)驗(yàn)前提下,經(jīng)灰度化預(yù)處理后樣本圖的平均識別率最高,原圖和二值化后圖的識別率相差不大。
對于復(fù)雜環(huán)境下的儀器儀表來說,所采集到的儀表圖像是彩色的,包含信息量大,在處理時(shí)會(huì)需要很大的存儲(chǔ)空間和很長的運(yùn)算時(shí)間。然而在實(shí)際工程應(yīng)用中,儀表圖像的處理需要小的存儲(chǔ)空間和快速的操作。灰度圖沒有顏色信息,只有圖像亮度信息,并且每個(gè)灰度圖像僅需要一個(gè)像素,與彩色儀表原圖相比,它具有存儲(chǔ)空間小,處理速度快的優(yōu)點(diǎn)。因此256級灰度圖像用于圖像預(yù)處理的顏色處理,表示效果是最好的。此外,在類似工廠的實(shí)際應(yīng)用場合中,儀表圖像采集的環(huán)境很差,采集到的圖像會(huì)因?yàn)楣饩€、角度等原因偏暗和模糊,而灰度化后清除了原圖的無關(guān)信息,增強(qiáng)了有用信息的可檢測性和簡化性,因此,灰度化圖的識別準(zhǔn)確率比原圖稍高。
圖像在拍攝采集時(shí)因外部環(huán)境的影響導(dǎo)致其包含了一定前景與背景,在獲取有效信息的特征區(qū)域、抓取目標(biāo)的時(shí)候,二值化算法需要根據(jù)灰度特性上的均勻性找到最佳閾值T對圖像的目標(biāo)和背景像素來進(jìn)行判別區(qū)分,如果某一像素點(diǎn)的灰度值大T則將其重置為255,反之將其灰度值重置為0,所以閾值的設(shè)定直接決定二值化的效果[16]。如果閾值過大,則造成圖片噪音過多和目標(biāo)不明顯;若閾值過小,則會(huì)導(dǎo)致特征區(qū)域信息大量丟失,不能真實(shí)反映原圖片特征信息。這些情況都會(huì)影響后續(xù)儀表圖像識別的準(zhǔn)確性。在本實(shí)驗(yàn)中,由于儀表彩色圖像的復(fù)雜性需要進(jìn)行多次二值化才能得到最佳閾值,其直接影響了目標(biāo)和背景的區(qū)分,因此,與灰度化圖相比,二值化不僅增加了復(fù)雜度,而且因?yàn)閮x表圖像的復(fù)雜性較難找到最佳閾值來準(zhǔn)確的區(qū)分背景和目標(biāo),從而使部分有用信息可能被誤判為背景,或者無關(guān)信息被誤判為目標(biāo),所以灰度化圖的識別率比二值化圖稍高。
對上述實(shí)驗(yàn)結(jié)果進(jìn)行分析與總結(jié),圖像預(yù)處理的方法對儀表圖像的識別準(zhǔn)確率是有影響的。將實(shí)驗(yàn)數(shù)據(jù)對比可知,經(jīng)灰度化的預(yù)處理后得到待識別樣本圖,其識別準(zhǔn)確率最高。
實(shí)現(xiàn)基于Python和百度OCR的儀表信息識別技術(shù)的關(guān)鍵是調(diào)用百度OCR的通用文字識別接口實(shí)現(xiàn)文字識別。在識別部分,百度智能云的人工智能圖像技術(shù)應(yīng)用中包含多個(gè)API接口可進(jìn)行通用場景文字識別,圖像識別的API接口提供了通用文字識別、高精度版、含位置信息版、高精度含位置版、含生僻字版五種版本。在前面的方法中調(diào)用的API接口是通用文字識別版。而高精度版在通用文字識別的基礎(chǔ)上,提供更高精度的識別服務(wù),并將字庫從1w+擴(kuò)展到2w+,能識別所有常用字和大部分生僻字。由于在儀器儀表的信息獲取中不需要位置信息,因此在保證圖像預(yù)處理部分和其他實(shí)驗(yàn)條件相同的情況下,調(diào)用通用文字識別和高精度版這兩個(gè)API接口進(jìn)行識別,來研究不同接口對儀表信息識別的影響。用基于Python和百度OCR的儀表信息識別方法對20張經(jīng)相同灰度化預(yù)處理后的待識別樣本圖分別進(jìn)行兩種接口的OCR識別,識別準(zhǔn)確率如表3所示。
表1:50張儀表測試樣本圖的識別準(zhǔn)確率
表2:三種不同預(yù)處理后待識別樣本圖的識別率
表3:兩種接口的儀表測試樣本圖的識別準(zhǔn)確率
對經(jīng)相同灰度化預(yù)處理后的待識別樣本圖分別進(jìn)行通用文字識別和高精度版這兩個(gè)API接口的OCR識別,由表3可知,對兩種接口的識別準(zhǔn)確率進(jìn)行平均值統(tǒng)計(jì),平均識別率分別為90.64%,92.56%。由實(shí)驗(yàn)結(jié)果可以得到高精度版識別接口的識別準(zhǔn)確率是比通用文字識別接口的稍高的,因?yàn)楦呔劝嬖谕ㄓ梦淖肿R別的基礎(chǔ)上,提供更高精度的識別服務(wù),并增加了字庫。
綜合上述對預(yù)處理方法和識別接口的實(shí)驗(yàn)研究與分析,兩者對儀表圖像的識別結(jié)果都是有一定影響的。最后綜合考慮兩個(gè)影響因素,本方法最佳的識別過程是對復(fù)雜環(huán)境下彩色儀表圖像進(jìn)行灰度化的圖像預(yù)處理,繼而調(diào)用百度OCR的高精度版通用文字識別API接口進(jìn)行識別,其準(zhǔn)確率可達(dá)92.56%,識別效果更佳。
本文提出并實(shí)現(xiàn)了一種基于Python和百度OCR的儀表信息識別技術(shù),主要過程是對儀表圖像進(jìn)行灰度化的圖像預(yù)處理得到待識別樣本圖,從而調(diào)用百度OCR通用文字識別的高精度版接口來獲取儀表信息,其識別準(zhǔn)確率可達(dá)92%以上,而且識別復(fù)雜度低。此外,還討論了圖像灰度化、不同二值化預(yù)處理方法,以及采用不同版本的百度OCR接口API對圖像識別結(jié)果的影響。因此,本文對儀器儀表的圖像信息處理有一定參考意義。但在復(fù)雜工業(yè)工程環(huán)境下,相機(jī)所采集的儀表圖像質(zhì)量很差,導(dǎo)致本方法離百分之百的識別率仍有一定差距,需進(jìn)一步提升。