【CAVEDU講堂】Raspberry Pi 4 之輸送帶影像辨識分類機電整合實作

作者/圖片來源:CAVEDU 教育團隊

 

本次專題主要是以樹莓派為基礎進行「輸送帶影像辨識分類機電整合」專題製作,在這次專題製作裡,我們採用的影像辨識分類的神經網路訓練平台是透過Teachable Machine的Image Project進行,並且匯出成Tensorflow-Lite框架於樹莓派上進行推論,程式設計是以Python為基礎進行影像辨識分類、馬達控制、光遮斷偵測等動作。

此外,輸送帶本身是透過金屬加工的H型鋁架與3D列印件組成基本的機構,輸送帶本身採用與產業界輸送帶相同的編織面輸送帶材質進行製作。這個專題製作基本上只有模擬輸送帶一小段的過程,透過串接不同長度規模的輸送帶,即可以做出類似生產線上的運作過程。

一、影像辨識部分

1. Teachable Machine

Teachable Machine在本專題應用時匯出模型使用的是Tensorflow-Lite框架作為神經網路的推論引擎,基本上Tensorflow-Lite是一個精巧版的Tensorflow模型框架,較小的模型代表著在執行推論時可以有較快的運算速度,很適合用於邊緣運算裝置的使用。

2. 影像分類程式

透過Python3執行影像分類程式,程式的運作流程是採用「觸發辨識」的概念進行設計,為降低樹莓派在執行程式的運算負荷,影像辨識程式採用的是偵測觸發而後進行影像分類神經網路運算,這樣樹莓派的在運作的過程便可以不需要一直處於大量運算的狀態而降低整體系統運作效能。

3. 架設影像辨識攝影機

影像辨識的攝影機採用羅技系列的Webcam,架設在輸送帶的上方以俯視的視角進行影像資料的擷取,這樣的設計可以有效綜覽辨識物件的外觀,透過3D列印件固定於輸送帶的運作軌道上,詳細的架設照片如圖1與圖2。

圖1:攝影機架設方式

圖2:攝影機架設方式

4. 影像資料分類辨識

本次影像辨識分類是模擬電路板製造生產線上的狀況,主要是要判別電路板上是否有缺件的狀況,在測試階段,我們透過辨識以下這些影像資料進行分類辨識,如圖3至圖6。

5. 進行定點偵測識別

本次的影像辨識搭配光遮斷器感測進行定點的偵測識別,電路板載盤到達光遮斷器的偵測位置時,樹莓派程式會進行輸送帶驅動馬達的暫停(約1秒),以此穩定攝影機蒐集影像的品質提高辨識正確率,光遮斷器、光遮斷電路模組與導正軌道的結合如圖7至圖9。

二、輸送帶機構驅動部分

1. 輸送帶機構設計

驅動馬達基本上採用24V的直流減速馬達,其轉速約在60RPM左右,樹莓派透過繼電器板模組控制馬達的轉動,減速馬達透過驅動皮帶連結輸送帶驅動輪軸,輸送帶驅動輪軸必須透過培林減少摩擦力,輸送帶在運作的過程採取定速的方式運作,樹莓派在接受光遮斷器信號觸發,會暫停輸送帶馬達的轉動,待影像辨識分類完成後再行驅動減速馬達。

2.分類撥桿機構設計

分類撥桿主要的功能是將影像分類的結果進行物件在輸送帶「轉向」運輸的機構,在本專題當中採用伺服馬達進行撥桿轉動的控制,伺服馬達控制電路主要是透過PCA9685模組的PWM信號輸出進行轉動角度的控制,撥桿與伺服馬達固定架是以3D列印件製作,撥桿啟動的主要是針對影像識別類別中的「NO_IC」、「NO_LED」與「EMPTY」這三種類別進行轉動撥桿促使這些物件會在輸送帶上產生轉向運輸的效果。

三、樹莓派程式部分

1. 樹莓派系統環境與應安裝程式套件:

2. Python程式部分:

      • Python測試程式(連結請點我)
      • Tensorflow-Lite模型檔(.tflite)與標籤檔(.txt)可以透過Teachable Machine的Image Project進行訓練產生並且下載(連結請點我)
      • 測試程式對於GPIO的存取,必須打開I2C、GPIO的功能,I2C主要是給PCA9685控制電路模組使用,GPIO主要是給繼電器電路模組與光遮斷偵測模組控制使用。

四、測試過程

針對四種狀況進行影像分類,分別是PASS(完整電路)、NO_LED(缺少LED電路)、NO_IC(缺少IC驅動電路)、EMPTY(空盤)進行影像分類,以下便是影像辨識所拍得與識別的狀況。

測試過程影片:

(本文經CAVEDU同意轉載,原文連結;責任編輯:吳芝頤)

CAVEDU 教育團隊

Author: CAVEDU 教育團隊

CAVEDU 教育團隊是由一群對教育充滿熱情的大孩子所組成的機器人科學教育團隊。致力推動國內機器人教育。

Share This Post On
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x