[OpenR8 解決方案] Image_Cap (偵測瓶蓋是否有蓋緊)

 

 

一、Image_Cap

 

Image_Cap 的用途為偵測瓶蓋是否有蓋緊。如下圖1

 

圖1.找出瓶蓋沒蓋緊示意圖.png

圖1.找出瓶蓋沒蓋緊示意圖。

 

 

 

 

 

 

 

 

二、使用介紹

 

此章節介紹使用者如何透過 R8 軟體載入現有的解決方案來實現偵測瓶蓋是否蓋緊。

  • 步驟1. 執行 R8.exe,請點擊滑鼠兩下開啟 R8。畫面如下圖2

 

圖2. 執行R8.exe .png

圖2.【執行 R8.exe】。

 

  • 步驟2. 點擊 R8 上方的【檔案】=>【開啟】。畫面如下圖3

 

圖3. 檔案 開啟 .png

圖3.【檔案】=>【開啟】。

 

  • 步驟3. 選擇 solution 下的 Image_Cap 資料夾。如下圖4

 

圖4.解決方案資料夾.png

圖4.解決方案資料夾。

 

  • 步驟4. 選擇與開啟流程檔。如下圖5圖6

 

圖5.選擇流程檔.png

圖5.選擇流程檔。

 

圖6.開啟流程檔.png

圖6.開啟流程檔。

 

  • 步驟5.選擇欲解析瓶蓋是否蓋緊的圖。如下圖7。

 

圖7.選擇欲解析的條碼圖.png

圖7.選擇欲解析的條碼圖。

 

  • 步驟6.執行與顯示結果。如下圖8

如果想要調整過程中的參數,可見下一章詳細介紹流程內容。透過調整參數來適應各種情況,使得效果更佳。

 

圖8.執行與顯示條碼解析結果.png

圖8.執行與顯示條碼解析結果。

 

 

三、流程內容介紹

 

此解決方案的流程。如下圖9。

 

圖9.解決方案內的流程.png

圖9.解決方案內的流程。

 

圖10.欲檢測的圖.png

圖10.欲檢測的圖。

 

看到上圖10左邊瓶蓋沒蓋緊,右邊瓶蓋有蓋緊。

 

  1. 首先,瓶蓋是我們感興趣的區域,所以需要先想辦法將瓶蓋從背景過濾出來。在此文中,我們是使用二值化等影像處理將瓶蓋過濾出來。
  2. 接著,要怎麼知道沒蓋緊。從圖片可以觀察到,瓶蓋通常會有兩塊所組成,沒蓋緊時,上面那一塊會與下方的距離較大,反之距離較小。 藉由瓶蓋此特性,我們可以得知,如果上下兩塊區域連在一起就是蓋緊。
  3. 最後,從第 1. 得到現在瓶蓋的情況圖,第 2.可得到蓋緊的圖。 瓶蓋縫隙 = 蓋緊的圖 – 現況圖  由此可設定縫隙超過多少,即沒蓋緊,也就是將沒蓋緊的瓶蓋偵測出來。

 

流程由上至下:

【開啟與顯示輸入影像】選擇想要偵測瓶蓋是否蓋緊的圖,及將其顯示在視窗。如下圖11

 

函式包含

1 影像_開啟

2 影像_顯示

 

圖11.顯示讀取的影像.png

圖11.顯示讀取的影像。

 

函式

變數名稱

名稱

用途

影像_開啟

影像檔案名稱

Cap.png

Cap.png

欲做瓶蓋是否蓋緊的影像。

影像(影像)

Sample

 

將讀入的影像存至此變數。

影像_顯示

影像

Sample

 

選擇想要顯示的影像變數。

縮放比例(整數)

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題(字串)

windowTitle1

Sample

顯示影像的視窗的標題。視窗名稱為 Sample。如上圖11視窗標題。

 
【初步過濾出瓶蓋】影像轉灰階再做二值化,將瓶蓋初步從背景中過濾出來。如下圖12
 

3影像_灰階

4影像_顯示

5影像_二值化

6 影像_顯示

 

圖12.左為灰階影像 右為二值化影像.png

圖12.左為灰階影像 右為二值化影像。

 

函式

變數名稱

名稱

用途

影像_灰階

彩色影像

Sample

 

想要轉灰階的彩圖變數。

灰階影像

Image_Gray

 

將轉為灰階的影像存至此變數。

影像_顯示

影像

Image_Gray

 

選擇想要顯示的影像變數。

縮放比例

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle1

Image_Gray

顯示影像的視窗的標題。視窗名稱為 SampleImage。

影像_二值化

影像

Image_Gray

 

做二值化的來源圖。

閾值

ThresholdValue

210

二值化的閾值。

二值化影像

Image_Binarize

 

做完二值化的圖存放至此變數。

影像_顯示

影像

Image_Binarize

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle2

Image_Binarize

顯示影像的視窗的標題。視窗名稱為 Image_Binarize。

 

【進階將瓶蓋過濾地更乾淨】可從上一步過濾圖得知(下圖13左),除了瓶蓋之外,還有過濾出一些瓶身是我們不想要的區域。因此接下來我們藉由一些影像處理將非瓶蓋過濾掉。

 

  1. 圖13右,可以觀察出瓶蓋的區域較其他區域顯著,且想要將瓶蓋的上下區域皆過濾出來,所以我們可以先做模糊。如下圖13中。接著,瓶蓋區域因為較為集中顯著,所以模糊後也較其他區域亮,透過影像二值化,把較亮的區域過濾出來,如下右圖13。

 

圖13.左為上一步二值化結果 中為模糊結果 右為二值化結果.png

圖13.左為上一步二值化結果 中為模糊結果 右為二值化結果。

 

  1. 從上面得到了瓶蓋的區域,也就可以得知二值化的圖中有哪些區域為瓶蓋。藉由將二值化圖與瓶蓋區域的圖做[影像_和]可達到此目的。如下圖14左和中得到右。

 

備註:影像_和:同個位置,兩影像中皆為白色,則此位置為白色。反之,只要其中一個為黑色,則此位置為黑色。

 

圖14.左圖為二值化影像 中間為瓶蓋所占區域 右圖為過濾出的瓶蓋.png

圖14.左圖為二值化影像 中間為瓶蓋所占區域 右圖為過濾出的瓶蓋。

 

7 Image_Blur : 找瓶蓋所在區域

8影像二值化 : 再一次將物體從背景過濾出。

9影像_顯示

10影像_和

11影像_顯示

 

函式

變數名稱

名稱

用途

Image_Blur

影像

Image_Binarize

 

做模糊處理的來源圖。

X 大小

SizeX

100

往左右方向多少距離做模糊。值越大模糊的距離越寬。

Y 大小

SizeY

55

往上下方向多少距離做模糊。

模糊化影像

Image_1

 

將模糊的影像存至此變數。

影像_二值化

可參閱Image_Binarize 文件

影像

Image_1

 

欲做二值化的來源圖。

閾值

ThresholdValue_1

128

二值化的閾值。

二值化影像

Image_1

 

將二值化的影像存至此變數。

影像_顯示

影像

Image_1

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle3

Image_1

顯示影像的視窗的標題。視窗名稱為 SampleImage。

影像_和

影像 A

Image_Binarize

 

輸入圖

影像 B

Image_1

 

輸入圖

影像和

Image_2

 

將兩張輸入圖做和運算的結果圖存放至此變數。

影像_顯示

影像

Image_2

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle4

Image_2

顯示影像的視窗的標題。視窗名稱為 Image_2。

 

【產生有蓋緊的影像】上面的步驟已將瓶蓋完整過濾出來(如下圖15左),接著要用此張圖做蓋緊的後的瓶蓋,想要將瓶蓋上下兩部分連接在一起,可以透過影像的形態學達成此效果,如下圖15右。

 

備註:型態學常見有 Erosion (侵蝕)Dilation (膨脹)Opening (斷開)即對影像進行 Erosion 後再 DilationClosing  (閉合) 即對影像進行 Dilation 後再 Erosion 等等。如下圖16。

 

圖15.左為濾出的瓶蓋圖 右為經型態學產生的瓶蓋蓋緊的圖.png

圖15.左為濾出的瓶蓋圖 右為經型態學產生的瓶蓋蓋緊的圖。

 

圖16.上圖原圖.png

圖16.上圖:原圖

圖16.下圖從左至右分別為侵蝕 膨脹 斷開 閉合.png

圖16.下圖從左至右分別為侵蝕、膨脹、斷開、閉合。

 

12Image_Morphology

函式

變數名稱

名稱

用途

Image_Morphology

影像

Image_2

 

輸入圖變數。

型態模式

CLOSE

3

設定要做哪一種型態運算。

0:侵蝕

1:膨脹

2:斷開

3:閉合

4: Morphological Gradient

5:Top Hat

6: Black Hat

遮罩模式

int_1

1

0: Rect

1: Cross

2: Ellipse

遮罩X大小

int_1

1

做型態學的左右方向範圍。值越大效果越大。

遮罩Y大小

Colse_Size_Y

35

做型態學的上下方向範圍。值越大效果越大。

型態轉換

Image_3

 

將處理好的影像存放至此變數。

 
 
【得到瓶蓋的縫隙】將瓶蓋蓋緊的圖與現況瓶蓋的圖相互比較,可以得到其中的差異,亦即瓶蓋的縫隙。如下圖17。

接著,由於剩餘的瓶蓋縫隙上還有顯示出我們不想要的瓶蓋日期(圖17左),因此再藉由與上面過濾瓶身一樣的手法,先模糊再二值化將日期進一步過濾掉。如下圖18。

 

圖17.左為瓶蓋蓋緊圖 中為瓶蓋現況圖 右為瓶蓋縫隙圖.png

圖17.左為瓶蓋蓋緊圖,中為瓶蓋現況圖,右為瓶蓋縫隙圖。

 

圖18.左圖為瓶蓋縫隙圖 中間圖為模糊後 右圖為二值化後.png

圖18. 左圖為瓶蓋縫隙圖,中間圖為模糊後,右圖為二值化後。

 

13影像_差值

14影像_顯示

15Image_Blur: 把印字與雜訊過濾掉

16影像_二值化

17影像_顯示

 

函式

變數名稱

名稱

用途

影像_差值

影像 A

Image_3

 

輸入圖

影像 B

Image_2

 

輸入圖

影像差值

Image_3

 

影像 A 與影像 B 差異結果存至此變數。

模式

int_0

0

0: A-B

1: A-B 然後再平移平均亮度到128

影像_顯示

影像

Image_3

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle5

Image_3

顯示影像的視窗的標題。視窗名稱為 Image_3。

Image_Blur

影像

Image_3

 

做模糊處理的來源圖。

X 大小

Data18

85

往左右方向多少距離做模糊。值越大模糊的距離越寬。

Y 大小

Data19

1

往上下方向多少距離做模糊。

模糊化影像

Image_4

 

將模糊的影像存至此變數。

影像_二值化

可參閱Image_Binarize 文件

影像

Image_4

 

欲做二值化的來源圖。

閾值

ThresholdValue_1

128

二值化的閾值。

二值化影像

Image_4

 

將二值化的影像存至此變數。

影像_顯示

影像

Image_4

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle6

Image_4

顯示影像的視窗的標題。視窗名稱為 Image_4。

 
 
【設定沒有蓋好的定義與顯示結果】到此已有過濾完成的縫隙圖(如下圖19左),透過影像_找物體找出中白色區域所在的位置座標,再將其結果畫在圖上(如下圖19中),及視窗顯示 json 格式的訊息(如下圖19右)。
 
圖19.左為過濾完成的縫隙圖 中為結果圖 右為結果訊息.png
圖19. 左為過濾完成的縫隙圖,中為結果圖,右為結果訊息。
 

18Image_FindBlob 縫隙高度大於閥值抓出來

19Json_ 列印

20Image_DrawDefects

21影像_顯示

 

函式

變數名稱

名稱

用途

Image_FindBlob

可參閱 Image_FindBlob 文件

影像

Image_4

 

選擇想要找物體的影像變數。輸入已二值化的影像來找物體。

啟用最小 X

 

 

 

最小 X

 

 

 

啟用最大 X

 

 

 

最大 X

 

 

 

啟用最小 Y

True

1

設定最小高度閾值的開關。

最小 Y

Min_Y_Gate

10

找出來的物體的最小高度閾值。

當瓶蓋縫隙大於此值,表示沒有蓋緊。

啟用最大 Y

 

 

 

最大 Y

 

 

 

啟用最小區域

 

 

 

最小區域

 

 

 

啟用最大區域

 

 

 

最大區域

 

 

 

啟用最小填充率

 

 

 

最小填充率

 

 

 

啟用最大填充率

 

 

 

最大填充率

 

 

 

json

DefectJson

 

輸出的結果,找出物件在影像中所在的區域座標。

影像從

 

 

 

影像到

 

 

將找出物體的結果畫出來。

NotTightened

NotTightened

找出物體的類型名稱。

Json_ 列印

json

DefectJson

 

在視窗顯示上面找出物體的結果訊息。

Image_DrawDefects

影像

Image_3

 

輸入圖。想要在此圖畫上 json 字串的矩形內容。

json

DefectJson

 

瑕疵 json 訊息。

畫缺陷

DefectJson

 

將瑕疵框畫在圖上存至此變數。

厚度

 

 

 

藍色

 

 

 

綠色

 

 

 

紅色

int_255

255

矩形框線條的顏色。

額外範圍

 

 

 

影像_顯示

影像

Image_5

 

選擇想要顯示的影像變數。

縮放百分比

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題

windowTitle7

Image_5

顯示影像的視窗的標題。視窗名稱為 Image_5。

 

 


延伸閱讀

1.
OpenR8 - 人人都會用的 AI 軟體 (下載)

2.
[OpenR8 解決方案] Image_PCB_SSD300_Caffe (影像分析使用 SSD 300 演算法及 Caffe 函式庫進行 PCB 物件偵測)

3.
[OpenR8 解決方案] Image_Webcam_SSD300_Caffe (使用 Caffe SSD 演算法偵測 webcam 即時影像中的物件)

[CP 值最好的 AI 人工智慧電腦熱賣中]
硬體採用最新最快的 Titan RTX, RTX-2080Ti-11G, 及 TESLA V100!
視窗圖控介面,易學易用。
硬體優勢:針對深度學習最佳化設計,且經過客戶端 24H 運作驗證。
軟體優勢:事先安裝人工智慧軟體及優化設定,每週提供最新 AI 演算法下載。
公司優勢:專業人工智慧機器人設計公司,資本額一億。
歡迎企業、學校、及公家機關大量採購。
可租用,歡迎來信或來電洽詢。
詳細資料請參閱以下網址: https://tw.openrobot.club/ai_computer