這次我們使用Max30102血氧感測器來偵測血氧數值,而開發工具我們使用的是Blocklyduino裡的吉哥積木,讓我們在家也可以自己測量數值,了解身體狀況喔。


課程重點說明:
要實習本次內容,請準備以下材料喔
 1. ESP32及MicroUSB線
 2. Max30102血氧偵測
 3. 0.96 OLED顯示器
 4. 無源蜂鳴器
 5. 公公杜邦線x10 及 麵包版

血氧擴充版賣場,選擇血氧套件(售完為止):https://t.ly/xyTG
Blocklyduino請參考吉哥積木說明:https://t.ly/ucUe
血氧感測的原理請參考說明:https://t.ly/ZRA8
請關注小霸王粉絲專頁以獲得最新訊息:https://www.facebook.com/ImNightMarketKing
#Arduino  #ESP32


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

Get Dazzling Stained Glass - Microsoft Store en-NA

其實

每個人都在為自己喜歡的人

傷害喜歡自己的人

*************************

很多認識的人都參加了小媄的葬禮,她死於一場車禍,小媄是一個活潑善良的好孩子,沒人想到會發生這種事。

「嗚嗚嗚嗚

啜泣哀號聲不絕於耳,葬禮主持人盲目的念誦著悼詞,氣氛和其悲傷淒涼。

有位長相俊俏的小男孩,正低著頭不發一語。

身邊的另一名男孩正不顧周圍目光嚎啕大哭著,心痛的喘不過氣。

「嗚嗚嗚嗚嗚嗚小媄,嗚嗚

那個孩子叫做李小銘,是個孤兒。他的好友倫庭拍了拍他的肩,似乎想說些甚麼。

「給我滾!!不准碰我!」小銘抗拒的大聲吼道,「就是你害小媄死的!」

所有人都轉頭看著兩人。「小銘,別說這種話。」其中一位同學皺著眉說。

「就是他害的,嗚嗚嗚」小銘衝出葬禮現場,在大馬路上狂奔起來。

「!小銘!!!」倫庭似乎想追過去,一旁的老師制止了他。

「讓他冷靜一下吧……

他們目送小銘的離開。

*************************

「可惡!可惡!」小銘氣憤的踢著路邊的空鋁罐,發洩怒氣。

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近寫(抄)了一支利用dlib做臉部辨識的工具,但是效能不佳,程式執行需要大約一分鐘的準備時間,然後FPS也是沒辦法超過1,我用VSCode的F5 debug工具,從第一行逐行執行,發現是卡在cap = cv2.VideoCapture(0)這句,竟然可以卡40秒,後來查詢網路說可以加上cv2.CAP_DSHOW,但是只能用在Windows系統,樹莓派沒辦法使用,不過畢竟是開啟時一次的執行時間,影響不大所以就暫時先不處理。

另外一個比較嚴重的問題是fps,640x480解析度下的fps大約0.5-0.9之間,如果改成320x240可以超過1,實在是慢的離譜,實在很想了解問題出在什麼地方,是哪一行造成的瓶頸,雖然我還是可以用debug逐行執行來"感受"一下時間,但是像這種無限迴圈,要自己一直按F10想想實在算了。

想起我以前在VS.net開發工具時,在debug時會計算每行的執行時間,例如下圖,當從上一行執行到這行時,一共花費了0.979秒,如果我們一步一步Step就可以了解每行的狀況,知道瓶頸出在哪裡,不過這也太累了。

image

使用debug工具來了解執行效能其實還有一個問題,就是也許他這次很慢,但下次就會很快,例如網路擁塞,每次需要的時間不太一樣,因此必須長期評估再"平均"計算比較合理,用debug工具做這件事情實在很沒有效率。

在論壇詢問一下,網友提供了幾個工具,最知名應該是這個
Scalene:https://github.com/plasma-umass/scalene
這款的優點是設定很簡單,只要兩個步驟

1.    安裝套件:
pip3 install scalene
2.    利用scalene來執行你的Python程式:
scalene YourCode.py
當程式執行完畢後,就會自己跳出這個執行報告,非常詳細,包括每行的執行「總」時間、使用多少GPU、記憶體等等的報告。

image

不過我發現一個問題,這個套件提供的是執行「總」時間,但假如我是一個迴圈,那麼特定幾行就可能會執行很多次,而這裡顯示’總’時間而不是’平均’時間,像我這個報告第41行看起來雖然花費時間最多,但這也是因為他被重複執行多次的總和,自然累積會比較高,就無法確認fps慢是不是這行造成的,因此這個套件並沒有解決我的問題。(不過也可能只是我不知道要怎麼使用這個套件?)

網路找一下關鍵字「profiler」,發現另外一個工具「line_profiler」
line_profiler:https://github.com/rkern/line_profiler

優點也是逐行評估,但是卻會顯示每行被執行的次數,以及總時間、平均時間等等的,不過執行上卻較為麻煩,因為line_profiler是評估副程式的,在要評估的副程式前加上「@profile」,他就會單獨評估這個副程式,但那如果我們要評估整個程式該怎麼辦?很簡單,我是把整個程式都搬到一個副程式內即可。

這裡說明一下步驟
1.    安裝套件:

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

YOLOv4是目前非常受到歡迎的物件偵測工具,他本身後端使用的類神經框架是Darknet(https://github.com/pjreddie/darknet),而今天則是要把他轉換成Tensorflow框架,這樣做有什麼好處呢?

<<教學影片更新中>>

1. 一般我們在學習AI演算法的過程,多數已TF框架為入門,而Darknet一般只用來實做YOLO辨識,學生在學習上很難從TF很忽然跳到Darknet上,而轉換後TF語法都可以使用,學習上沒有斷層。

2. Darknet在Windows上編譯GPU版本太過瑣碎,而直接使用OpenCV的DNN模型則無法作到GPU加速,但轉換成TF後,就可以直接使用原本TF GPU加速的設定。經過測試,在1024x768的解析度下,OpenCV(非Cuda加速版)FPS=0.2X,而TF版的FPS可達到2-5,差異大概十倍。

我們使用的轉換工具是tf-yolov4(https://github.com/sicara/tf2-yolov4),根據官方說明,目前沒有Train功能,只能做Inference,所以訓練還是得到Colab(誤)。

以下將過程簡要的說明

1. 使用Anaconda建立Python3.9的虛擬環境:由於轉換過程提示建議使用TF2.6以上,因此以Python3.9 版本來建議虛擬環境,因為依據經驗TF-GPU 2.6 搭配的是Py39,所以才需要建立Python3.9的虛擬環境。若您不使用GPU加速,則不限制Python3.9。

image

2. 開啟命令視窗

    2.1 安裝Tensorflow-gpu:conda install tensorflow-gpu==2.6

    2.2 安裝轉換工具:pip install tf2-yolov4

3. 下載YOLOv4權重檔:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights,並放置到資料夾內。

4. 執行轉換命令,請注意yolov4.weights的路徑是否正確:convert-darknet-weights yolov4.weights -o yolov4.h5

若要轉換成其他種類格式,例如tflite請參閱作者的github說明

5. 完成後就可以得到yolov4的TF的H5權重檔:yolov4.h5

接下來就可以直接使用我寫好的程式來執行


import tensorflow as tf
from tf2_yolov4.anchors import YOLOV4_ANCHORS #pip install tf2-yolov4
from tf2_yolov4.model import YOLOv4
import time

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

ESP32各腳位PULLUP設定實驗結果(資料來源:葉子宏,原始網址:https://www.facebook.com/groups/esp32tw/permalink/3163691910536022/)

以下為38隻腳NodeMCU-32S我測試過的心得
GPIO35、34、39、36 只能設置為輸入模式,上下拉無軟件且要接電阻
上拉INPUT_PULLUP函數(電阻接正)(開關接負)和
下拉INPUT_PULLDOWN函數(電阻接負)(開關接正)
GPIO13、12、14、27、26、25、33、32、15、4、16、17、5、18、19、21、22、23
設置為輸入模式下拉INPUT_PULLDOWN函數(電阻接負)(開關接正)digitalRead→ LOW
GPIO13、12、14、27、26、25、33、32、15、0、4、16、17、5、18、19、21、22、23
設置為輸入模式上拉INPUT_PULLUP函數(電阻接正)(開關接負)digitalRead→ HIGH
GPIO13、12、14、27、26、25、33、32、15、2(led會亮)、4、16、17、5、18、19、21、22、23
設置為輸出模式
 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

<<研華版Jetson nano 4G開箱>>
在開箱之前先說一個老笑話
在一次非常重要的太空任務中,分別派遣了英國人、日本人、台灣人參加,這次太空任務需要執行一整年,避免太空人太無聊,可以帶50公斤的私人物品。
英國人因為愛喝下午茶,所以帶了50公斤的茶
日本人帶了50公斤的A片,台灣人則帶了50公斤的Marlboro
---------------------------------
一年後,任務結束,太空船返回地球,記者們在停機坪等候採訪,第一個出來的是英國人,記者圍上去訪問
記者問:「這一年太空任務,有什麼重要收穫?」
英國人看起來英氣煥發說:「這一年我終於了解泡茶的精妙之處」
.
第二個出來的是骨瘦如柴、無精打采的日本人
記者問:「這一年太空任務,有什麼重要收穫?」
日本人說:「這一年我體會了嚕槍的極限」
.
第三個出來的是滿臉怒氣的台灣人
記者問:「這一年太空任務,有什麼重要收穫?」
台灣人說:「幹,忘記帶賴打」
----------------------------------
這個笑話相信老一輩的你們都有聽說過
好了,這個笑話跟我開箱有什麼關係呢?

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


ESP32的藍芽2.0也就是BluetoothSerial真的是很方便,不過有一個小問題就是有時候距離太遠可能會連線中斷,如果斷線以後沒有任何提醒給使用者,那麼後續的工作就沒辦法進行了。

以下小程式可以建立一個callback事件,當裝置連線成功或連線中斷時,都會送出一個序列視窗的提醒(當然也可以改寫成LED燈號),給大家參考。


#include <BluetoothSerial.h>
BluetoothSerial BT; //藍芽callback事件
void callback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
  //藍芽連線完成
  if (event == ESP_SPP_SRV_OPEN_EVT) Serial.println("藍芽連線完成");
  //藍芽連線中斷
  if (event == ESP_SPP_CLOSE_EVT ) Serial.println("藍芽連線中斷");
}

void setup() {
  Serial.begin(115200);
  //建立callback事件
  BT.register_callback(callback);
  BT.begin("ESP32");
}

void loop() {
  //do what you want

文章標籤

夜市 小霸王 發表在 痞客邦 留言(1) 人氣()

今天把剛買的nVidia 3060 12G安裝好,然後開啟ubuntu系統,發現啟動gpu時會卡在
「Successfully opened dynamic library libcublas.so.10.0」,每次都會卡住約5-8分鐘,記得windows也會卡,但是只會卡第一次,搜尋網路上的解決方案是cuda在做cache,而且顯示卡記憶體越大會卡越久,網路有提供windows方案,就是設定最大cache,速度就會加快了。

image

那麼ubuntu似乎沒這個選項,搜尋其他方案,發現說如果nvidia 3x開頭的請使用tf 2.5以上版本,嘗試了一下發現確實就沒問題了,只是要安裝tf2.5稍微麻煩,以py38來說,如果不指定tf版本一般會安裝tf2.4,所以這裡紀錄一下

$ nvidia-smi #檢查nvidia驅動程式安裝狀況
$ conda create -n Python38 python=3.8  #建立py38環境
$ conda activate Python38 #啟動環境
$ pip install tensorflow-gpu==2.5.0  #安裝TF2.5 for nvidia 3x以上
此時測試tf GPU(tf.test.gpu_device_name())時會發現 dlerror: libcudnn.so.8代表cudnn有問題
$ conda install -c anaconda cudnn  #安裝cudnn
此時測試GPU時一樣會發現問題dlerror: libcudnn.so.8
$ conda update --all #更新所有套件,即可更新cudnn
測試正常

Screenshot from 2022-02-26 02-45-28.jpg
 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

剛剛整理好家裡的一台老電腦,順便看一下這台老電腦內有什麼設備可以拆出來利用的,開啟裝置管理員查看配備的時候,查到硬碟的品牌是HGST,感覺有可能是hitachi的產品,隨手在網路查一下,果然是hitachi的硬碟,順著文章往下看,原來hitachi竟然還併購IBM硬碟來的,看到IBM硬碟就想起我念研究所的時代,今天就來聊聊早期的硬碟品牌吧。

因為當時在電腦賣場打工的原因,偶爾都會有同學請我幫忙買電腦材料像是CD、鍵盤、滑鼠、墨水匣這些小東西,也有大一點的螢幕、機殼、Power,當然也有硬碟之類的,記得當時跟北門的「流星電腦」(應該沒記錯名字)的妹妹混得很熟,流星妹妹都穿著大紅色制服,而且都年輕漂亮,確實很吸引成大這些宅男,這些人都會被流星妹妹騙去買電腦,當時我也差點就跟流星妹妹在一起了~

老霸王不提當年勇(老婆正在後面看著呢),講回硬碟,IBM硬碟其實在台灣算是比較晚看到,他的特點就是背面有一圈白鐵造型的圓圈,看起來就很粗壯,當時代號是不是叫做大力神之類的(再請網友指正),當時實驗室買了一台伺服器電腦,就是使用IBM萬轉硬碟,那個開機時候的噪音可以比的上直升機起飛,真的不誇張。

image
▲ IBM 80G (資料來源:網路)

不過當時最受一般使用者歡迎的主要是:Maxtor、Seagate、Quamtun這三家,可能是Maxtor總是比其他品牌便宜個倆三百,所以我就變成了他的忠實顧客,每次有同學要買硬碟我都是直接幫他買Maxtor,奇怪也沒收代言廣告費。

Maxtor的代號是鑽石X代,外型上也很特別,背面就是全黑(或全白),加上放射狀的線條,好像沒有化妝、粗曠不修邊幅的老男人,這可能是我一眼就愛上的原因吧。

image
▲ Maxtor 鑽石系列硬碟(資料來源:網路)

當時Maxtor最大的競爭者應該之一就是Seagate,Seagate的外型很多變,記得有一款還穿了衣服,感覺特別嬌嫩,記得型號有捷豹、梭魚...等等,Seagate經常被人用發音來戲稱是「死雞」,好笑的是在當時在研究室內死一顆Seagate硬碟,竟然引發連鎖反應的順帶掛掉好幾顆死雞硬碟,就被戲稱為「雞瘟」發作,真的是很巧合,當然啦,最後大家被我說服都換成鑽石硬碟了。

Seagate的外觀上感覺就是嬌氣上身,所以還穿了件衣服。不過這個衣服受熱久了以後就會變大,感覺就鬆垮垮,乾脆就給他扒光....

▲ Seagate 硬碟(資料來源:網路)

再來一定要提的就是聞名遐邇的Quantum了,Quantum最知名的系列就是Fireball,然後剛好又燙又熱又吵,因此就被戲稱「火球」(等等,Fireball本來翻譯就是火球呀),火球的銷路也非常火熱,可以說是當時最受歡迎的硬碟了。

QQ鳥~ Quantum Fireball EX 4.3AT EX43A101 EX51A013 (b054) | 露天拍賣
▲ Quantum 4.3G 火球 硬碟(資料來源:網路)

火球雖然很火,壓過死雞、火過鑽石,不過能讓Quantum留名千史的倒不是這顆火球,而是另外一款讓眾人訕笑一輩子的硬碟BigFoot「大腳」,不知道誰給的勇氣,Quantum竟然會出產這種5.25吋超大硬碟,而且只有4500轉,速度慢到靠背不說,還經常壞軌,記得當時還有朋友說,主要是因為半徑過大,磁片外圍的振動幅度會更大,可能導致壞軌機率更高,所以大腳要「立著」安裝,但是誰的電腦裡面有立著安裝大腳的空間呀。

不過大腳靠著便宜取勝確實騙到很多不懂的電腦新手,尤其比較相同價位的硬碟時,大腳的容量都高出一截,如果是組裝牌電腦規格不寫清楚,只看容量確實是便宜的選項,許多人買回家覺得慢,打開電腦殼一看知道被大腳給踩了,後來大腳確實風評太差,就沒在繼續出產了。還記得當時Quantum打出的廣告手法就是說,雖然轉速慢,但是我的圓周大,所以同時間磁頭能掃過得範圍與5400轉是幾乎一樣的,效能不會差太多,但是消費者可沒那麼好騙。

image
▲ Quantum 5.25吋 大腳 硬碟(資料來源:網路)

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

根據我個人經驗,提供關於使用卷積時的倆三個建議作為參考

1.    建議都採用3x3卷積,但增加卷積層數,根據計算2層3x3=1層5x5

原理:5x5卷積核的參數有25個,3x3卷積核的參數有9個,前者是後者的25/9=2.78倍。因此,GoogLeNet團隊提出可以用2個連續的3x3卷積層組成的小網絡來代替單個的5x5卷積層,即在保持感受野範圍的同時又減少了參數量

2.    盡可能的使用最多"卷積核",只要能在記憶體可用範圍內
3.    盡可能的使用較多的"卷積層",但要注意池化後圖形大小是否足夠
3.    平面層(傳統層)一定要使用Dropout,卷積可以不用,卷積層建議使用Batch Normalization(參考:http://t.ly/Zyof)
4.    建議使用image Generate,否則會在實際使用上造成問題(實際環境變化多)
5.    批次量的影響:批次數量大收斂慢但較為穩定,數量小則收斂快但跳動會比較大,不過批次量大時,可能會有OOM問題,建議批次量最大不要超過256,最小不要低於32,不過還是根據您手上的樣本量來決定。
6.    輸入層使用較多卷積時收斂慢,但會較為準確


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()