[OpenR8 解決方案] Image_FindBlob2 (找出影像中的物體)

一、Image_FindBlob2 介紹

 

Image_FindBlob2 是一個框出指定大小物體之範例,可與另一份【Image_FindBlob】文件交互參照使用。

 

Image_FindBlob2 的流程為下圖 1,每一個步驟於本文件之第四章做詳細介紹。

 

圖 1. Image_FindBlob2的流程.png

圖 1. Image_FindBlob2 的流程。

 

 

二、Image_FindBlob2 資料夾介紹

 

Image_FindBlob2 位於 OpenR8 的 solution 資料夾內,其中包含:

 

  1. 圖片:sample2.png。

 

  1. flow 檔案:FindBlob_Example2.flow。

 

 

圖 2.Image_FindBlob2位置 .png

圖 2. Image_FindBlob2 位置。

 

圖 3.Image_FindBlob2資料夾 .png

圖 3. Image_FindBlob2 資料夾。

 

 

 

 

 

 

三、開啟 FindBlob_Example2.flow

 

 

在【OpenR8 資料夾】底下有一個【R8.exe】執行檔。如下圖 4。滑鼠點擊兩下即可執行R8.exe。

 

圖 4.執行R8.exe .png

圖 4.執行 R8.exe。

 

執行 R8.exe 後,第一次登入需輸入帳號密碼。如下圖 5。

Open Robot ID (Email) : 登入開源機器人俱樂部的帳號。

Password : 登入開源機器人俱樂部會員的密碼。

 

圖 5.登入開源機器人帳號 .png

圖 5.登入開源機器人帳號。

 

請點選【File】=>【Language】=>【繁體中文】=>【確定】。如下圖 6

點選完,請重新啟動 R8.exe。關閉 R8.exe,再次執行 R8.exe。即可顯示繁體中文介

面。如下圖 7

 

圖 6.變更語言成為繁體中文介面 .png

圖 6.變更語言成為繁體中文介面。

 

圖 7.繁體中文介面 .png

圖 7.繁體中文介面。

 

請點選【檔案】=>【開啟】=>【進入到 OpenR8 底下的 solution 資料夾】

=>【選擇 Image_FindBlob2 資料夾】=>【選擇 FindBlob_Example2.flow 開啟】,

圖 8圖 9

 

圖 8.選擇FindBlob_Example2.flow .png

圖 8.選擇 FindBlob_Example2.flow。

 

圖 9.開啟FindBlob_Example2.flow .png

圖 9.開啟 FindBlob_Example2.flow。

 

FindBlob_Example2 的流程會在下一章介紹、說明。

 

 

四、FindBlob_Example2.flow 流程

 

如圖 1的流程所示,主要的流程為【開啟圖片】=>【對圖片二值化】=>【找出想要的物體】=>【顯示結果】。

 

本文件準備的圖片為圖 10,目標為除了十字圖案以外的圖案都標記出來,如圖 11。

 

圖 10. FindBlob_Example2.flow的測試圖片 .png

圖 10. FindBlob_Example2.flow 的測試圖片。

 

圖 11. 框出除了十字以外的圖案 .png

圖 11. 框出除了十字以外的圖案。

 

圖12. FindBlob_Example2.flow 的流程.png

圖12. FindBlob_Example2.flow 的流程。

 

  1. 影像_開啟:

       在影像檔案名稱的欄位填入開啟想測試的圖片檔名。

       影像檔案名稱:想讀入的圖片檔案位置加檔名,如圖 13。

       影像:將讀入的影像輸出。

 

圖 13. 選擇想測試的圖片 .png

圖 13. 選擇想測試的圖片。

 

  1. 影像_二值化:

  將測試圖片二值化。

 

  影像:              【影像_開啟】函式所輸出的影像。

  閾值:               二值化的閾值,這裡填128

  二值化影像:      輸出二值化的影像。

 

 

圖 14. FindBlob_Example2.flow的影像_二值化 .png

圖 14. FindBlob_Example2.flow 的影像_二值化。

 

圖 15. 對圖 10使用閾值為128的二值化結果 .png

圖 15. 對圖.10使用閾值為128的二值化結果。

 

  1. 影像_找物體:

過濾出圖.10較大的物體,像是圖.16一樣,所以設定長大於 30 pixel、寬大於  60 pixel 以上的物體過濾出來。

 

 

影像:

選擇【影像_二值化】輸出的影像。​

啟用最小 X :

由於這裡最小要抓 60 pixel 以上,所以這裡要填 True。​

最小 X :​

由於這裡最小要抓 60 pixel 以上,所以這裡要填60。​

啟用最大 X :​

這裡不填寫。

最大 X :​

這裡不填寫。

啟用最小 Y :​

由於這裡最小要抓 30 pixel 以上,所以這裡要填 True。​

啟用最小 Y :​

由於這裡最小要抓 30 pixel 以上,所以這裡要填30。​

啟用最大 Y :​

這裡不填寫。

最大 Y :​

這裡不填寫。

啟用最小區域:

這裡不填寫。

最小區域:

這裡不填寫。

啟用最大區域:

這裡不填寫。

最大區域:

這裡不填寫。

啟用最小填充率:

這裡不填寫。

最小填充率:

這裡不填寫。

啟用最大填充率:

這裡不填寫。

最大填充率:

這裡不填寫。

json:

輸出的 json 

影像從:

這裡不填寫。

影像到:

這裡不填寫。

型:

包進 json 時,顯示的名稱,如圖.32

 

 

圖 16. 先抓出較大的物體 .png

圖 16. 先抓出較大的物體。

 

圖 17. FindBlob_Example2.flow的影像_找物體 .png

圖 17. FindBlob_Example2.flow 的影像_找物體。

 

  1. 影像_找物體:

       和第3點的【影像_找物體】不同,這裡改成抓取寬度超過 30 pixel 以上的物             體,抓取的目標如圖 18。

 

影像:

選擇【影像_二值化】輸出的影像。​

啟用最小 X :

由於這次並不設定最小值多少,所以不填寫。

最小 X :​

由於這次並不設定最小值多少,所以不填寫,不填寫時,預設為0。

啟用最大 X :

這裡不填寫。

最大 X :

這裡不填寫。

啟用最小 Y :

由於這裡最小要抓 30 pixel 以上,所以這裡要填 True

最小 Y :

由於這裡最小要抓 30 pixel 以上,所以這裡要填30

啟用最大 Y :

這裡不填寫。

最大 Y :

這裡不填寫。

啟用最小區域:

這裡不填寫。

最小區域:

這裡不填寫。

啟用最大區域:

這裡不填寫。

最大區域:

這裡不填寫。

啟用最小填充率:

這裡不填寫。

最小填充率:

這裡不填寫。

啟用最大填充率:

這裡不填寫。

最大填充率:

這裡不填寫。

json:

輸出的 json 

影像從:

這裡不填寫。

影像到:

這裡不填寫。

型:

包進 json 時,顯示的名稱,如圖 32

 

 

圖 18. 抓出寬度大於30 pixel的物體 .png

圖 18. 抓出寬度大於 30 pixel 的物體。

 

圖 19. FindBlob_Example2.flow的影像_找物體 .png

圖 19. FindBlob_Example2.flow 的影像_找物體。

 

  1. 影像_找物體:

​過濾出圖 10 較小的物體,像是圖 20 一樣,所以設定長小於 30 pixel、寬小於 30 pixel 以下的物體過濾出來。

 

 

影像:

選擇【影像_二值化】輸出的影像

啟用最小 X :

由於這裡最小要抓 3 pixel 以上,所以這裡要填 True

最小 X :

由於這裡最小要抓 3 pixel 以上,所以這裡要填3

啟用最大 X :

由於這裡最大抓 30 pixel 以下,所以這裡要填 True

最大 X :

由於這裡最大抓 30 pixel 以下,所以這裡要填30

啟用最小 Y :

由於這裡最小要抓 3 pixel 以上,所以這裡要填 True

最小 Y :

由於這裡最小要抓 3 pixel 以上,所以這裡要填3

啟用最大 Y :

由於這裡最大抓 30 pixel 以下,所以這裡要填 True

最大 Y :

由於這裡最大抓 30 pixel 以下,所以這裡要填30

啟用最小區域:

這裡不填寫。

最小區域:

這裡不填寫。

啟用最大區域:

這裡不填寫。

最大區域:

這裡不填寫。

啟用最小填充率:

這裡不填寫。

最小填充率:

這裡不填寫。

啟用最大填充率:

這裡不填寫。

最大填充率:

這裡不填寫。

json:

輸出的 json 

影像從:

這裡不填寫。

影像到:

這裡不填寫。

型:

包進 json 時,顯示的名稱,如圖.32

 

 

圖 20. 抓出較小的物體 .png

圖 20. 抓出較小的物體。

 

圖 21. 抓出較小的物體 .png

圖 21. 抓出較小的物體。

 

 

  1. Json 陣列_加入新值:

把第四點【影像__找物體】的 json 輸出合併到第三點的【影像_找物體】的  json 輸出中。

 

圖 22. 把json2合併到json1 .png

圖 22. 把 json2 合併到 json1。

 

  1. Json 陣列_加入新值:

把第五點【影像__找物體】的 json 輸出合併到第三點的【影像_找物體】的 json 輸出中。

 

圖 23. 把json3合併到json1 .png

圖 23. 把 json3 合併到 json1。

 

  1. Json_ 轉字串:

       將合併完後的 json1 從 json 格式轉成字串格式。

 

圖 24. 將json1轉換成字串 .png

圖 24. 將 json1 轉換成字串。

 

  1. 列印單行:

       將【Json_ 轉字串】的字串輸出在 DOS 視窗中。

 

圖 25. 將json1轉換成字串 .png

圖 25. 將 json1 轉換成字串。

 

  1. 影像_畫缺陷:

       將合併的 json 讀入用紅框畫在一開始讀入影像中。

 

影像:

選擇要畫框的影像。

json:

選擇要畫的 json。

畫缺陷:

畫完框之後輸出的影像。

厚度:

框的粗細程度。

藍色:

由於這裡想用紅框,所以這裡填0。

綠色:​

由於這裡想用紅框,所以這裡填0。

紅色:

由於這裡想用紅框,所以這裡填255。

額外範圍:

畫框時,比原本 json 解析完後的位置在往外擴多少 pixel。

 

圖 26. FindBlob_Example2.flow的影像_畫缺陷 .png

圖 26. FindBlob_Example2.flow 的影像_畫缺陷。

 

  1. 影像_顯示:

       將一開始讀入的影像顯示出來。

 

圖 27. 顯示一開始讀進來的圖 .png

圖 27. 顯示一開始讀進來的圖。

 

 

  1. 影像_顯示:

       將【影像_畫缺陷】輸出的影像顯示出來。

 

圖28. 顯示 影像_畫缺陷 所輸出的影像.png

圖28. 顯示 影像_畫缺陷 所輸出的影像。

 

  1. 等待:

        在【影像_顯示】後一定要加【等待】才能看到影像,影像停留多少微秒設              定。

        鍵值:輸出的訊號。

        微秒:若想讓影像直到按下任意鍵才關閉時,請設0,若想讓影像顯示1秒後            關閉,請設1000。

        *1秒鐘 = 1000微秒。

 

圖29. FindBlob_Example2.flow 的等待.png

圖29. FindBlob_Example2.flow 的等待。

 

  1. 影像_關閉所有視窗:

      將所有【影像_顯示】所顯示的影像視窗關閉。

 

圖 30. FindBlob_Example2.flow的影像_關閉所有視窗 .png

圖 30. FindBlob_Example2.flow 的影像_關閉所有視窗。

 

  1. 執行的結果:

 

圖 31. 印出json與框出來的結果 .png

圖 31. 印出 json 與框出來的結果。

 

圖 32. Json內容說明 .png

圖 32. Json 內容說明。

 

 

 


延伸閱讀

1.
OpenR8 社群版 - 人人都會用的 AI 軟體 (免費下載)

2.
[ezAI 簡單學AI] PCB 電路板的深度學習影像分析

3.
[ezAI 簡單學AI] 深度學習影像分析快速入門

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