左衛(wèi)剛,徐全飛
(1.山西管理職業(yè)學(xué)院信息管理系,山西 臨汾 041000;2.山西省農(nóng)業(yè)科學(xué)院農(nóng)業(yè)資源與經(jīng)濟(jì)研究所,山西 太原 030006)
食用菌生產(chǎn)及產(chǎn)品質(zhì)量安全的監(jiān)督管理是落實(shí)食品安全法律法規(guī)、探索食用菌產(chǎn)品質(zhì)量安全長效管理機(jī)制的重要措施[1]。食用菌產(chǎn)品的安全監(jiān)管主要涉及食用菌產(chǎn)品的農(nóng)藥殘留、獸藥殘留、有害微生物、毒素、化學(xué)毒物、重金屬、營養(yǎng)成分、品質(zhì)鑒定等方面的檢測和監(jiān)管,為食用菌農(nóng)產(chǎn)品檢測技術(shù)、質(zhì)量標(biāo)準(zhǔn)和質(zhì)量認(rèn)證技術(shù)等提供服務(wù)[2]。隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,手機(jī)、平板電腦等移動終端設(shè)備大量普及,而移動終端的軟件、APP等也發(fā)展迅猛,這給食用菌產(chǎn)品安全管理系統(tǒng)的開發(fā)設(shè)計(jì)提供了良好的載體。傳統(tǒng)的信息監(jiān)管系統(tǒng)也逐步被視頻監(jiān)控等先進(jìn)的可視化管理系統(tǒng)替代。視頻監(jiān)控、圖像顯示、記錄回放、遠(yuǎn)程監(jiān)管成為了監(jiān)管系統(tǒng)發(fā)展的新方向[3]。利用移動終端的軟件系統(tǒng)和視頻監(jiān)控的硬件系統(tǒng),可以組成一個新型的食用菌產(chǎn)品安全信息監(jiān)督管理系統(tǒng),在手機(jī)等移動終端上的操作也更加方便快捷。
食用菌產(chǎn)品安全信息監(jiān)督管理系統(tǒng)基于Vue 2.0框架設(shè)計(jì)出移動終端監(jiān)控管理APP[4]。移動終端APP共分為三大模塊:首頁、消息和用戶。首頁模塊主要用于展示食用菌安全管理系統(tǒng)的功能模塊;消息模塊主要是安全提示的消息列表;用戶模塊可以查看用戶賬號的基本信息,并有退出、登錄、切換賬號等用戶管理功能。
移動終端APP總體框架設(shè)計(jì)主要是包括前端框架的實(shí)現(xiàn)和后端服務(wù)器的實(shí)現(xiàn)2個部分,是從使用前端框架進(jìn)行前端界面的設(shè)計(jì)和后端框架搭建好后臺服務(wù),實(shí)現(xiàn)數(shù)據(jù)讀取。系統(tǒng)開發(fā)設(shè)計(jì)環(huán)境為:1)操作系統(tǒng)和開發(fā)平臺,Windows 10、Vue 2.0版本;2) 項(xiàng)目版本管理工具,Git和NPM;3) 開發(fā)工具,Sublime Text 3;4) 服務(wù)器,Nginx;5) 上線系統(tǒng),Linux操作系統(tǒng);6) 開發(fā)框架,MVVM+Vue 2.0+B/S。
前端采用Vue 2.0框架,與后端服務(wù)器的交互使用基于Ajax封裝的Axios,使用Nginx和Tomcat進(jìn)行反向代理進(jìn)行高并發(fā)處理,以實(shí)現(xiàn)監(jiān)管系統(tǒng)的高并發(fā)用戶訪問。
MVVM (model-view-view model,MVVM) 分層架構(gòu)[5]:整個監(jiān)控系統(tǒng)采用的是MVVM四層架構(gòu)進(jìn)行整體的設(shè)計(jì)。在Vue 2.0中應(yīng)用MVVM實(shí)現(xiàn)響應(yīng)式的架構(gòu),采用的B/S體系結(jié)構(gòu),傳統(tǒng)組件只是進(jìn)行靜態(tài)的渲染,基本上都需要進(jìn)行DOM操作,而Vue數(shù)據(jù)驅(qū)動基于MVVM進(jìn)行,其工作原理見圖1。
由圖1可知,頁面采用的Vue框架搭配CSS技術(shù);數(shù)據(jù)使用AJAX進(jìn)行一個數(shù)據(jù)的獲?。婚_發(fā)平臺使用NPM開發(fā)工具,采用Sublime Text 3進(jìn)行一個文本編寫;上線采用Linux操作系統(tǒng),搭配Nginx進(jìn)行產(chǎn)品的上線;搭配云服務(wù)器進(jìn)行互聯(lián)網(wǎng)訪問。
移動終端APP主要應(yīng)用了HTTP協(xié)議,使用A-jax進(jìn)行數(shù)據(jù)的獲取,Axios中的GET方法進(jìn)行一個數(shù)據(jù)訪問,而且數(shù)據(jù)整體都是采用JSON格式。在Axios在讀取的時(shí)候讀取數(shù)據(jù)就是JSON格式,不需要自己解析。
2.1.1 食用菌企業(yè)信息管理
主要查看食用菌產(chǎn)品生產(chǎn)的相關(guān)企業(yè)及其下級部門的詳細(xì)信息,如食用菌生產(chǎn)企業(yè)列表(包括部門列表)、企業(yè)詳細(xì)信息(如法人代表、領(lǐng)導(dǎo)簡介、企業(yè)名稱、所在地區(qū)、企業(yè)類型、聯(lián)系方式、地址、郵編等)。
2.1.2 地理信息系統(tǒng)
可以查看食用菌企業(yè)和下級部門的地圖位置信息及周邊環(huán)境、街道等信息。
2.1.3 安全生產(chǎn)實(shí)時(shí)監(jiān)測系統(tǒng)
查看實(shí)時(shí)的食用菌企業(yè)安全生產(chǎn)狀態(tài),具體功能包括圖層的選擇、所屬系統(tǒng)、圖例等監(jiān)測。
2.1.4 安全信息監(jiān)管系統(tǒng)
查看監(jiān)控監(jiān)測的實(shí)時(shí)數(shù)據(jù),并根據(jù)實(shí)時(shí)數(shù)據(jù)自動安全報(bào)警。選擇食用菌企業(yè)來查看所有的數(shù)據(jù)或下級部門的安全生產(chǎn)數(shù)據(jù),刷新頻率可自動設(shè)置(默認(rèn)10 s),顯示的安全信息有:監(jiān)測點(diǎn)名稱、所屬企業(yè)、安裝位置、實(shí)時(shí)數(shù)據(jù)、監(jiān)控狀態(tài)等。
2.1.5 人員定位系統(tǒng)
查看安全重點(diǎn)監(jiān)控人員的定位實(shí)時(shí)數(shù)據(jù)和報(bào)警數(shù)據(jù),安全重點(diǎn)監(jiān)控人員包括:安全事故責(zé)任者和當(dāng)事人、重復(fù)違章人員、新進(jìn)企業(yè)員工、專職安全管理人員,定位刷新頻率可自動設(shè)置(默認(rèn)30 s),顯示的定位信息有:企業(yè)、姓名、所處位置、是否報(bào)警(無故脫離安全監(jiān)管區(qū)域)。
2.1.6 實(shí)時(shí)視頻監(jiān)控系統(tǒng)
安全信息的視頻圖像采集、視頻傳輸和遠(yuǎn)程監(jiān)控,可以隨時(shí)切換視頻畫面、設(shè)置視頻監(jiān)控參數(shù)。
2.1.7 安全隱患排查系統(tǒng)
主要包括隱患發(fā)現(xiàn)和隱患現(xiàn)場2個功能。隱患發(fā)現(xiàn)功能:用戶通過手機(jī)對發(fā)現(xiàn)的安全隱患進(jìn)行現(xiàn)場拍照、錄音、拍攝視頻等媒體記錄操作,填寫基本的隱患發(fā)現(xiàn)信息后提交到監(jiān)控系統(tǒng)平臺。隱患現(xiàn)場功能:用戶通過手機(jī)APP對隱患處理過程中各環(huán)節(jié)的現(xiàn)場情況進(jìn)行記錄然后上傳。
移動終端APP的后端主要功能模塊有:1) 數(shù)據(jù)傳輸,即通過Ajax進(jìn)行JSON數(shù)據(jù)傳輸和使用Nginx進(jìn)行數(shù)據(jù)跨域問題的解決;2) APP上線,即在Linux操作系統(tǒng)中使用Nginx進(jìn)行APP的發(fā)布和上線,實(shí)現(xiàn)通過阿里云進(jìn)行云端訪問;3) git版本管理,即使用GitHub倉庫和git版本管理工具進(jìn)行代碼的版本控制。
由于移動終端APP上的數(shù)據(jù)是從服務(wù)器中獲取的,所以需要考慮的是從服務(wù)器是否能夠正常獲取數(shù)據(jù)以及上線是否能夠正常訪問和多個用戶高并發(fā)的情況,因此移動終端的APP后端采用JSON數(shù)據(jù)格式。
移動終端APP服務(wù)器主要從用戶數(shù)量、傳輸數(shù)據(jù)類型、功能等一系列方面進(jìn)行考慮。1)考慮到該APP是食用菌產(chǎn)品安全信息的監(jiān)管系統(tǒng),可能同時(shí)訪問的人數(shù)較高,而且視頻傳輸?shù)臄?shù)據(jù)量比較大;2) 移動終端APP主要的數(shù)據(jù)都是從服務(wù)器獲取,傳輸?shù)臄?shù)據(jù)多為JSON文件類型;3)從功能方面主要是存儲與食用菌產(chǎn)品安全相關(guān)的視頻、圖片和文字信息,存儲容量較大。綜合以上幾點(diǎn),選擇Nginx服務(wù)器作為APP的服務(wù)器。Nginx解決了高并發(fā)的問題,通過異步、非阻塞、使用epoll模型和反向代理來實(shí)現(xiàn)負(fù)載均衡;通過反向代理和epoll模型讓大量請求同時(shí)到來時(shí)可以通過代理服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。而該APP直接訪問JSON文件在Nginx中也可以直接進(jìn)行配置,讓UI直接進(jìn)行JSON文件的訪問,能夠滿足安全監(jiān)管系統(tǒng)的需求。
安全信息監(jiān)管系統(tǒng)的視頻監(jiān)控系統(tǒng)主要包含3個功能模塊:1)視頻采集模塊:完成安全信息的視頻圖像采集、視頻編碼和數(shù)據(jù)發(fā)送;2)視頻傳輸模塊:完成安全信息數(shù)據(jù)在網(wǎng)絡(luò)上中的傳輸;3)遠(yuǎn)程監(jiān)控模塊:完成數(shù)據(jù)接收、數(shù)據(jù)解碼和數(shù)據(jù)最終顯示在移動終端設(shè)備上。
視頻采集模塊主要是通過OpenCV模塊進(jìn)行攝像頭數(shù)據(jù)采集,具體步驟如下:1)使用cv2.Video-Capture(Camera.video_source) 函數(shù)連接到要監(jiān)控的攝像頭;2) 再用_,img=camera.read() 按幀讀取視頻。其中_是布爾值,如果讀取幀是正確的則返回True,如果文件讀取到結(jié)尾,它的返回值就為False。frame就是每一幀的圖像,是個三維矩陣;3)再使用cv2.imwrite() 和cv2.imencode() 將攝像頭拍攝到的圖像轉(zhuǎn)換成.jpg格式保存到設(shè)置的存儲路徑video_config.txt中,將視頻的存儲格式轉(zhuǎn)換是為了將數(shù)據(jù)進(jìn)行壓縮。否則傳輸?shù)臄?shù)據(jù)量太大,通常的外網(wǎng)訪問基本沒法承受。最后讓客戶端使用Web-Socket使得客戶端和服務(wù)器端之間的數(shù)據(jù)交換變得更加簡單。允許服務(wù)器端主動向客戶端發(fā)起連接請求,并且只需要完成一次握手就可以成功創(chuàng)建持久性連接,并進(jìn)行雙向數(shù)據(jù)傳輸。
視頻傳輸模塊主要使用的是WebSocket來進(jìn)行數(shù)據(jù)交換。WebSocket是在HTML5上提供的一種在單個TCP連接上進(jìn)行的全雙工通訊協(xié)議。瀏覽器通過JavaScript向服務(wù)器發(fā)出建立Websocket連接請求,連接建立以后客戶端就可以和服務(wù)器端通過TCP連接進(jìn)行直接的數(shù)據(jù)交換。它和傳統(tǒng)的HTTP報(bào)文不同的是由以下幾個參數(shù)設(shè)置如下。
遠(yuǎn)程監(jiān)控模塊通過使用WebSocket模塊的TCP協(xié)議將服務(wù)器發(fā)來的數(shù)據(jù)進(jìn)行解碼。解碼使用的函數(shù)是cv2.imdencode(),將幀還原成圖片,并且還可以根據(jù)配置文件的參數(shù)改變來改變整個監(jiān)控的參數(shù),如圖片的分辨率、圖像的像素還有服務(wù)器IP。在本次設(shè)計(jì)中的服務(wù)器端參數(shù)如下。
因?yàn)榭蛻舳诉B接服務(wù)器端有可能是多個線程,request會因?yàn)槎鄠€請求發(fā)生數(shù)據(jù)錯亂,所以使用了單進(jìn)程單線程(多協(xié)程)解決資源錯亂問題。優(yōu)先使用協(xié)程,如果是單線程多協(xié)程導(dǎo)入獲取協(xié)程唯一標(biāo)識。
食用菌產(chǎn)品的安全問題一直是人們關(guān)注的熱點(diǎn)。將先進(jìn)的互聯(lián)網(wǎng)技術(shù)應(yīng)用到食用菌安全信息監(jiān)管中是一種行之有效的監(jiān)管辦法,手機(jī)等移動終端的普及也使得安全監(jiān)管系統(tǒng)更多的以APP的形式存在,極大地方便了人們的使用。人們可以從手機(jī)上獲取食用菌的菌種、栽培、采摘、加工生產(chǎn)、包裝運(yùn)輸和銷售等全產(chǎn)業(yè)鏈上的安全信息。政府監(jiān)管部門、食用菌供應(yīng)鏈參與企業(yè)和消費(fèi)者都可以通過手機(jī)掃描二維碼、遠(yuǎn)程查看監(jiān)控錄像、傳遞安全信息等手段,方便快捷地對食用菌產(chǎn)品安全信息進(jìn)行監(jiān)管。但監(jiān)管系統(tǒng)只是提供了技術(shù)和數(shù)據(jù),食用菌產(chǎn)品的安全還需要各方參與者共同努力,為食用菌產(chǎn)品的安全體系建設(shè)獻(xiàn)計(jì)獻(xiàn)策。