在Day 25:DHT22的兩難.解密感測器中,你的室友們想要潛入女生宿舍送宵夜,還拉你下水,但當室友A──眼鏡仔破解門禁系統時,卻觸發了保護機制,結果你、眼鏡仔、毛帽男三人被困在一個女生房間裡。
你在化妝包裡面找到一個長的像口紅的USB,接著用裡面的Python程式控制LED燈,結果發現房間裡有一個盆栽,上面的樹莓正閃爍著紅色亮光,裡面還有一條線連接到DHT22溫溼度感測器。
眼鏡仔用筆電連接到Raspberry Pi 4上,看到程式碼裡有一個條件:如果溫度超過30度,且濕度超過80%,就會啟動一個繼電器。
你們合力用打火機產生熱能,再用濕毛巾增加水分蒸發,結果成功觸發繼電器。你們發現這個繼電器連接到風扇的插頭,然後風扇開始緩緩轉動。
「原來,大漂亮用繼電器來控制風扇的開關!」眼鏡仔歡呼,「還可以自動調節風扇轉速噎。」
但此時你們陷入膠著。你們不知道大漂亮引導你們找到盆栽、觸發繼電器、打開風扇之後,接下來該怎麼做。只好繼續尋找線索了。
你在電風扇的後面發現一張紙條,於是你叫眼鏡仔和毛帽哥一起來看上面寫什麼。
恭喜你找到了我的提示!如果你想要逃出密室,跟我見面,就按照我的指示做吧!
首先,你們要用`WebCam`攝影機拍下照片,然後用`Python`程式把照片轉換成`ASCII`碼。
接著,你要用`GPIO4`接腳控制`LED`燈,讓它閃爍出`ASCII`碼。就可以得到下一個提示。
如果你們成功做到了,就代表你們是真心想認識我。我會在密室出口等你們。
你們三個看完紙條後,眼鏡哥說:「難怪……我就覺得那個WebCam攝影機很可疑……我還在想,它是用來監視我們的嗎?還是用來幹嘛的?」
「上面說要把照片轉換成ASCII
碼欸?這是什麼?」
「ASCII
圖像是一種用文字符號來表示圖像的方法」眼鏡仔解釋,「就像是用字母和符號來畫出一張臉。」
, ,
(o,o)
\_/
-"-"-
「感覺有點像日本的顏文字……」毛帽哥不小心笑出來。
「太難了吧……大漂亮竟然設計了這麼一個燒腦的模仿遊戲……」你們差點暈倒,因為你們都覺得這個任務很難。你們三個人中,有兩個人很想要見到大漂亮,你是還好,比起見到大漂亮,你比較想要從這個鳥地方離開。你們達成共識,決定接受她的挑戰,按照她的指示做。
你發現那張紙條的背面寫著Python的code:
pip install PIL numpy opencv-python
「這是什麼意思?」你向眼鏡仔求救。
「就是要先安裝一些Python
模組,例如:PIL
、numpy
和cv2
。我們可以用pip
指令來安裝。」
「Python
模組……?PIL
、numpy
和cv2
……?那些是什麼?」你聽得頭昏眼花。
「Python
模組就像是一些工具箱,裡面有很多方便的工具,可以幫我們完成不同的任務。」眼鏡仔解釋,「pip
指令就像是一個快遞送貨員,可以把這些工具箱送到我們的電腦上。」
「那PIL
、numpy
和cv2
呢?」
「PIL
模組可以幫我們處理圖片檔案。」毛帽哥說,「numpy
模組可以幫我們處理數字和矩陣。」
「對啊,然後cv2
模組可以幫我們用攝影機和影像處理。」
「那cv2
模組要用來做什麼?」你問。」
「cv2
模組就像是攝影師,可以幫我們拍要轉換成ASCII
圖像的照片。」眼鏡仔解釋,「我們要用cv2
模組來打開WebCam
攝影機,然後拍一張照片。」
#引入cv2模組 就像是打開工具箱
import cv2
#建立一個VideoCapture物件 就像是拿出攝影機
#參數0表示使用第一個攝影機
cap = cv2.VideoCapture(0)
#讀取一偵影像 就像是按下快門
#ret是布林值 表示是否成功讀取 frame是影像資料
ret, frame = cap.read()
#釋放VideoCapture物件 就像是關掉攝影機
cap.release()
#把frame影像資料儲存成image圖片檔 就像是把照片印出來
cv2.imwrite("webcam.jpg", frame)
「然後用PIL
模組來讀取剛剛儲存的照片,並且調整大小和灰階化。」眼鏡哥繼續說,「最後,我們要用numpy
模組來把灰階圖像轉換成ASCII
碼。」