對(duì)??礕igE相機(jī)以Python程序連接方法的研究
0 引言
在工業(yè)上的視覺(jué)處理任務(wù)中,工業(yè)相機(jī)作為視覺(jué)任務(wù)的起點(diǎn),起到采集圖像數(shù)據(jù)的作用,肩負(fù)重要的職能。工業(yè)相機(jī)的款式多種多樣,其中,區(qū)分它們的種類重要的一點(diǎn)就是相機(jī)接口標(biāo)準(zhǔn)。按照接口標(biāo)準(zhǔn)不同,工業(yè)相機(jī)常用的數(shù)字接口有GigE、Camera Link、USB3.0、CoaXPress 等類型,不同相機(jī)接口在數(shù)據(jù)傳輸方式、傳輸速度、可靠性等方面并不相同,其中GigE 接口可以滿足廉價(jià)的長(zhǎng)距離高傳輸量的數(shù)據(jù)傳輸,相比于其他傳輸效果性價(jià)比更高,因此在工業(yè)上得到廣泛應(yīng)用。但GigE 相機(jī)相比于其他類型通信結(jié)構(gòu)不同,無(wú)法被常見(jiàn)的通用調(diào)用指令所使用,需要安裝專業(yè)的驅(qū)動(dòng)程序,且對(duì)硬件有特殊的要求。為了實(shí)現(xiàn)視覺(jué)處理功能,需要將工業(yè)相機(jī)連接至計(jì)算機(jī)主機(jī)上,對(duì)軟硬件進(jìn)行設(shè)計(jì)與配置,以達(dá)到傳輸數(shù)據(jù)與指令的效果。這一部分的驅(qū)動(dòng)程序一般由廠家提供[1]。
將相機(jī)與計(jì)算機(jī)連接后,還需要將圖像數(shù)據(jù)導(dǎo)入控制軟件中,從而自動(dòng)獲取圖像數(shù)據(jù),進(jìn)行視覺(jué)處理,同時(shí)為了根據(jù)實(shí)際情況進(jìn)行修正,還需要實(shí)現(xiàn)讓控制軟件輸出控制指令和參數(shù)到工業(yè)相機(jī)的職能。由于GigE 相機(jī)在傳輸數(shù)據(jù)方面的特殊性,不同廠家需要自己設(shè)計(jì)自己的連接端口,這使得各常見(jiàn)提供的連接程序各不相同,同時(shí)由于多數(shù)情況下工業(yè)會(huì)采用C 或C++ 程序來(lái)編寫(xiě)控制軟件,一般廠家對(duì)GigE 相機(jī)連接Python 程序的軟硬件方法雖然會(huì)進(jìn)行開(kāi)發(fā),但是在實(shí)際操作中缺少詳細(xì)的說(shuō)明文檔以及足夠的開(kāi)發(fā)實(shí)例[2]。
本文介紹了使用??礕igE 相機(jī)與Python 程序進(jìn)行連接使用的項(xiàng)目經(jīng)驗(yàn),可以為同類型的任務(wù)提供參考。
1 ??礕igE相機(jī)的硬件連接與驅(qū)動(dòng)配置
1)對(duì)于GigE 相機(jī)來(lái)說(shuō),其特殊的接口結(jié)構(gòu)使得其在硬件連接方面具有一定優(yōu)勢(shì),具體的硬件連接方案有兩種:
使用1 根電纜線將GigE 相機(jī)與網(wǎng)絡(luò)交換機(jī)或者其他有網(wǎng)絡(luò)交換機(jī)功能的設(shè)備連接起來(lái),供電由交換機(jī)進(jìn)行,然后將交換機(jī)與上位計(jì)算機(jī)連接,進(jìn)行數(shù)據(jù)傳輸。這樣做的好處是相機(jī)只需要連接一根線就可以同時(shí)滿足供電和傳輸數(shù)據(jù)的要求,當(dāng)相機(jī)安裝在復(fù)雜的現(xiàn)場(chǎng)時(shí),單線傳輸能夠有效降低布線成本,提高系統(tǒng)的穩(wěn)定性。另一方面,單線傳輸?shù)姆椒梢詫⒍鄠€(gè)相機(jī)連接在同一個(gè)交換機(jī)上,再由交換機(jī)對(duì)主機(jī)進(jìn)行溝通,擴(kuò)張接口比較容易,缺點(diǎn)是該方法對(duì)電纜線的使用要求較高,需要能夠同時(shí)完成兩種傳輸要求的電纜線,且一臺(tái)相機(jī)使用的可用帶寬有限,約為125 Mbyte/s;
2)使用一根電纜線連接GigE 相機(jī)與計(jì)算機(jī)用于傳輸數(shù)據(jù),再使用一根電源線連接GigE 相機(jī)與電源,此種連接方式的成本要求低,對(duì)電纜的可靠性要求更低,傳輸數(shù)據(jù)的帶寬不會(huì)受到嚴(yán)格限制,但增加一根線提高了布線難度,降低了可靠性。
由于本項(xiàng)目對(duì)連接線的布線要求不高,出于節(jié)約成本的考慮,本次項(xiàng)目中采取了兩根線連接GigE 相機(jī)的方案。
除了與計(jì)算機(jī)主機(jī)的連接,還要考慮相機(jī)本身的工作問(wèn)題,為了保證相機(jī)的正常工作,一方面需要保證電源的安全穩(wěn)定供應(yīng),另一方面需要配備充足的光照,且盡量不要受到外界光照過(guò)強(qiáng)的影響。在傳輸方面,傳輸電纜需要保證至少能夠傳輸千兆大小的數(shù)據(jù),從而使得圖像數(shù)據(jù)能夠穩(wěn)定傳輸。
為了使用GigE 相機(jī),需要在??倒倬W(wǎng)下載對(duì)應(yīng)的驅(qū)動(dòng)程序并進(jìn)行安裝,其中不同客戶端所使用的安裝程序是不同的,且安裝方式有一定差別。需要注意的是Windows 客服端的驅(qū)動(dòng)程序在安裝時(shí)會(huì)自動(dòng)設(shè)置網(wǎng)卡為巨幀傳輸,Linux 系統(tǒng)則需要自己進(jìn)行設(shè)置,可以選擇在每次使用之前進(jìn)行設(shè)置,也可以直接對(duì)常用網(wǎng)卡進(jìn)行永久設(shè)置。
圖1 相機(jī)連接圖
安裝后按照說(shuō)明書(shū)配置IP 地址,并使用??堤峁┑目刂栖浖M(jìn)行調(diào)試,保證能夠順利連接工作。具體的連接過(guò)程需要經(jīng)過(guò)如下階段:
1)確認(rèn)連接。對(duì)相機(jī)連接,首先需要確認(rèn)物理連接成功,此時(shí)需要先查看相機(jī)上的指示燈,如果其由紅色變?yōu)樗{(lán)色,說(shuō)明電纜和電源線正常連接,否則需要檢查連線;
2)設(shè)置IP 地址。如指示燈沒(méi)有問(wèn)題,開(kāi)始設(shè)置計(jì)算機(jī)中與相機(jī)連接的本地連接端口,將其IP 設(shè)定為固定值。之后打開(kāi)MVS 控制軟件,等待列表上出現(xiàn)對(duì)應(yīng)相機(jī)。首次連接需要較常的時(shí)間,之后再使用連接會(huì)很快。出現(xiàn)相機(jī)后,此時(shí)應(yīng)當(dāng)顯示黃色三角,意為IP 地址不屬于同一網(wǎng)段,不能正常通信。這時(shí)雙擊相機(jī)即可修改相機(jī)IP,將相機(jī)IP 設(shè)置為同一網(wǎng)段的不同IP 地址即可。如果連接順利,相機(jī)將變?yōu)榭捎脿顟B(tài);
3)連接調(diào)試。當(dāng)相機(jī)為可用狀態(tài)時(shí)可以進(jìn)行調(diào)試了。雙擊相機(jī),即可正常打開(kāi)相機(jī)界面,通過(guò)控制界面可以完成打開(kāi)相機(jī)、設(shè)置相機(jī)參數(shù)等任務(wù),以檢測(cè)是否能夠正常通信。需要注意的是相機(jī)默認(rèn)設(shè)置曝光時(shí)間為0,因此剛打開(kāi)時(shí)相機(jī)畫(huà)面是漆黑的,設(shè)置一個(gè)正常的曝光時(shí)間即可。使用控制軟件能夠較為方便地測(cè)試相機(jī)狀態(tài),建議在每次對(duì)相機(jī)連接參數(shù)進(jìn)行修改(如IP 地址)以及在新計(jì)算機(jī)連接相機(jī)時(shí)先使用控制軟件進(jìn)行測(cè)試。
2 ??礕igE相機(jī)的Python程序連接使用
連接調(diào)試完成后,接下來(lái)就可以使用Python 程序調(diào)取運(yùn)行相機(jī)了。GigE 相機(jī)的調(diào)取無(wú)法通過(guò)常用包如opencv 完成,因此要依賴海康專門(mén)開(kāi)發(fā)的用于調(diào)取運(yùn)行Gige 相機(jī)的Python 包進(jìn)行連接使用。??到o出了一些簡(jiǎn)單的實(shí)例程序演示如何利用Python 包中的函數(shù)使用相機(jī),??到o出的實(shí)例程序中,調(diào)取并使用相機(jī)要經(jīng)過(guò)如下階段[3]:
2.1 發(fā)現(xiàn)并連接設(shè)備
程序首先需要檢索并連接設(shè)備,這個(gè)階段首先是找尋可連接的設(shè)備,輸出可連接設(shè)備的信息,之后根據(jù)輸入的需要連接的設(shè)備IP 進(jìn)行連接。??到o出了幾種連接方式,包括直接使用IP 連接,或者查找同一網(wǎng)段下可用于連接的相機(jī),根據(jù)查找到的參數(shù)連接。
2.2 打開(kāi)設(shè)備并設(shè)置參數(shù)
當(dāng)確定了連接的設(shè)備后,接下來(lái)為了打開(kāi)相機(jī),首先要?jiǎng)?chuàng)建相機(jī)實(shí)例和對(duì)應(yīng)的句柄,這是使用程序?qū)ο鄼C(jī)進(jìn)行操作的必要載體,1 個(gè)相機(jī)實(shí)例同時(shí)只能打開(kāi)1 個(gè)相機(jī)。將相機(jī)實(shí)例與相機(jī)綁定后,就可以打開(kāi)設(shè)備。為了獲取需要的圖片數(shù)據(jù),還需要對(duì)相機(jī)的參數(shù)進(jìn)行設(shè)置,實(shí)例程序中給出的調(diào)整包括探測(cè)網(wǎng)絡(luò)最大包大小,設(shè)置觸發(fā)模式和獲取數(shù)據(jù)包大小。其中獲取數(shù)據(jù)包大小對(duì)后面的獲取圖像數(shù)據(jù)有很大幫助。
2.3 獲取圖片數(shù)據(jù)
GigE 相機(jī)獲取圖片數(shù)據(jù)的方式是取流,即向相機(jī)發(fā)送信號(hào),獲取最近一幀的圖片數(shù)據(jù)傳回。為了獲取圖片數(shù)據(jù),首先要打開(kāi)取流,此時(shí)相機(jī)才開(kāi)始啟動(dòng)。之后再獲取所需的數(shù)據(jù),主要包括兩部分,一部分是圖像數(shù)據(jù)的本體,另一部分是圖像數(shù)據(jù)的參數(shù),包括類型大小等。直接獲取的圖像數(shù)據(jù)是1 個(gè)單一的矩陣數(shù)據(jù),如果要顯示出真實(shí)數(shù)據(jù)需要根據(jù)參數(shù)信息對(duì)其進(jìn)行轉(zhuǎn)換。獲取圖像數(shù)據(jù)的方式分為主動(dòng)取流和被動(dòng)取流兩種,主動(dòng)取流會(huì)向相機(jī)發(fā)送信號(hào),之后獲得傳回的下一幀數(shù)據(jù),而被動(dòng)取流不發(fā)送信號(hào),被動(dòng)接受下一幀數(shù)據(jù)。實(shí)際使用起來(lái)效果差距不大。實(shí)例還提供了使用句柄進(jìn)行連續(xù)取圖片的方法,可以提高獲取圖片的速度,連續(xù)取圖片就可以達(dá)到視頻的效果。
2.4 停止獲取并關(guān)閉設(shè)備
使用完相機(jī)后,最后需要關(guān)閉相機(jī),如果對(duì)相機(jī)直接采用斷電等操作,會(huì)使一部分已經(jīng)設(shè)置過(guò)的參數(shù)直接失效,下次需要重新設(shè)置。關(guān)閉設(shè)備主要分為三步,首先停止取流,不再獲取圖片,之后關(guān)閉設(shè)備,最后如果使用了句柄還需要銷毀句柄。
示例程序僅僅是對(duì)功能進(jìn)行一定展示,為了實(shí)際使用需要在原有的實(shí)例基礎(chǔ)上針對(duì)項(xiàng)目要求進(jìn)行改進(jìn)。要注意的是使用相機(jī)需要調(diào)用??堤峁┑陌募?,這些包文件可以移動(dòng)至任意位置。通信程序依賴于包文件,需要對(duì)包文件進(jìn)行調(diào)用,比較簡(jiǎn)單的方法是將程序與包文件以與實(shí)例程序類似的關(guān)系放置,調(diào)用起來(lái)比較簡(jiǎn)單。在調(diào)用了包文件后,主要改動(dòng)如下:
1)連接階段將IP 地址確定為設(shè)備使用的地址進(jìn)行連接??梢允褂檬孪仍O(shè)定好的Ip 地址進(jìn)行連接,也可以讀取可連接設(shè)備的IP 進(jìn)行連接;
2)設(shè)置參數(shù)階段的改變。在設(shè)置參數(shù)階段,比較重要的改變包括對(duì)曝光時(shí)間及一些必要參數(shù)的預(yù)設(shè)值,以及改變圖像的輸入格式。為了獲得所需的圖像,需要對(duì)相機(jī)的一些參數(shù)進(jìn)行設(shè)置,如白平衡、曝光時(shí)間、亮度等。海康提供了修改參數(shù)的函數(shù),但其接口比較簡(jiǎn)單,不方便使用,故需要對(duì)其編寫(xiě)專門(mén)的函數(shù),以提高調(diào)用速度。改變圖像的輸入格式更為重要。預(yù)設(shè)的圖像格式為黑白圖像,往往不能滿足項(xiàng)目要求,具體圖像要求要根據(jù)項(xiàng)目需要來(lái)設(shè)置。由于圖像在不同格式下的數(shù)據(jù)大小和意義不同,對(duì)圖像數(shù)據(jù)的操作也需要根據(jù)輸入格式進(jìn)行對(duì)應(yīng)的改變;
3)獲取所需的圖片。示例程序給的處理圖片的功能并不完善,為了獲取所需的圖片需要對(duì)其進(jìn)行改造。首先是添加圖片轉(zhuǎn)換的模塊,新得到的圖片數(shù)據(jù)并沒(méi)有進(jìn)行轉(zhuǎn)換,首先要將其轉(zhuǎn)換成常見(jiàn)的圖片格式,這一情況下要根據(jù)所讀取的圖像類型而定,根據(jù)官方提供的圖像類名對(duì)應(yīng)表,根據(jù)相機(jī)結(jié)構(gòu)體讀取出的實(shí)際類型,對(duì)圖像類型進(jìn)行對(duì)應(yīng)的格式變化。為了方便接下來(lái)的處理,還應(yīng)在圖像轉(zhuǎn)換后添加格式替換的函數(shù),轉(zhuǎn)換為統(tǒng)一的格式。獲得對(duì)應(yīng)的圖像后,要根據(jù)實(shí)際需求進(jìn)行操作,最常見(jiàn)的操作就是保存圖片和展示圖片,這些操作使用常用的包即可完成,為了更好地使用圖像,可以在調(diào)用時(shí)對(duì)格式大小進(jìn)行一定調(diào)整。為了完成實(shí)時(shí)操作,還需要調(diào)用上一階段改變系統(tǒng)參數(shù)的函數(shù),如此做到實(shí)時(shí)檢測(cè)調(diào)控。如果需要對(duì)獲取圖片的情況做到實(shí)時(shí)預(yù)覽,需要使用句柄創(chuàng)建進(jìn)程進(jìn)行操作。需要注意的是相機(jī)采集圖像的頻率與獲取圖片沒(méi)有關(guān)系,因此同時(shí)使用多個(gè)線程獲取圖片并不會(huì)影響到相機(jī)的使用效率。
4)關(guān)閉設(shè)備的過(guò)程不用調(diào)整太多,但是如之前使用了句柄方法實(shí)現(xiàn)多線程讀取照片的功能后,應(yīng)在關(guān)閉階段加入結(jié)束句柄的語(yǔ)句,做到安全退出。在使用相機(jī)時(shí),還有一些要點(diǎn)需要注意。
1)句柄使用關(guān)閉后應(yīng)當(dāng)重啟再使用,否則可能發(fā)生未知的錯(cuò)誤;
2)Windows 系統(tǒng)和Linux 系統(tǒng)中??堤峁┑陌募煌荒芑煊?,但可以調(diào)用相同的函數(shù),因此在不使用沖突函數(shù)的情況下程序可以在兩端同時(shí)使用。海康的Linux 示例程序中使用了Windows 不提供的包,這一部分在Window 上是不能使用的。如果需要在另一個(gè)平臺(tái)上使用程序,可以使用一些不會(huì)造成沖突的函數(shù),之后替換掉對(duì)應(yīng)位置的包文件,即可正常運(yùn)行?;蛘呖梢赃x擇調(diào)用絕對(duì)位置的包,以避免不互通的問(wèn)題。
3)有的包函數(shù)會(huì)輸出一些不想要其輸出的信息,可以進(jìn)入對(duì)應(yīng)的包函數(shù)中進(jìn)行更改。
4)有時(shí)候當(dāng)相機(jī)在同一臺(tái)主機(jī)上連接后換一個(gè)接口連接,在程序中可能會(huì)出現(xiàn)兩個(gè)相機(jī)同時(shí)出現(xiàn)的情況,這種狀況下只需要連接第一個(gè)編號(hào)的相機(jī)即可,或者根據(jù)所連接的端口來(lái)判斷應(yīng)當(dāng)連接哪一個(gè)相機(jī)。
在程序設(shè)計(jì)完成后,對(duì)該方法進(jìn)行了測(cè)試,程序能夠完成之前所設(shè)計(jì)的全部功能,且之后使用該方法多次獲取了3 000 多張圖片,該程序成功獲取了圖片,達(dá)到了預(yù)想的處理速度。
圖2 圖像采集現(xiàn)場(chǎng)
3 結(jié)束語(yǔ)
本文設(shè)計(jì)了??礕igE 相機(jī)使用Python 程序的一種連接使用方法,該方法調(diào)用??礕igE 相機(jī),能夠完成獲取圖像并顯示圖像,修改相機(jī)設(shè)置等功能,在實(shí)際測(cè)試過(guò)程中能夠較好的完成任務(wù),在資料較少的情況下,對(duì)于??礕igE 相機(jī)使用Python 程序調(diào)用有一定的借鑒作用。
該研究對(duì)于多線程圖片的獲取、多相機(jī)同時(shí)調(diào)用、多線程同時(shí)使用同一相機(jī)等高級(jí)操作還比較缺乏,在之后的研究中,還需要繼續(xù)研究更好更快地調(diào)用方式,提高獲取圖像的速度性能。
參考文獻(xiàn):
[1] 張仰月.智能相機(jī)應(yīng)用軟件設(shè)計(jì)及GigE Vision協(xié)議實(shí)現(xiàn)[D].南京:南京郵電大學(xué),2019.
[2] 阮暉雄.GIGE工業(yè)CIS相機(jī)關(guān)鍵技術(shù)的研究[D].成都:電子科技大學(xué),2022.
[3] 羅瀟磊.基于GigE接口的輕小型相機(jī)研究[D].上海:中國(guó)科學(xué)院研究生院(上海技術(shù)物理研究所),2016.
(本文來(lái)源于《電子產(chǎn)品世界》雜志2023年8月期)
評(píng)論