當前位置: 華文星空 > 知識

講解和展示視訊:FPGA

2021-06-25知識

講解和展示視訊:FPGA-HPS-用於制造業且基於視覺處理的即時目標辨識和跟蹤

測試和結果

我們以互動和模組化的方式進行設計。我們的設計可以很容易地分解為幾個不同的部份:顏色閾值、影像處理、影像分析、伺服控制和使用者介面。因此,在將不同的元件組裝在一起形成最終設計之前,我們能夠透過實施和單元測試每個模組來處理我們的設計。對於我們的每個模組,我們首先決定要實作的演算法。在我們的系統上實作它們之前,我們用高級語言評估了不同的演算法。然後,我們將更高級別的設計轉換為 C 或 Verilog。最後,我們對每個實作進行了單元測試以確保其有效。一旦我們完成了一個模組,我們就將它整合到我們的系統中,並整合測試了整個系統以確保功能。

顏色閾值和處理

我們最初透過在 OpenCV 和 MATLAB 中執行測試來開始我們的設計。我們的第一個目標是確定一個合適的色彩空間來執行我們的檢測演算法。從 OpenCV 結果中,我們確定 HSV 有效工作。然而,一旦我們嘗試在 Verilog 中實作它,我們發現在輸入 RGB 到 HSV 進行處理和返回到 RGB 進行輸出之間的轉換給我們的系統帶來了開銷和復雜性。因此,我們使用 RGB 進行閾值處理。但是,我們確實修改了 Qsys 子系統,以便使用 16 位 RGB 而不是 8 位 RGB,從而為我們提供更大的色彩動態範圍。

一旦我們為 RGB 顏色空間找到了合適的閾值,我們就需要找到合適的處理演算法來對我們的影像進行去噪並填充 Sprees 中的任何漏洞。我們還想刪除相鄰 Sprees 之間的任何連線。我們在 MATLAB 中對樣本影像評估了多種演算法,包括霍夫變換和侵蝕,然後決定將 open 作為我們使用的演算法。下圖顯示了我們在 MATLAB 中使用 Opening 的測試結果,表明對於我們的目的而言,opening 是一種有效的演算法。

原始 MATLAB 輸入
MATLAB 開啟輸出

在移植到 Verilog 之前,我們還在 HPS 上用 C 語言實作了開放。侵蝕和膨脹的函式可以在 HPS的 vision.c 程式碼中找到。僅使用 HPS,我們最多只能獲得每秒 1 幀的視訊處理。然而,一旦我們在 Verilog 中成功地在 FPGA 上實作了顏色保留和開放,我們就可以實作相同的像素完美輸出,但每秒高達 10 幀。因此,我們在 FPGA 上執行的演算法在我們的最終結果中顯示了 5 到 10 倍的加速。

下圖由 FPGA 生成,顯示了閾值影像以及相應的開啟影像。如圖所示,我們能夠確定五種不同顏色的 Sprees 的顏色,並執行產生五個連線物件的處理。影像開放的必要性可能在綠色和紅色 Sprees 上最為明顯。在開場前的影像中,綠色的 Spree 大部份是相連的,但有幾個浮動像素,紅色的 Spree 有一小部份橙色。開啟影像消除了這兩個問題。

頂部:閾值影像,底部:開啟的影像

預開影像中存在的不準確可能是由於我們的顏色閾值演算法太簡單而無法解釋我們系統中存在的所有變化。實施顏色閾值是我們工作時間表的第一步,因此我們選擇了一種簡單的方法。我們沒有意識到準確的顏色閾值可以說是我們系統中最重要的步驟,因為它必須能夠處理最大的變化。我們發現,無論我們如何嘗試校準某些顏色並調整它們的閾值,我們都無法在各種條件下獲得始終如一的良好結果。我們懷疑如果我們選擇使用不同的顏色空間,例如 HSV,並開發了一種更復雜的演算法來處理整個表面的顏色變化,我們可能會取得更好的結果。

物件跟蹤和計數

我們首先開始研究如何計算框架中的連線元件。我們使用 MATLAB 來測試要使用的不同演算法。我們的第一個成功是在二進制影像上使用稱為 bwlabel 的 MATLAB 演算法,它以與我們使用 DFS 相同的方式標記影像。檢視原始碼,我們看到 bwlabel 使用兩遍演算法。但是,我們也測試了 DFS,它是一種簡單且易於實作的一次性演算法。我們決定使用 DFS,因為它更容易實作並且可以說更快,因為它只需要一次透過影像。

物件跟蹤可以說是 HPS 程式碼中最困難的方面,因為沒有可供我們使用的參考演算法,因為我們的系統具有獨特的設定。因此,如我們的設計部份所述,我們最初開始考慮我們可以獲得的不同案例框架。然後我們添加程式碼來處理每種情況,直到我們能夠可靠地跟蹤 Sprees。

整體系統

總體而言,我們能夠以高可靠性跟蹤和計數狂歡,如下圖所示。然而,我們的可靠性因我們的傳送帶上下移動與我們的初始校準不匹配而導致的顏色變化而有所不同。在緩慢移動的軌域上,我們可以生成完美的元件並對其進行跟蹤。然而,隨著傳送帶移動得更快,Sprees 開始更多地「彈跳」到它們身上,導致它們離相機越來越近,以及遠離相機的角度。這些變化導致我們在完美條件下校準的原始校準值錯過了一些更敏感的特定顏色,例如橙色。因此,在理想條件下,我們能夠跟蹤透過我們框架的每一個 Spree。然而,由於我們的結構造成的變化,我們的可靠性降低了。我們相信,如果我們構建更一致和更堅固的傳送帶,我們可以實作近乎完美的系統,檢測率超過 99%。雖然很難給出精確的準確度,因為準確度因我們前面提到的許多不同因素而異,但在當前條件下,我們可以實作高達 90% 的準確度。這表明我們的系統是在制造環境中執行庫存跟蹤或品質控制的有效架構,我們相信可以透過在我們的裝配線建設中進行一些改進來改進它。我們在下面連結的視訊中展示了我們的系統正在執行。如果我們構建一個更加一致和剛性的傳送帶。雖然很難給出精確的準確度,因為準確度因我們前面提到的許多不同因素而異,但在當前條件下,我們可以實作高達 90% 的準確度。這表明我們的系統是在制造環境中執行庫存跟蹤或品質控制的有效架構,我們相信可以透過在我們的裝配線建設中進行一些改進來改進它。我們在下面連結的視訊中展示了我們的系統正在執行。如果我們構建一個更加一致和剛性的傳送帶。雖然很難給出精確的準確度,因為準確度因我們前面提到的許多不同因素而異,但在當前條件下,我們可以實作高達 90% 的準確度。這表明我們的系統是在制造環境中執行庫存跟蹤或品質控制的有效架構,我們相信可以透過在我們的裝配線建設中進行一些改進來改進它。我們在下面連結的視訊中展示了我們的系統正在執行。這表明我們的系統是在制造環境中執行庫存跟蹤或品質控制的有效架構,我們相信可以透過在我們的裝配線建設中進行一些改進來改進它。我們在下面連結的視訊中展示了我們的系統正在執行。這表明我們的系統是在制造環境中執行庫存跟蹤或品質控制的有效架構,我們相信可以透過在我們的裝配線建設中進行一些改進來改進它。我們在下面連結的視訊中展示了我們的系統正在執行。

跟蹤和計數結果

結論

總的來說,我們的計畫符合我們的預期,因為我們可以以高可靠性計算和跟蹤在我們的視訊幀中移動的 Sprees。我們實作了我們設定的所有目標,包括視訊輸入、顏色檢測、顏色分割/影像處理、物件計數和物件跟蹤。我們甚至實作了一些目標,例如構建移動傳送帶。但是,我們確實承認,需要對跟蹤演算法和施工品質進行改進,才能將該計畫帶入實際制造套用中。此外,雖然我們可以以每秒 5-10 幀的速度執行,但要使用快速移動的傳送帶執行,則需要更大的幀速率增加。最後,我們為僅用幾周時間和兩個人完成的工作感到自豪。

我們這個計畫的基礎是建立在由 Bruce Land 編寫並在 5760 網站上連結的視訊輸入計畫的基礎上。該計畫包括多個 Altera IP 內核,例如 VGA 子系統和視訊輸入內核,它們透過 Qsys 例項化。但是,我們大量修改了此基本程式碼以添加到我們的計畫元件中。我們還為我們的計畫使用了 Sprees 品牌。為了進一步擴充套件我們的產品,我們需要刪除對 Sprees 的任何參照或與制造商合作以授權他們的產品。

附錄 B:程式碼

  • Verilog
  • 頂層模組
  • 顏色閾值模組
  • 雙埠 RAM 模組
  • 顏色解碼器模組
  • HPS 的 C 程式碼
  • 主檔
  • 視覺.c
  • 視覺.h
  • 圖形.c
  • 圖形.h
  • address_map.h
  • Resources

    Optoisolator datasheet: 4N35 DFS Docmentation: Blog
    Connected Component Analysis: Website
    Connected Component Analysis: Wikipedia
    Morphological Opening: Wikipedia
    Altera/Quartus/DE1-SoC Resources: 5760 Webpage