Select Page
Google Teachable Machine 無程式碼建立 AI 模型

Google Teachable Machine 無程式碼建立 AI 模型

還記得 2013 年,我用圖形演算法寫了一個跟電視裡面的 Show Girl 玩剪刀、石頭、布,贏的就拿到 Candy ,是真的會從螢幕後面跑出一粒糖果的那種遊戲,靈感來源自於 Candy Crush ,只是我的是真實版本,不能線上玩得,2013 年寫這樣的軟體應該是很厲害的那種,2022 年居然不需要再寫程式碼就可以自己訓練模型,只要在短短的程式碼去呼叫就可以使用它了,What!

2013年版本的圖形辨識手部完玩剪刀、石頭、布

來看看年輕版本的我

Teachable Machine 介紹

  • Images,圖像分類器,https://medium.com/@warronbebster/4bfffa765866
  • Sounds,聲音分類器,https://medium.com/@warronbebster/4212fd7f3555
  • Poses,人體的姿勢分辨器,https://medium.com/@warronbebster/f4f6116f491

Teachable Machine Images

Images 可以很快速且簡易的製作圖像分類器,比起 Microsoft Azure Custom vision 要來的簡單些,但功能要來的少一些,最大的好處是支援 tensorflow 以及 https://www.tensorflow.org/js,這樣可以很快速且方便的讓我把模型放在 Edge 端。

Teachable Machine Sounds

聲音分類器比較難懂,可以看看強者學弟林智源它們公司的產品,簡單的說明,他是可以讓記者在訪問火箭升空的現場時,還可以分離人聲以及火箭的噪音的服務,如果你也想要自行訓練模型的話,就是要用到這個功能了。

迪威智能,https://dwave.cc/

Teachable Machine Poses

一個跟 Processing 、 Kinect 、 OpenNI 類似功能的應用服務,回想在 2011 年拿下微軟的 kinect for windows 第一屆的無限可能獎,說起會拿這個獎也很意外,那天比賽時後其實只取前三名,我在等到第一名公布後都沒有自己的名字後,突然間評審說還有一個跟第一名實在無法區分的獎項,是由評審們討論出來要加開的,叫做無限可能獎,才又找我原本失落的心,不枉費我前一天沒睡覺在開發這套看電子結婚照,還可以虛空把照片抓到自己手機的軟體。

我在 2:19 秒,Motion Welcome
Kinect MotionWelcome Demo

Teachable Machine 的輸出

這是最關鍵的一環,可以輸出各種模型給各種市面上的終端設備使用,Android、Coral、Raspberry Pi、Intel Vino等,這也是我覺得最強大的部分,也是最能說服我採用 Teachable Machine 的功能

Teachable Machine 應用

Teachable Machine 官網

https://teachablemachine.withgoogle.com/

寫在最後,下一次要示範一下如何在 raspberry pi 中,如果大家有想看的題目可以留言給我

用 Raspberry Pi 4 + OpenCV 4 做個人臉辨識放在辦公室打卡吧

辦公室打卡到底要用甚麼方法最好,是員工卡嗎?還是手機APP定位?還是用打卡鐘?在2020年之後一定是跟你說生物辨識最好,因為又有疫情影響,大家最愛的是「人臉辨識」系統,非接觸,難造假,順便量體溫,噴個酒精,一切都這麼美好,但是只有千金難買好系統,一套好用的人臉辨識系統加上網動輒1萬元台幣,這時工程師的我們一定要自己DIY來一個「人臉辨識」打卡下。

Raspberry Pi 4 的 OpenCV 4 準備

採用 opencv_facerecognition 解決方案

https://github.com/mickey9801/opencv_facerecognition

首先安裝相關的依賴以及DB

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python3-opencv python3-picamera python3-numpy python3-pil
sudo apt-get install sqlitebrowser

下載 opencv_facerecognition,並且解開壓縮

cd ~
wget https://github.com/mickey9801/opencv_facerecognition/archive/refs/heads/master.zip
unzip master
cd opencv_facerecognition-master/

設定環境人臉辨識的資料以及環境

等等會用到 haarcascade_frontalface_default.xml ,不要用 OpenCV 3版本的,要用之前安裝的版本,我將路徑放在下方

# 複製 xml 
cp ~/opencv/data/haarcascades/haarcascade_frontalface_default.xml ~/opencv_facerecognition-master/haarcascade_frontalface_default.xml
# 設定環境
python3 setup.py

擷取人臉用來訓練圖像

如果你是用 usb webcam 可以執行 recordface_webcam.py ,如果是用 PiCam 就用 python3 recordface_picam.py,此時會先問你的名字,提供完名字後,會開啟相機,當相機偵測到人臉時候,按下 「f」 鍵,就會開始抓取 30 張人像,放在 dataset 下

python3 recordface_webcam.py # for using webcam
python3 recordface_picam.py # for using PiCam v2

訓練人臉的圖像

在我們的系統中 OpenCV4,要修改 trainer.py 中的程式碼以符合現況

nano trainer.py

找到 recognizer = cv2.face.createLBPHFaceRecognizer() 把它改成 recognizer = cv2.face.LBPHFaceRecognizer_create()

#recognizer = cv2.face.createLBPHFaceRecognizer() # or 
recognizer = cv2.face.LBPHFaceRecognizer_create()

開始訓練,訓練完畢後會在目錄中取得一個 recognizer 目錄,裡面存放訓練後的資料

python3 trainer.py

開始辨識人臉

有了訓練資料後,就可以開始測試準度了,開始前記得也要改一下程式碼,符合現況

nano detector_picam.py

找到 Setup LBPH recognizer for face recognition,更改成下面的程式碼

# Setup LBPH recognizer for face recognition
#recognizer = cv2.face.createLBPHFaceRecognizer() # or LBPHFaceRecognizer_create()
recognizer = cv2.face.LBPHFaceRecognizer_create()

# Load training data
#recognizer.load(fname) # change to read() for LBPHFaceRecognizer_create()
recognizer.read(fname)

存檔後執行 detector_picam.py,就可以在辦公室打卡了

python3 detector_webcam.py # for using webcam
python3 detector_picam.py # for using PiCam v2

未來,再補影片~~相信OpenCV的安裝一定很多困難,只能說關關難關關過~~

2022年最新真正可以安裝 OpenCV 4 在 Raspberry Pi 4上(一鍵安裝)

講在前面,碰觸 OpenCV 已經快20年了,但每次碰每次都需要編譯,各個平台編譯和支援庫都不一樣,即便我已經做了 N 次,我每次要在不同平台導入,都要花上一整天才能編譯成功,老天爺太折磨人了,還好永遠都有大神幫忙協助,這一次靠著 Q-engineering 協助,終於可以成功在 Raspberry Pi 4 執行 OpenCV 4 了。

Raspberry Pi 4 上確認平台是 32 bit or 64bit

uname -a 

先執行 uname -a 確認輸出是否有關鍵字 armv7l , 有的話是 32-bit 版本,如果你有看到關鍵字是 aarch64 則是 64 位元的 OS,要注意 32 bit 和 64 bit 的安裝方法是不同的,以下先示範 32 bit 的安裝方法

OpenCV 版本介紹

現在要安裝的話,推薦都是要安裝 OpenCV 4 以上的版本,在去年 2021 年底推出了 4.5.5 ,完整的支援 DNN module.

OpenCV 安裝前更新 Raspberry Pi

sudo rpi-eeprom-update
sudo rpi-eeprom-update -a
sudo reboot

加大 Raspberry Pi 的 swapfile

開啟以及編輯 dphys-swapfile

sudo nano /etc/dphys-swapfile

找到 CONF_MAXSWAP ,將值調大超過最少 1024 以上,我自己是調到 4096 後,存檔後離開

CONF_MAXSWAP=4096

重新啟動服務

sudo systemctl restart dphys-swapfile

重頭戲,在 RPI 中一鍵安裝 OpenCV 4

# 檢查記憶體要有6.5GB以上再開始
free -m
# 取得 OpenCV-4-5-5.sh 執行檔
wget https://github.com/Qengineering/Install-OpenCV-Raspberry-Pi-32-bits/raw/main/OpenCV-4-5-5.sh
sudo chmod 755 ./OpenCV-4-5-5.sh
./OpenCV-4-5-5.sh

接下來只要你的前置作業無誤,等上約1.5小時就可以看到安裝 OpenCV 成功的訊息

不用一鍵安裝的可以按照順序輸入指令

#!/bin/bash
set -e
echo "Installing OpenCV 4.5.5 on your Raspberry Pi 32-bit OS"
echo "It will take minimal 2.0 hour !"
cd ~
# install the dependencies
sudo apt-get install -y build-essential cmake git unzip pkg-config
sudo apt-get install -y libjpeg-dev libtiff-dev libpng-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
sudo apt-get install -y libgstreamer1.0-dev gstreamer1.0-gtk3
sudo apt-get install -y libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
sudo apt-get install -y libxvidcore-dev libx264-dev
sudo apt-get install -y python3-dev python3-numpy python3-pip
sudo apt-get install -y libtbb2 libtbb-dev libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils
sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install -y liblapack-dev gfortran libhdf5-dev
sudo apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev
sudo apt-get install -y protobuf-compiler

# download the latest version
cd ~ 
sudo rm -rf opencv*
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip 
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip 
# unpack
unzip opencv.zip 
unzip opencv_contrib.zip 
# some administration to make live easier later on
mv opencv-4.5.5 opencv
mv opencv_contrib-4.5.5 opencv_contrib
# clean up the zip files
rm opencv.zip
rm opencv_contrib.zip

# set install dir
cd ~/opencv
mkdir build
cd build

# run cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D WITH_OPENMP=ON \
-D WITH_OPENCL=OFF \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=OFF \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF ..

# run make
make -j4
sudo make install
sudo ldconfig

# cleaning (frees 300 MB)
make clean
sudo apt-get update

echo "Congratulations!"
echo "You've successfully installed OpenCV 4.5.5 on your Raspberry Pi 32-bit OS"

檢查 Raspberry Pi 是否有安裝 OpenCV 成功

Python3
import cv2

不藏私,來做人臉辨識吧!!

參考資料

https://qengineering.eu/install-opencv-4.5-on-raspberry-pi-4.html

https://qengineering.eu/install-opencv-4.5-on-raspberry-64-os.html

Pi-Hole – Raspberry Pi 上程式開發以及阻擋廣告用的 DNS SERVER

Pi-Hole – Raspberry Pi 上程式開發以及阻擋廣告用的 DNS SERVER

很多時候為了內部程式開發方便或是安裝 wordpress 時候會需要不同的 DNS 名稱,你也可以編修自己電腦中的 host 名單,讓你開發者可以利用 Domain 去安裝 wordpress,或是也可以自己架設一個 DNS SERVER 來處理這件事情,但現在有比較好的選擇,可以兼顧程式開發以及去除廣告的好處,設定又很容易,且還可以安裝在小巧的 Raspberry Pi 上,可以不用透過外面的 DNS 去做繁瑣的設定,非常的加分。

Pi-hole 安裝方法

Pi-hole的安裝很簡單,在 Raspberry Pi 中只要一行,其他的就看圖片精靈回答問題即可

curl -sL "https://install.pi-hole.net/" | sudo bash
初始安裝畫面
告訴你安裝了 Pi-hole 就可以幫你去除煩人的廣告
Pi-hole 別忘了,有能力的人要貢獻點小費,施比受有福
Pi-hole 選擇你上層的 DNS SERVER 台灣建議用 Google 即可
Pi-hole 選擇廣告阻擋清單的供應者,目前也只有一個可以選擇
Pi-hole 是否要安裝管理的介面,為了以後方便,預設把它裝起來吧
Pi-hole 這一段是問要不要安裝 lighttpd 和 PHP 模組,當然你也可以用自己的 web server ,但為了方便起見,用預設的 web server 即可,他不會佔用太多的硬碟空間。
Pi-hole 是否要有記錄檔,當然要囉
Pi-hole privacy mode , https://docs.pi-hole.net/ftldns/privacylevels/,用預設不隱藏任何東西,所有統計數據都可用即可
看到這個畫面就完成安裝,可以將電腦中的 DNS 指向畫面中的 IP ,需要進入管理介面的輸入 http://pi.hole/admin
國外網友超專業教學

Raspberry Pi 多種應用

PiHole官網 – https://pi-hole.net/

PiHole替代品 AdGuard,https://github.com/AdguardTeam/,AdGrard 安裝在 Raspberry Pi 上的說明,https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi

mmWave 毫米波 可以用 Raspberry Pi 遠端偵測你的心跳次數

mmWave 毫米波 可以用 Raspberry Pi 遠端偵測你的心跳次數

在一次由台灣 Raspberry Pi 的聚會上,看到了 mmWave 毫米波的神奇應用,不但可以偵測人流、車流,還可以用遠端,非接觸的方法去偵測你心跳的次數,基本的原理是利用波長低於1mm的毫米波,可以利用電波來偵測到毫米等級的精度,因為當我們在呼吸的時候,肺部會因為擴張,而帶動胸口起伏,這個微小的差異,一般肉眼我們是看不清楚的,一直看著別人胸口也不禮貌,但是用高頻且波長在毫米等級的方法,就可以在遠端察覺胸口起伏的距離範圍,轉換成每分鐘的呼吸次數,但因為資料量巨大,建議要用 Raspberry Pi 4 或是 Jetson 等級比較能處理大量的資訊。

mmWave 的應用

看看真實的 mmWave 毫米波偵測人流、車流、心跳的影片

Jobian mmWave 開發套件官網

http://www.joybien.com/

到蝦皮去買 mmWave 毫米波開發套件吧!

https://shopee.tw/THE-BATMAN-KIT-mmWave-Sensor-Evaluation-Solution(%E7%8F%BE%E8%B2%A8)-i.64632108.2120951208

開放原始碼

https://github.com/bigheadG/mmWave