團隊名稱:靴子裡有蛇
組員:黃柔語、謝延偵、黃子瑋、黃柏原
現今社會每個人都有手機,鏡頭對手機來說更是不可或缺的部分,但科技的日新月異在其他職業卻沒有普及化。像是台灣的郵差,平時都是靠著眼力去配送信件,如果把人工配送信件的時間節省,想必效率會大大的提升。
我們將此專題做出來能大幅提升人民的認知,而改善大家的不便,進而達到我們所要的目的。
本次的專題利用ESP32-CAM來製作出能Wi-Fi連線的題目。
一、製作動機
現今的信件分配方式是採用人工去分配,這麼做不僅費時也費力,為了提高效率,我們有感而發。
二、製作目的
因此我們想出運用Wi-Fi連線的方式,連接到esp32-cam去辨識信件上的郵遞區號。這樣不僅能得知信件配送地區,也能更省時省力,減少人力去分配信件。
三、製作架構
(一)專題製作流程
我們小組成員確定後,即開始進行報告資料整理,經小組一再詢問討論過通之下,訂了此專題製作的題目。題目確定後,我們小組便開始構思如何去完成連線、了解程式是否能夠運用,以便能更正確的去讓失敗率降到最低。
四、研究架構
圖1- 1研究架構圖
一、ESP32-CAM 開發板
ESP32-CAM是一個模組,可以與多個模組以及Arduino一起使用。它是一塊具有Wifi及藍芽功能開發板。ESP32-CAM具有200萬像素(1600×1200像素)的OV2640 攝影機模組,可以自行架設成網路監視器。此專題使用ESP32-CAM的攝影機來做影像辨識,並運用Wi-Fi連線讓ESP32-CAM可以讓遠端主機直接使用。
圖2- 1 ESP32-CAM開發板及OV2640鏡頭
二、USB轉TTL模組
USB to TTL是Arduino IDE與ESP32-CAM溝通的介面,連接ESP32-CAM與電腦。
圖2- 2 USB to TTL
三、OpenCV [1]
OpenCV是當今最被廣泛採用的影像處理函式庫。可用於開發即時的圖像處理、電腦視覺以及圖型識別。使用可以使用C++、C、Java或是Python編寫,此專題採用Python來編寫程式。
OpenCV在影像處理方面應用廣泛,可以讀取儲存圖片、視訊、矩陣運算、統計、影像處理等,可用在物體追蹤、人臉辨識、紋理分析、動態視訊的影像處理等。
圖2- 3 OpenCV
四、Tensorflow [2]
TensorFlow是一個開源軟體庫,用於各種感知和語言理解任務的機器學習。目前只有Python API較為豐富地實現了反向傳播部分,所以此次的專題也是採用Python。
圖2- 4 TensorFlow
五、MNIST[3][4]
MNIST手寫數字資料集含有許多訓練圖及測試圖,處理視覺辨識相對容易,各個不同的數字也能分辨出來。如果將它轉成TensorFlow Lite格式,在電腦上或是樹梅派上都能順利地執行。可以使用Python程式語言直接執行,但也可以使用jupyter Notebook來建構程式碼,可以將程式碼分段執行,當出現問題時可以非常方便的比對每一行程式碼的執行結果。
圖2- 5 MNIST訓練圖
一、esp32-cam圖片上傳 [5]
1.把esp32-cam 接上USB轉TTL模組
圖3- 1 USB轉TTL模組 | 圖3- 2 esp32-cam |
esp32-cam |
USB轉TTL模組 |
VCC |
5V |
GND |
GND |
V0R |
TX |
V0T |
RX |
IO0 |
GND |
表 1 接線表
2.程式撰寫及燒錄
在偏好設定/額外的開發板管理員網址填入
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
圖3- 3額外的開發板管理員
在開發版管理員下載韌體
圖3- 4開發板管理員
下載Library 並匯入https://github.com/yoursunny/esp32cam/tree/main/examples/WifiCam
開啟範例檔WifiCam後,更改SSID及密碼
按住esp32-cam上的RST按鈕並上傳
等到編譯訊息出現Connecting…時,放開按鈕
待燒錄完成後,拔除IO0
圖3- 5 燒錄畫面
開啟監控視窗,在瀏覽器輸入出現的URL 即可選擇檔案類型及解析度
圖3- 6 圖片伺服器網頁
3.公開到外網
把esp32 加入DHCP保留清單
圖3- 7 DHCP保留清單
在路由器對80 port 開啟虛擬伺服器
圖3- 8 虛擬伺服器
在NO-IP申請帳號 並填寫一個域名
圖3- 9 NO-IP設定
回到路由器 填寫資料 即可用域名連線至伺服器
圖3- 10 設定動態DNS
二、抓取圖片
1.使用pip安裝以下套件
Pip3 install opencv-python opencv-contrib-python
2.輸入以下指令 執行後,即可執行
三、AI模型訓練
1.使用pip安裝以下套件
Pip3 install autokeras tensorflow
2.輸入以下指令 執行後,即可訓練[1]
四、數字辨識
1.使用pip安裝以下套件
Pip3 install opencv-python opencv-contrib-python tensorflow
2.輸入附錄一的程式碼 執行後,印出的結果就是辨識出的數字
Detected digit: [0] at x=988, y=247, w=68, h=67 (93.154%) Detected digit: [7] at x=722, y=229, w=63, h=122 (80.327%) Detected digit: [5] at x=304, y=229, w=56, h=105 (98.882%) Detected digit: [8] at x=499, y=225, w=58, h=127 (86.658%) Detected digit: [5] at x=1186, y=221, w=74, h=106 (99.999%) Process finished with exit code 0 |
辨識結果範例
一、流程圖
圖4- 1信件分配流程圖
二、辨識實例
圖4- 2 實例一
Detected digit: [0] at x=988, y=247, w=68, h=67 (93.154%) Detected digit: [7] at x=722, y=229, w=63, h=122 (80.327%) Detected digit: [5] at x=304, y=229, w=56, h=105 (98.882%) Detected digit: [8] at x=499, y=225, w=58, h=127 (86.658%) Detected digit: [5] at x=1186, y=221, w=74, h=106 (99.999%) |
圖4- 3 實例二
Detected digit: [0] at x=791, y=230, w=51, h=47 (99.997%) Detected digit: [0] at x=335, y=225, w=50, h=48 (99.966%) Detected digit: [2] at x=1007, y=209, w=14, h=85 (97.048%) Detected digit: [2] at x=128, y=208, w=50, h=89 (99.999%) Detected digit: [3] at x=533, y=200, w=57, h=116 (94.930%) |
三、結果說明
由辨識實例可以發現,我們訓練的模型辨識出來的數字,跟肉眼人工辨識出來的結果差距甚大,我們覺得可能的原因為
利用MNIST資料集訓練出來的模型,不適於本專題使用,可能需要自行產生資料集並訓練
MNIST資料集的圖片長寬為28*28,而我們手寫出的數字大小,並不會每次都相同,因此需要用Opencv進行縮放,我們覺得可能是因為縮放所導致的失真,導致無法正確的辨識
(一)透過此次專題製作學習的方式能幫助我們提升對課程的學習興趣以及獲得知識的建構及整合,且亦可以幫助我們提升其創造思考的能力。
(二)小組同學認為專題製作學習為一主動探究的學習,學習中強調學習者必須負起主動探究學習的責任。
(三)專題製作學習鼓勵小組成員分工和合作學習的精神。可以培養我們學習者具備問題解決、研究、反省、團體合作及應用資訊科技等多項能力。
(四)小組同學認為專題製作學習的階段中,會遇到不同的困難及問題,但看到自己的成品時,會很有成就感。
(五)整體而言,我們小組同學認為專題製作學習是一種有價值的學習方式,因其確實可以增進自己資訊科技的能力及其技能。
文章
[1] OpenCV
[3] Alan Wang實作 MNIST 手寫數字即時多重辨識 https://reurl.cc/nOvR6n [8/31]
[4] Minst
[5] Arnov Sharma ESP32 WebCam Server
https://reurl.cc/D3l81Q [8/31]
圖片
[1] ESP32-CAM開發板及OV2640鏡頭https://www.aliexpress.com/item/32947577882.html
[2] USB to TTL https://potentiallabs.com/cart/buy-usb-ttl-coverter-online-hyderabad-india