朱銳,劉永輝,梁荊璞,易陽
1.長江大學(xué)文理學(xué)院 (荊州 434020);2.武漢輕工大學(xué)食品科學(xué)與工程學(xué)院 (武漢430023)
隨著人們對食用油的需求逐年增加,食用油的品質(zhì)安全正面臨巨大挑戰(zhàn),因此食用油的檢測方受到的壓力也日漸上升[1]。傳統(tǒng)的試紙目測比色的食用油檢測方法存在成本高、耗時(shí)長、采樣慢等諸多缺點(diǎn),且受到檢測人員的主觀判斷影響結(jié)果準(zhǔn)確性。為更好推進(jìn)食用油相關(guān)指標(biāo)快速檢測的便捷化和系統(tǒng)化,特別是當(dāng)前輕量便攜且搭載許多傳感器的智能手機(jī)已相當(dāng)普及,在手機(jī)上設(shè)計(jì)一款人機(jī)交互友好的試紙分析平臺具有重要的研究意義[2-3]。
一般的比色檢測原理是使用一定量的食用油,根據(jù)其中檢測對象的含量不同,檢測區(qū)域的相關(guān)物質(zhì)發(fā)生反應(yīng)后顯色顏色不一,所以可通過顯色結(jié)果與標(biāo)準(zhǔn)比色卡進(jìn)行對比,通過肉眼快速判斷出相對結(jié)果。本質(zhì)上,只要確定檢測對象濃度同反應(yīng)顯色顏色數(shù)據(jù)之間的關(guān)系,即可利用圖像處理技術(shù)實(shí)現(xiàn)同比色卡相同的效果,且結(jié)果更客觀具體[4-6]。因此,試驗(yàn)所針對的試紙產(chǎn)品無需額外提供比色卡,只需按照不同的檢測對象測出相應(yīng)的標(biāo)準(zhǔn)曲線,通過APP即可實(shí)現(xiàn)相對客觀的結(jié)果比對。
通過設(shè)計(jì)檢測的圖像處理算法,搭建由手機(jī)APP客戶端與Web端后臺管理系統(tǒng),實(shí)現(xiàn)具備小規(guī)模應(yīng)用的條件的食用油快速檢測試紙分析平臺。
檢測對象為如圖1所示的一類特殊試紙。以試紙放置方向作為正向,可見試紙具有2個(gè)顏色區(qū)域。試紙上方顏色區(qū)域?yàn)闄z測結(jié)果,記為目標(biāo)區(qū)域A;下方顏色區(qū)域用于對照,記為對照區(qū)域B。圖1(a)與圖1(b)的對照區(qū)域B顏色有黃色和灰色之分,因此對于區(qū)域B的圖像處理需要特別注意。此外,試紙顏色區(qū)域大小和間距都具有大致相同的規(guī)格比例,對檢測的影響不大。

圖1 作為檢測對象的試紙
1.2.1 圖像預(yù)處理
圖像預(yù)處理需要經(jīng)歷灰度變換、平滑降噪、邊緣檢測、Hough變換、傾斜矯正5個(gè)過程。
利用灰度變換將RGB彩色圖像信息轉(zhuǎn)換為單通道的灰度圖像,使用濾波的方法消除圖像內(nèi)的噪點(diǎn)進(jìn)行平滑降噪,使用OpenCV的高斯濾波功能實(shí)現(xiàn)。降噪完成后,使用Canny算法進(jìn)行邊緣檢測,提取圖像不同區(qū)域的邊界信息,作為分割的依據(jù)。這一邊界信息并非連續(xù),而是由一系列點(diǎn)所組成,此時(shí)需要進(jìn)一步使用Hough變換,將邊界信息中存在明顯的排列成一行直線的點(diǎn),在Hough空間內(nèi)映射出相應(yīng)的聚集點(diǎn)。聚集點(diǎn)確定后,即可根據(jù)直線的傾角θ對圖像進(jìn)行傾斜矯正。當(dāng)θ>45°時(shí)予以豎直矯正,否則進(jìn)行水平矯正,并對試紙的方向進(jìn)行記錄。
1.2.2 目標(biāo)區(qū)域查找
目標(biāo)區(qū)域查找過程包括顏色分割、目標(biāo)區(qū)域形狀篩選、目標(biāo)區(qū)域的查找3個(gè)步驟。
將彩色通道原圖像RGB空間使用的紅(R)、綠(G)、藍(lán)(B)三色的亮度信息轉(zhuǎn)換到HSV空間,依照色度(H)、飽和度(S)、明暗度(V)信息表示圖像,在HSV空間中進(jìn)行顏色分割。由于顏色特征是查找目標(biāo)區(qū)域的主要依據(jù),而在HSV空間中,色度H能夠更好用于區(qū)分黃、綠、藍(lán)等顏色,故相比于RGB空間,HSV空間能夠更好追蹤圖像的顏色信息[7]。結(jié)合OpenCV的顏色空間轉(zhuǎn)換功能,試紙上目標(biāo)區(qū)域A可能顯示的顏色大致為黃、綠、青3類,目標(biāo)區(qū)域A的顏色依照表1進(jìn)行判定。

表1 HSV顏色空間檢測閾值判定依據(jù)
由于提前進(jìn)行過圖像預(yù)處理,因此目標(biāo)區(qū)域輪廓的邊緣可近似為無傾斜、無旋轉(zhuǎn)的矩形,偏差與邊緣噪聲可通過內(nèi)縮進(jìn)行消除,使得最終的目標(biāo)區(qū)域?yàn)閮H包含單一顏色信息的矩形。由于試紙樣品被測目標(biāo)區(qū)域近似為正方形,因此可根據(jù)矩形區(qū)域的寬高比及面積大小綜合判斷是否為目標(biāo)區(qū)域。寬高比與1的相對誤差在10%以上,或者區(qū)域面積過小,均應(yīng)予以排除。
若對照區(qū)域B屬于有色類型,則區(qū)域B會(huì)與區(qū)域A同時(shí)被檢出。但對于灰色類型的區(qū)域B,則需使用已分割出的區(qū)域A所在的位置作為基礎(chǔ),在一定的范圍內(nèi)進(jìn)行查找。此處使用對圖像每一行的灰度求均值的降維處理方法,將行平均灰度值進(jìn)行歸一化分類,依照對區(qū)域A的內(nèi)縮處理方法對區(qū)域B進(jìn)行處理[8]。考慮到部分噪聲行的影響,還需要對數(shù)值連續(xù)在一定范圍內(nèi)的行進(jìn)行統(tǒng)計(jì),以精確定位區(qū)域邊界。行平均灰度值歸一化處理的結(jié)果如圖2所示,橫坐標(biāo)代表所在的行,縱坐標(biāo)為歸一化的平均灰度值,要查找的區(qū)域B在圖中是明顯連續(xù)的一段灰度值較低的區(qū)間。

圖2 平均灰度值歸一化處理結(jié)果
對區(qū)域B的查找結(jié)果如圖3所示,右側(cè)圖中的黑色橫線是定位到的區(qū)域B的邊界,后續(xù)依照區(qū)域A進(jìn)行內(nèi)縮操作。

圖3 B區(qū)域的查找結(jié)果
1.2.3 區(qū)域校驗(yàn)
為保證查找到的區(qū)域的正確性,針對目標(biāo)區(qū)域A進(jìn)行校驗(yàn)。校驗(yàn)方法:根據(jù)目標(biāo)區(qū)域A所在的位置,按照試紙方向,將區(qū)域A進(jìn)行上下或左右按一定值(例如1.5倍區(qū)域?qū)挾龋┻M(jìn)行偏移,對空白區(qū)域進(jìn)行采樣,一般可采集到2個(gè)區(qū)域,一個(gè)在區(qū)域A和B之間(記為區(qū)域C),另一個(gè)在區(qū)域A的另一側(cè)(記為區(qū)域D)。2個(gè)區(qū)域均為空白區(qū)域,計(jì)算出2個(gè)區(qū)域所在各行的均值,若分布均勻即認(rèn)為區(qū)域A位置有效。區(qū)域D可能會(huì)在圖像范圍以外,在處理過程中出現(xiàn)指針越界,此時(shí)可舍棄區(qū)域D,僅對區(qū)域C進(jìn)行校驗(yàn)。
1.2.4 結(jié)果處理
所有處理過程完成后,將原圖重新提取出進(jìn)行顯示。其中,過程處理數(shù)據(jù)及檢測結(jié)果進(jìn)行整理存檔,所有臨時(shí)數(shù)據(jù)(如內(nèi)存中的圖片數(shù)據(jù))全部釋放,對內(nèi)存進(jìn)行回收。
檢測系統(tǒng)由Web端后臺管理系統(tǒng)與手機(jī)APP客戶端共同組成,均使用獨(dú)立的后端應(yīng)用提供接口服務(wù)。Web前端采用Vue框架和ElementUI庫等開發(fā)實(shí)現(xiàn),APP基于Flutter開發(fā),為支持離線模式使用的C/S架構(gòu),本地?cái)?shù)據(jù)庫采用SQLite,后端接口服務(wù)由Spring-Boot應(yīng)用提供,如圖4所示。

圖4 檢測平臺系統(tǒng)架構(gòu)
系統(tǒng)的開發(fā)環(huán)境為Windows 10,部署環(huán)境為騰訊云CentOS7.5,開發(fā)IDE使用Android Studio 4.2.1,構(gòu)建工具使用Maven 3.6、Gradle 6.7、npm 6.14.5,版本管理工具使用Git 2.21.0。
系統(tǒng)平臺根據(jù)實(shí)際需求,衍生出2種類型用戶,分別為普通用戶和管理員用戶,對應(yīng)APP端應(yīng)用和Web端管理系統(tǒng),功能模塊如圖5所示。

圖5 系統(tǒng)功能模塊
平臺的APP端主要面向目標(biāo)用戶,基于Flutter框架開發(fā),采用C/S架構(gòu)支持離線模式使用,界面精美,操作流暢,且在UI上具備一定的跨平臺特性。
用戶模塊提供用戶注冊、登錄及個(gè)人信息修改等功能。出于數(shù)據(jù)安全考慮,登錄操作禁止多設(shè)備同時(shí)登錄;用戶密碼至少要求6位,并在傳輸過程中通過RSA公鑰進(jìn)行加密傳輸,后端落庫通過SpringSecurity提供的BCryptPasswordEncoder進(jìn)行加密。界面如圖6(a)所示。系統(tǒng)功能模塊提供系統(tǒng)設(shè)置、意見反饋、關(guān)于、通知和更新等APP系統(tǒng)相關(guān)功能,從首頁“我的”界面中進(jìn)入,界面如圖6(b)所示。歷史數(shù)據(jù)模塊對試驗(yàn)記錄數(shù)據(jù)的管理尤為重要,在APP端為用戶提供歷史數(shù)據(jù)的展示、同步和搜索功能,其中展示在APP首頁的“歷史”中,以日歷卡片形式按月度視圖進(jìn)行展示。歷史數(shù)據(jù)記錄詳情界面如圖6(c)所示。

圖6 用戶、系統(tǒng)、歷史界面
試驗(yàn)操作模塊作為系統(tǒng)平臺的核心功能,包含對試驗(yàn)元信息的錄入、試紙圖像的輸入和處理及處理結(jié)果的分析和展示功能,為提高檢測效率,試紙圖像的處理算法在Android本地直接供APP調(diào)用。基本操作邏輯:第一步,輸入或掃碼錄入標(biāo)準(zhǔn)曲線;第二步,調(diào)用系統(tǒng)相機(jī)拍攝或從相冊選擇待測試紙照片;第三步,進(jìn)行圖像處理過程,給出處理結(jié)果并上傳記錄。操作截圖示例如圖7所示。

圖7 試驗(yàn)數(shù)據(jù)處理
Web端是前后端分離式的后臺管理系統(tǒng),主要面向管理員用戶,采用Vue+ElementUI實(shí)現(xiàn),利用Axios進(jìn)行網(wǎng)絡(luò)請求的封裝,并使用Echarts進(jìn)行圖表可視化展示,包括信息匯總、用戶管理、記錄管理、系統(tǒng)管理等模塊。其中,核心的數(shù)據(jù)記錄管理模塊提供對同步到服務(wù)器的試驗(yàn)記錄信息管理,檢測對象管理和標(biāo)準(zhǔn)曲線管理三大功能,可逐一查閱檢測結(jié)果,如圖8所示。

圖8 Web后臺管理
使用OpenCV圖像處理算法、基于Flutter開發(fā)的Android應(yīng)用程序及基于Vue開發(fā)的后臺管理系統(tǒng),構(gòu)建出由APP端與Web端共同組成的食用油檢測系統(tǒng)平臺,主要針對快速檢測比色試紙進(jìn)行便捷分析,并系統(tǒng)化處理試驗(yàn)記錄數(shù)據(jù)。基于智能手機(jī)的分析平臺是介于人工比色分析和高精度儀器分析之間的一種具備高性價(jià)比、便攜靈活、客觀實(shí)際的試紙分析解決方案,系統(tǒng)針對單指標(biāo)試紙的識別功能已經(jīng)基本完成,系統(tǒng)各項(xiàng)功能均符合預(yù)期,系統(tǒng)的識別結(jié)果精確且穩(wěn)定,已具備小規(guī)模應(yīng)用的條件。