吳祝清,李冬秀,陳 望
(1.桂林優(yōu)利特醫(yī)療電子有限公司,廣西桂林 541004;2.桂林醫(yī)學(xué)院附屬醫(yī)院,廣西桂林 541001;3.桂林英美特生物技術(shù)研究所,廣西桂林 541004)
在醫(yī)療檢驗(yàn)全自動體液分析流水線系統(tǒng)[1]中,檢驗(yàn)人員將已放置人體體液(如人體血液、尿液樣本)采樣試管的試管架手動放入流水線進(jìn)樣托盤中,進(jìn)樣托盤依次將試管架推送到傳送帶上后,首要工作就是采集試管架及其架位的信息,包括試管架條碼、試管架位有無試管、試管條碼、試管樣本顏色、試管樣本類型、試管樣本濁度、試管樣本液位高度等,以便流水線系統(tǒng)對該試管架內(nèi)的人體體液樣本進(jìn)行后續(xù)的測試規(guī)劃。
當(dāng)前試管架位樣本信息采集的主流方式皆為采用不同的功能模塊進(jìn)行組合來實(shí)現(xiàn)。例如,在試管架側(cè)面用射頻儀或紅外掃描實(shí)現(xiàn)試管架條碼讀??;利用紅外對射光耦實(shí)現(xiàn)試管架中有無試管檢測;用條碼儀實(shí)現(xiàn)試管架中試管條碼讀??;通過光線照射液體時的散射光強(qiáng)度來測定試管樣本渾濁度。但基本沒有試管液位高度檢測。這種采用單功能獨(dú)立模塊組合方式來實(shí)現(xiàn)不同信息的采集增加了儀器開發(fā)成本和安裝調(diào)試難度,不利于儀器的小型輕量化,更不利于儀器的可靠性以及后續(xù)維護(hù),而且采集的信息難以進(jìn)行統(tǒng)一的管理和分析。
隨著機(jī)器視覺的興起,陸秦江[2]提出采用圖像處理技術(shù),對試管進(jìn)行識別及信息采集,但其硬件主體采用PC與圖像采集卡組合的方式,不便于進(jìn)行集成式安裝。在此基礎(chǔ)上,為實(shí)現(xiàn)集成化、小型化及智能化,本文以ARM9芯片[2-4]NXP i.MX280為核心板,搭載CMOS攝像頭,設(shè)計一款嵌入式試管架位信息采集模塊。
試管架位信息采集模塊總體設(shè)計包括硬件設(shè)計與軟件設(shè)計。硬件設(shè)計主要實(shí)現(xiàn)試管架位圖像采集,為軟件提供運(yùn)算及數(shù)據(jù)存儲,對外提供通信交互電氣接口以及外圍控制電路;軟件設(shè)計主要包括軟件編譯環(huán)境搭建與移植、軟件邏輯功能設(shè)計、軟件識別算法設(shè)計。
整個模塊由ARM9核心板、CMOS攝像頭、玻璃面板、相關(guān)通信接口以及鋁殼體組成,硬件組成框圖如圖1所示。ARM9核心板以NXP i.MX280為主控芯片,其內(nèi)核為ARM926EJ,主頻為454 MHz,板載64 MiB DDR2同步動態(tài)隨機(jī)存取內(nèi)存(synchronous dynamicrandom-accessmemory,SDRAM)以及128 MiB NandFlash存儲器。CMOS攝像頭配置的成像鏡頭工作焦距為4.9 mm,視場角度為72°,光學(xué)畸變≤-1.0%,可確保所獲圖像基本為平場無畸變;采用通用工業(yè)USB 2.0電氣接口,可以實(shí)現(xiàn)1 080P圖像采集速度為30幀/s,同時配備由外部控制的LED補(bǔ)光燈電路。本模塊還包含1個揚(yáng)聲器、1個RS232串口、1個控制器局域網(wǎng)絡(luò)(controller area network,CAN)總線接口、1個RJ45網(wǎng)口(如圖2所示)以及必要的電源指示燈。
圖1 試管架位信息采集模塊硬件組成框圖
圖2 試管架位信息采集模塊RJ45網(wǎng)口電氣接口原理圖
本模塊外形尺寸如圖3所示,尺寸為43 mm×43 mm×22 cm,小巧別致,易于安裝布置,節(jié)省空間。同時,整個模塊正常工作平均功率不到3 W,非常節(jié)能環(huán)保。
圖3 試管架位信息采集模塊外形尺寸示意圖(單位:mm)
1.2.1 軟件編譯環(huán)境搭建與移植
在軟件設(shè)計與實(shí)現(xiàn)之前,需要搭建嵌入式Linux集成開發(fā)環(huán)境[5-6]。為了更好地兼容ARM9主控芯片外設(shè)驅(qū)動,在宿主機(jī)上安裝Ubuntu 14.04 Linux桌面操作系統(tǒng),并在宿主機(jī)上解壓安裝廠家提供的gcc-4.4.4-glibc-2.11.1-multilib-1.0工具鏈,并配置armfsl-linux-gnueabi-gcc/arm-fsl-linux-gnueabi-g++交叉編譯器,同時安裝32位兼容庫。在交叉編譯環(huán)境下將Bootloader、kernel(linux-image-3.13.9)、rootfs編譯成uImage鏡像文件,通過TF卡燒寫到ARM9核心板上,重新上電后Linux系統(tǒng)正常啟動,則ARM9嵌入式Linux系統(tǒng)構(gòu)建完成。
在試管架位信息采集識別算法實(shí)現(xiàn)過程中,會使用到OpenCV、Zbar等通用圖像處理算法類庫。因此,在宿主機(jī)上通過下載相關(guān)庫源代碼包,使用cmake/configure等生成相應(yīng)的Makefile文件,通過make指令交叉編譯生成庫文件,再拷貝到ARM核心板的試管架位信息采集模塊底層軟件運(yùn)行目錄下,類庫正常被加載則移植成功。
1.2.2 軟件邏輯功能設(shè)計
試管架位信息采集模塊底層軟件主要由攝像頭驅(qū)動模塊、串口及網(wǎng)口通信模塊、條碼識別模塊、試管有無識別模塊、試管類型識別模塊、試管液面高度識別模塊、補(bǔ)光燈檢測模塊、異常報警處理模塊組成,其內(nèi)部邏輯功能框圖如圖4所示。
圖4 試管架位信息采集模塊底層軟件邏輯功能框圖
攝像頭驅(qū)動模塊實(shí)現(xiàn)對CMOS攝像頭的連接控制,并對傳入的圖像數(shù)據(jù)流進(jìn)行接收及緩存。該模塊首先加載V4L2驅(qū)動,連接并以阻塞模式打開CMOS攝像頭設(shè)備端口Video0。設(shè)置視頻捕獲方式為V4L2_CAP_VIDEO_CAPTURE,圖像尺寸為1 920×1 080像素,圖像為YUYV格式,并申請足夠的圖像緩存空間。啟動視頻圖像采集后,被捕獲的幀圖像數(shù)據(jù)自動存入緩存區(qū),可供后續(xù)程序讀取。
串口及網(wǎng)口通信模塊實(shí)現(xiàn)人機(jī)數(shù)據(jù)交互控制。該模塊以子線程方式運(yùn)行,串口通信主要實(shí)現(xiàn)基本參數(shù)讀寫及上下位機(jī)控制命令的交互,網(wǎng)口通信主要實(shí)現(xiàn)圖像數(shù)據(jù)向上傳輸。其中串口通信采用標(biāo)準(zhǔn)的RS232主從雙工通信模式,采用10 bit數(shù)據(jù)幀格式,默認(rèn)通信幀率為115 200 bit/s。通過加載termios驅(qū)動實(shí)現(xiàn)對串口設(shè)備ttys0的讀寫控制及在線通信監(jiān)測,并將接收的串口數(shù)據(jù)寫入緩存區(qū)。待數(shù)據(jù)幀接收完成后,讀取接收緩存區(qū)數(shù)據(jù)進(jìn)行通信解析。網(wǎng)口通信采用傳輸控制協(xié)議(transmission control protocol,TCP)的socket驅(qū)動,設(shè)置試管架位信息采集模塊為TCP客戶端模式,在網(wǎng)絡(luò)物理連接狀態(tài)下,以定時輪詢方式向服務(wù)器端請求連接。
條碼識別模塊實(shí)現(xiàn)試管架條碼、試管架位試管條碼內(nèi)容解析。該模塊通過提取對應(yīng)條碼窗口圖像、加載Zbar解碼庫、運(yùn)行解碼函數(shù)來完成對Code128、Code39、Code93、EAN-8、EAN-13、UPC-A、UPC-E等幾種類型條碼內(nèi)容的解析。
試管有無識別模塊主要對試管架當(dāng)前架位有無試管樣本進(jìn)行檢測。該模塊提取試管架位區(qū)固定小方塊圖像與背景圖像進(jìn)行圖像匹配計算,根據(jù)計算出的相似度偏差值進(jìn)行試管有無判定。
試管類型識別模塊及液面高度識別模塊主要用于識別試管樣本顏色、類型、濁度以及液位高度,運(yùn)行于試管有無識別程序之后,實(shí)現(xiàn)對試管架位試管全部信息的識別采集。
補(bǔ)光燈檢測模塊實(shí)現(xiàn)對補(bǔ)光電路工作狀態(tài)的定時監(jiān)測,運(yùn)行于主線程中。在主線程空閑狀態(tài)下,提取緩存區(qū)純背景圖像,并進(jìn)行多分區(qū)灰度平均值偏差計算,以此評測補(bǔ)光電路的工作狀態(tài)。
異常報警處理模塊用于對當(dāng)前檢測到的故障狀態(tài)進(jìn)行相應(yīng)的聲光報警輸出提示。在模塊軟件主線程中,當(dāng)軟件檢測到攝像頭加載失敗、背景板檢測失敗、補(bǔ)光燈光照異常等故障時,啟動異常報警處理模塊,驅(qū)動LED與揚(yáng)聲器輸出聲光報警提示。
1.2.3 軟件運(yùn)行流程設(shè)計
試管架位信息采集模塊軟件為基于Linux平臺的嵌入式應(yīng)用軟件,上電動自啟動。軟件運(yùn)行流程主要包括軟件啟動主流程與識別功能邏輯流程。
試管架位信息采集模塊底層軟件啟動主流程如下:模塊上電后,uboot加載并啟動Linux內(nèi)核及驅(qū)動,Linux系統(tǒng)自動啟動模塊底層應(yīng)用軟件,模塊底層應(yīng)用軟件讀取用戶參數(shù),捕獲并連接CMOS攝像頭。軟件自檢完成后,啟動通信線程和圖像實(shí)時采集線程,檢測網(wǎng)口電氣連接狀態(tài),根據(jù)網(wǎng)口電氣連接狀態(tài)啟動網(wǎng)絡(luò)通信功能,在線監(jiān)控模塊狀態(tài),實(shí)時監(jiān)測試管架位識別啟動通信指令,在接收到識別啟動指令后,啟動識別功能邏輯流程。啟動主流程圖如圖5所示。
圖5 試管架位信息采集模塊啟動主流程圖
識別功能邏輯流程圖如圖6所示。首先解析指令類型,根據(jù)指令類型進(jìn)入試管架條碼識別或試管識別程序分支。如指令為試管架條碼識別,則提取試管架條碼區(qū)域圖像,對圖像進(jìn)行條碼識別掃描,定位條碼區(qū)域,進(jìn)而解析條碼內(nèi)容[7-8],解析成功后上傳條碼內(nèi)容;如果解析不成功,則重復(fù)條碼解析過程,直至識別超時返回主線程。如指令為試管識別,則提取當(dāng)前架位試管區(qū)域圖像,進(jìn)行圖像預(yù)處理[9],并提取圖像特征數(shù)據(jù)[10],進(jìn)行當(dāng)前架位試管有無識別,若試管存在,則進(jìn)行試管條碼、樣本顏色、樣本類型、樣本濁度、樣本液面高度識別,識別完成后通信上傳當(dāng)前試管全部信息的識別結(jié)果;若識別未完成,則重復(fù)執(zhí)行,直到識別超時返回主線程。
圖6 試管架位信息采集模塊識別功能邏輯流程圖
1.2.4 軟件識別算法設(shè)計
試管架位信息采集模塊軟件識別算法主要包括條碼識別、試管架位試管有無識別、試管類型識別、試管液面高度識別算法。其中,條碼識別主要應(yīng)用Zbar庫來實(shí)現(xiàn),試管架位試管有無識別則采用圖像配準(zhǔn)[11]算法來完成,試管樣本類型識別則是基于圖像HSV(hue,saturation,value)色彩空間來判定,試管樣本液面識別則通過液面圖像特征進(jìn)行識別。
在識別算法設(shè)計中,無色樣本液面識別算法難度及復(fù)雜度最高,其處理過程如下:
(1)試管感興趣區(qū)(regin of interest,ROI)圖像提取。在進(jìn)樣機(jī)構(gòu)的輔助下,試管架位試管均會被推送到固定的檢測位置,為了減少圖像處理過程中運(yùn)算資源消耗以及提高處理速度,只對緩存中每幀大圖進(jìn)行ROI圖像的截取,如圖7所示。
圖7 試管架位試管圖像
(2)試管圖像灰度化預(yù)處理。為方便進(jìn)行后續(xù)圖像形態(tài)學(xué)操作,需要對RGB彩色圖像進(jìn)行灰度化處理,故采用加權(quán)平均法,其轉(zhuǎn)化公式如下:
f(x,y)=0.299R(x,y)+0.578G(x,y)+0.114B(x,y)式中,R、G、B為圖像紅、綠、藍(lán)通道的顏色像素值。如圖8所示,灰度化后圖像變得灰暗,線條輪廓邊緣相較原圖變得更加明顯。
圖8 試管架位試管灰度化圖像
(3)試管灰度化圖像邊緣提取。從試管灰度化圖像中,可以看到試管液面處有明顯的突變暗區(qū),且暗區(qū)為封閉塊狀。采用OpenCV圖像處理函數(shù)庫中的Canny邊緣檢測算法[12]進(jìn)行邊緣提取,結(jié)果如圖9所示。
圖9 試管架位試管邊緣特征圖像
(4)試管邊緣圖像特征提取及液面識別[13]。根據(jù)液面邊緣為縱向長條線特征,對邊緣進(jìn)行橫向投影,從而得到特征直方圖,再通過對直方圖進(jìn)行寬度及稀疏度結(jié)合判定,進(jìn)而識別出液面位置。在圖10中,各小圖中間橫向位置的白底黑色標(biāo)識豎線為軟件識別算法輸出的液面位置識別結(jié)果,從直方圖可以直觀地看出標(biāo)識線精準(zhǔn)指向液面位置。
圖10 試管架位試管邊緣特征及直方圖像
將試管架位信息采集模塊豎直安裝于被檢測試管架的正對面,且相對距離在COMS攝像頭清晰成像工作焦距范圍內(nèi),如圖11所示。在實(shí)際應(yīng)用中,本模塊一般被安裝于全自動進(jìn)樣機(jī)構(gòu)內(nèi)(如圖12所示),在模塊正對面裝配純白色背景板,從而避免拍攝到的試管及試管架圖像背景復(fù)雜,提高圖像對比度,進(jìn)而增強(qiáng)圖像特征,保證識別信息的準(zhǔn)確率;同時,在對試管信息識別過程中,還需要進(jìn)樣機(jī)構(gòu)的旋轉(zhuǎn)支架進(jìn)行試管旋轉(zhuǎn)輔助,在旋轉(zhuǎn)過程中,試管架位信息采集模塊動態(tài)地對試管條碼、樣本顏色、樣本類型、樣本濁度、樣本液位高度等進(jìn)行識別及信息提取。
圖11 試管架位信息采集模塊實(shí)物安裝圖
圖12 全自動進(jìn)樣機(jī)構(gòu)內(nèi)安裝試管架位信息采集模塊示意圖
為測試試管架位信息采集模塊的識別效果,制作了一套試管及試管架測試樣本(如圖13、14所示),并將測試試管架放于如圖12所示的全自動進(jìn)樣機(jī)構(gòu)進(jìn)樣盤上。啟動進(jìn)樣機(jī)構(gòu)的老化程序后,進(jìn)樣機(jī)構(gòu)將試管架推送到傳送帶上,傳送帶將試管架送入試管架位信息采集模塊識別區(qū)進(jìn)行信息識別。在檢測完試管架上所有架位信息后,傳送帶又將試管架回退到最右邊初始位置,并進(jìn)入下一輪重復(fù)測試。進(jìn)樣機(jī)構(gòu)通過RS232串口將識別結(jié)果傳送到PC并保存。試管架位信息采集模塊試管識別結(jié)果見表1。實(shí)驗(yàn)對如圖13所示的試管架共進(jìn)行了4 165次重復(fù)測試,測試結(jié)果見表2。
表1 試管架位試管識別結(jié)果
表2 試管架位信息采集模塊測試結(jié)果
圖13 試管架位信息采集模塊測試樣品
圖14 試管架位信息采集模塊測試樣品背面
從測試結(jié)果來看,試管架位信息采集模塊對試管架條碼、試管有無、試管條碼、樣品有無、樣品顏色、樣品濁度有很高的識別準(zhǔn)確率,雖然樣品液位識別準(zhǔn)確率相對低,但仍能達(dá)到99.97%,基本能夠滿足醫(yī)療檢測應(yīng)用的要求。對測試結(jié)果進(jìn)行整理分析發(fā)現(xiàn),樣品液位識別錯誤主要來自于本模塊錯誤地將試管標(biāo)簽邊緣識別成了試管樣本液面,從而導(dǎo)致液位高度計算結(jié)果出錯,后續(xù)將引入其他識別算法以提高液位高度識別的準(zhǔn)確率。
本文以小型化、智能化為指導(dǎo)思想,設(shè)計了基于圖像識別技術(shù)的嵌入式試管架位信息采集模塊,可實(shí)現(xiàn)對醫(yī)療檢驗(yàn)設(shè)備被測試管架位信息的全自動識別。測試結(jié)果表明,本模塊有較高的識別準(zhǔn)確率,基本能夠滿足醫(yī)療檢測數(shù)據(jù)的可靠性要求。同時,本模塊結(jié)構(gòu)簡單、體積小、安裝及維護(hù)十分方便,且成本較低,具有很好的應(yīng)用前景及推廣價值。但是由于樣本顏色、標(biāo)簽背景、光照及透明度的多變性,液面特征提取容易受到影響,液體高度識別仍是后續(xù)需要持續(xù)關(guān)注及研究的問題。