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

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

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

圖2 平均灰度值歸一化處理結果
對區域B的查找結果如圖3所示,右側圖中的黑色橫線是定位到的區域B的邊界,后續依照區域A進行內縮操作。

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

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

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

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

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

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