張勝茂,樊 偉*,張 衡,楊勝龍,沈介然,鄒國華
(1.中國水產(chǎn)科學(xué)研究院東海水產(chǎn)研究所,農(nóng)業(yè)農(nóng)村部遠(yuǎn)洋與極地漁業(yè)創(chuàng)新重點(diǎn)實(shí)驗室,上海 200090; 2.深圳市聯(lián)成遠(yuǎn)洋漁業(yè)有限公司,廣東深圳 518035;3.上海峻鼎漁業(yè)科技有限公司,上海 200090;)
近年來視頻監(jiān)控技術(shù)發(fā)展迅速,在自動化生產(chǎn)[1]、無人駕駛[2]、自動售貨[3]等諸多領(lǐng)域得到應(yīng)用。視頻監(jiān)控技術(shù)借助計算機(jī)強(qiáng)大的數(shù)據(jù)處理能力[4],提取視頻中的語義信息服務(wù)于生產(chǎn)、生活,有效地促進(jìn)了社會的信息化。在海洋漁業(yè)捕撈生產(chǎn)過程中,使用視頻監(jiān)控系統(tǒng)記錄作業(yè)過程,輔助漁業(yè)安全生產(chǎn)與管理[5],為漁業(yè)企業(yè)帶來便利,使?jié)O船管理有序、合理、高效[6-7]。
視頻影像中出現(xiàn)的標(biāo)語、告示牌、字幕等文字信息是重要的審查內(nèi)容,提取其中的文字信息進(jìn)行監(jiān)管可以有效避免出現(xiàn)違規(guī)、違法信息[8-9]。視頻中出現(xiàn)的時間、位置、名稱等信息,在視頻歸檔管理中也發(fā)揮了重要作用[10]。遠(yuǎn)洋捕撈漁船在捕撈過程中,為了保障漁船安全生產(chǎn)、記錄漁船作業(yè)、監(jiān)控漁船狀態(tài),在漁船前后甲板和左右舷安裝有視頻監(jiān)控。監(jiān)控系統(tǒng)與GPS(Global Positioning System)終端連接,在視頻影像中嵌入了時間、位置、航向、航速等信息。本文通過jTessBoxEditor軟件制作視頻圖片素材樣本,用tesseract軟件訓(xùn)練視頻中嵌入的字符,生成traineddata字庫,最后用Python編程提取遠(yuǎn)洋捕撈漁船監(jiān)控視頻文字信息,為視頻存檔和漁業(yè)管理提供參考。
漁船安裝了大華公司IPC(IPCamera)監(jiān)控系統(tǒng),通過監(jiān)控主機(jī)連接攝像頭、GPS等設(shè)備,采集漁船作業(yè)圖像、實(shí)時GPS、人員活動和漁船行駛狀況等信息,實(shí)現(xiàn)對船舶進(jìn)行全方位監(jiān)控,各種信息數(shù)據(jù)本地存儲。漁船上安裝4臺攝像機(jī),船載顯示屏實(shí)時顯示視頻影像,為了保證漁船及人員的安全,攝像機(jī)的覆蓋范圍要可達(dá)95%以上。
漁船監(jiān)控系統(tǒng)實(shí)現(xiàn)了采集、傳輸、數(shù)據(jù)存儲、管理功能(見圖1)。監(jiān)控主機(jī)采用壁裝安裝方式,前端攝像機(jī)通過網(wǎng)線直接連入網(wǎng)絡(luò),通過IP(Internet Protocol)包傳輸視頻信號和控制信號。監(jiān)控主機(jī)實(shí)現(xiàn)對前端設(shè)備的集中管理,視頻流媒體的存儲,系統(tǒng)功能包括系統(tǒng)配置、實(shí)時監(jiān)視、視頻查詢、視頻回放、實(shí)時控制、報警管理、抓圖和抓錄等功能。遠(yuǎn)程終端通過衛(wèi)星通信,也可獲取監(jiān)控信息。
遠(yuǎn)洋捕撈漁船安裝有捕撈監(jiān)控系統(tǒng),監(jiān)控位置主要包括左右舷、前甲板、后甲板(見圖2)。1號攝像機(jī)位于漁船右舷,用于拍攝漁線回收、金槍魚捕撈,以及漁船卸載漁獲;2號攝像機(jī)位于漁船左舷,拍攝金槍魚漁獲的進(jìn)出倉;3號攝像機(jī)位于前甲板頂部,鏡頭方向向后,拍攝甲板上金槍魚的簡單加工;4號攝像機(jī)位于后甲板,鏡頭方向向前,拍攝延繩釣漁線收放情況。
監(jiān)控視頻自動保存,每天動態(tài)生成一個文件夾,各視頻監(jiān)控每小時保存一次,保存文件名為“船名-攝像頭編號-年-月-日-時-分-經(jīng)度-緯度”,保存格式為dav。視頻圖像上有UTC(Universal Time Coordinated)時間、船名、經(jīng)度、緯度、航向、航速信息。
圖1 漁船視頻監(jiān)控系統(tǒng)結(jié)構(gòu)示意圖Fig.1 Structure diagram of fishing boat video monitoring system
圖2 漁船監(jiān)控船載顯示Fig.2 Display interface of fishing vessel monitoring on board
本文用軟件jTessBoxEditor-2.2.1(https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/)采集訓(xùn)練用的樣本,該軟件由Java開發(fā),因此需要安裝Java運(yùn)行環(huán)境(JRE,Java Runtime Environment,http://www.oracle.com/)。在DOS中運(yùn)行命令“start javaw -Xms128m -Xmx1024m -jar D:jTessBoxEditor-2.2.1jTessBoxEditorjTessBoxEditor.jar”打開界面。
用opencv-python的VideoCapture()函數(shù)打開視頻數(shù)據(jù),然后讀取監(jiān)控視頻的幀輸出圖片,本文所用視頻輸出的圖片分辨率為704×576,水平和垂直分辨率都為96dpi,位深為24。在整個幀中,通過frame [19:51,456:691]截取時間圖片,frame[451:572,565:696]截取航行信息圖片(船名、經(jīng)緯度、航向和航速),然后保存。輸出多張圖片有助于提高識別精度。樣本處理對圖片做了截取處理(見圖3a),其目的是為了在輸出文字框選中(makebox)時,減少無效的文本框的生成,提高人工標(biāo)注速度??紤]到一天中光強(qiáng)變化與夜間漁船燈光的影響,按照每小時提取一次圖片的方式,獲取到816個標(biāo)注樣本,用于模型訓(xùn)練。
樣本圖片輸出完成后(圖3a),使用jTessBoxEditor軟件tools菜單中Merge TIFF合并輸出的圖片,圖片命名格式[lang].[fontname].exp[num].tif,其中l(wèi)ang為語言名稱,fontname為字體名稱,num為序號,如圖片訓(xùn)練自定義字庫為vessel(vessel time position navigation)字體名為font,則合并后圖片命名為vessel.font.exp0.tif。用命令(1)生成字符框vessel.font.exp0.box文件(表1),再用Box Editor中的Open打開合并后的圖片,進(jìn)行文字矯正(圖3b)。根據(jù)圖片中框選的內(nèi)容修改char,如果字符不完整就輸入空格。
在文件夾內(nèi),新建字體特征文本文件,名為font_properties(無擴(kuò)展名),用記事本打開,寫入內(nèi)容格式為
用命令(2)生成字符特征TR文件,用命令(3)從所有文件中提取字符,生成一個unicharset文件,用命令(4)聚集字符特征,生成unicharset文件,用命令(5)生成inttemp文件,用命令(6)合并所有tr文件,生成normproto。訓(xùn)練過程中會創(chuàng)建5個文件:shapetable,normproto,inttemp,pffmtable和unicharset,以vessel.作為前綴對5個文件進(jìn)行重命名,即vessel.shapetable,vessel.normproto,vessel.inttemp,vessel.pffmtable和vessel.unicharset,便于文件統(tǒng)一操作。用命令(7)合并5個文件,生成vessel.traineddata,該文件是訓(xùn)練好的字庫文件,把它復(fù)制到Tesseract-OCR安裝目錄下的tessdata文件夾。
表1 文本訓(xùn)練的命令行Tab.1 Command line for text training
圖3 圖片字符框選與文字標(biāo)注Fig.3 Picture character box selection and text annotation注:(a)圖片嵌入的文字信息;(b)人工交互標(biāo)注文字Note: (a) text messages embedded in picture; (b) manual interactive text annotation
本文編程語言為Python 3.6,文字識別工具為tesseractV5.0。通過opencv-python讀取到視頻幀,設(shè)置范圍截取含有文字的部分,存儲為圖片(見圖4a),為了提高文字識別的準(zhǔn)確率,用cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)函數(shù),將RGB彩色圖片轉(zhuǎn)換為灰度圖存儲在img_gray(見圖4b),再設(shè)置閾值,用cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)函數(shù)把圖片轉(zhuǎn)為二進(jìn)制圖,存儲在img_binary(見圖4c)。最后調(diào)用pytesseract.image_to_string(img_binary, lang='vessel')返回字符串,獲取的字符串格式如表2。
圖4 圖片中的漁船位置與航行狀態(tài)信息Fig.4 Fishing vessel position and navigation status information in the picture注:(a)截取的原始圖片,(b)灰度圖片(c)設(shè)置閾值后的圖片Note:(a)original image captured,(b)gray image,(c)image after threshold setting
提取的信息包括時間、經(jīng)緯度、航向、航速。視頻中記錄的時間為UTC(Universal Time Coordinated)時間;經(jīng)度和緯度為“度分”格式,分精確到兩位小數(shù);航向用方向角記錄,數(shù)值為整型;航速為精確到1位的小數(shù),單位為節(jié)(kn)。
按1分鐘間隔,提取了2019—02—22 23:00到2019—02—23 15:00的16個小時的960條記錄,數(shù)據(jù)內(nèi)容包括船名、經(jīng)度、緯度、航速和航向,經(jīng)過與原始圖片比對沒有發(fā)現(xiàn)提取錯誤的記錄。圖5是這段時間的軌跡,顏色由淺到深表示航速由小到大,箭頭指向表示漁船航向。
遠(yuǎn)洋漁業(yè)捕撈中EMS是國際漁業(yè)組織積極推廣的漁船監(jiān)控系統(tǒng),系統(tǒng)中的視頻文字信息提取是其重要功能之一。jTessBoxEditor官方版界面美觀大方,功能強(qiáng)勁實(shí)用,可以提高Tesseract-OCR文字識別準(zhǔn)確率。在本文中,使用該軟件制作了文字樣本,用于文字識別庫的訓(xùn)練。Tesseract OCR是一個遵循Apache Licene 2.0的OCR開源軟件,基于該軟件訓(xùn)練出遠(yuǎn)洋捕撈漁船監(jiān)控視頻中的時間、位置、航速、航向等文字識別庫。最后用Python編程提取出遠(yuǎn)洋捕撈漁船監(jiān)控視頻中960條文字記錄,經(jīng)過人工比對提取的位置數(shù)據(jù)全部正確。
圖5 漁船位置與航行狀態(tài)Fig.5 Fishing vessel position and navigation status
表2 視頻文字串格式Tab.2 String format in the video
文字信息提取在遠(yuǎn)洋捕撈漁船電子監(jiān)控視頻處理中,僅是數(shù)據(jù)獲取工作的一部分,接下來的工作中將針對視頻中金槍魚抓取、浮球回收、魚類識別、滾筒轉(zhuǎn)動放線等狀態(tài),運(yùn)用深度學(xué)習(xí)算法進(jìn)行信息提取。