###### tags: `東京威力 TEL` {%hackmd DzaUykeiRfWOMkjFL_QkCQ %} # II. Webcam ## <font color="orange"> 01. Webcam x Rpi x OpenCV</font> 這個章節最後的目的是: 在 Windows 上的 Visual Studio Code,用 SSH 連線至 RPi 4B, 並且可以在 Windows 上看到 RPi 用 OpenCV 的 `imshow()` 函式所顯示出來的圖像。 ### <font color="pink"> 1-1. 確認相機 OS 相容性與測試</font> 首先到 [RPi USB Webcams]( https://elinux.org/RPi_USB_Webcams) 確認自己的相機支援 RPi,我使用的單眼相機是 Logitech C270。 下載一個簡單的鏡頭軟體。 ```= sudo apt-get install fswebcam ``` 測試鏡頭運作,成功的話會在當前資料夾產生 `test.jpg` 的圖片。 ```= fswebcam test.jpg ```  :::warning 如果失敗,先確定鏡頭有支援 RPi,然後看看下面提到的可能問題。 ::: ### <font color="pink"> 1-2. RPi Interface 設定</font> 樹梅派預設的鏡頭功能是 disable 的。 所以我們要去調設定,以下是 Server 的設定過程: <font color="yellow">1. 安裝 raspi-config </font> 輸入以下指令,一行一指令: ```= wget https://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20200601_all.deb -P /tmp sudo apt-get install libnewt0.52 whiptail parted triggerhappy lua5.1 alsa-utils -y sudo apt-get install -fy sudo dpkg -i /tmp/raspi-config_20200601_all.deb ``` <font color="yellow">2. 執行 raspi-config </font> ```= sudo raspi-config ``` 接著在終端機會跳出這個畫面,是可以用鍵盤操控選單的喔!  選 Interfacing Options -> Camera   如果順利的話,可以直接選 `Yes` 再 `OK`。 然後選最下方右邊的 `finish`,選 `Yes` 重開機  :::warning 不過我遇到下面這個錯誤,Debug 完後可以再回來做這步。 另外,如果是用 SSH,重開機時終端機會連不上,建議是關掉重開連線。 ::: <font color="yellow">3. debug -- no start_x.elf </font>  <font color="magenza">a. 先看 boot 分區所在的設備號。</font> ```= df -h ```  <font color="magenza">b. 我的是在 `/dev/mmcblk0p1`,把它 mount 到 /boot 上。再確認有 mount 成功。</font> ```= sudo mount /dev/mmcblk0p1 /boot df -h ```  <font color="magenza">c. 現在再回去做第二步就能順利運作了!</font>   ### <font color="pink"> 1-3. 其他指令</font> 以上步驟都確認沒問題後,可以試著輸入這些指令觀察一下結果。 <font color="yellow">1. 列出連接的USB 裝置。 </font> ```= lsusb ```  插上鏡頭後,輸入這個指令後如果沒顯示鏡頭資訊,應該是鏡頭本身有問題而無法連線。 <font color="yellow">2. 查詢 RS232 COM Port。 </font> 查這個沒用。對,這個指令本來就不會顯示有連接上,因為鏡頭不是走 RS232。 ```= dmesg | grep tty ```  ### <font color="pink"> 1-4. 下載 X Server + VSCode Extensions</font> 在 [第 III 章. 2-1 下載 X Server](/s/FdMccI3LRZWV7qeMwbDvyA?both#2-1-%E4%B8%8B%E8%BC%89-X-Server) 有完整的下載步驟(不用做後續的 WSL 處理)。 執行配置好的 XMing後,在 VSCode 上安裝其他模組。  ### <font color="pink"> 1-5. 下載 MobaXterm + 查詢 DISPLAY 地址</font> >我們要用 MobaXTerm SSH 至 RPi 上,然後查看當前開放的 DISPLAY 地址。 [MobaXTerm 下載連結](https://mobaxterm.mobatek.net/download-home-edition.html),選左方藍色的 Portabel Version。 解壓縮後,按 Windows 搜尋 MobaXTerm 的執行檔。  接著會進到如下畫面:    接著在 ssh 的終端機內查看 DISPLAY 位址: ```= echo $DISPLAY ``` 我的位址是 `localhost:10.0`。 **之後就可以回到 VSCode 的 terminal 中操作就好,但 MobaXTerm 不可以關閉。** ### <font color="pink"> 1-6. 修改 VSCode 文件</font> <font color ="yellow">1. 在 VSCode 中按 `ctrl + shift + P`,輸入 ssh config,選擇「Open SSH configuration files」。</font>  <font color ="yellow">2. 在 Host 資訊欄中多加三行。</font> ```= ForwardX11 yes ForwardX11Trusted yes ForwardAgent yes ```  <font color ="yellow">3. 在當前資料夾的 .vscode 中修改/生成 launch.json 檔案,添加一個指令。</font> ```= "env":{ "DISPLAY":"localhost:10.0" } ```   :::success 我的 .vscode 是放在 package/src 裡面,如右圖,灰灰的是因為我在 .gitignore 中忽略了它。 另外注意 env 指令要放在 "configurations": [ ] 的 { } 內,如果原本沒有就手動加上。 ::: ### <font color="pink"> 1-7. 修改 .bashrc </font> 最後在 .bashrc 檔案加上剛剛查詢到的 DISPLAY 地址。 ```= sudo nano ~/.bashrc ``` 在文末加上這句。 ```= export DISPLAY="localhost:10.0" ```  好了按 `ctrl + x` ,輸入 `y` 按 `Enter` 退出。接著記住 source。 ```= source ~/.bashrc ``` 現在在終端機中可以找到 DISPLAY 地址。 ```= echo $DISPLAY ```  ### <font color="pink">1-8. 測試鏡頭運作 + OpenCV </font> 先看終端機中會不會跳出一個時鐘的圖片。 ```= sudo apt install x11-apps xclock ```  這邊我有遇到一個 bug: ``` “Warning: Missing charsets in String to FontSet conversion” ``` 解決方法是輸入指令 ```= export LC_ALL=C ``` :::info 在用遠端影像時,MobaXTerm 要開著喔,不然會跳出 cant open display 的錯誤訊息。 ::: 接下來就可以去試著跑 OpenCV 囉 ~ 效果如下(請無視賴掉的辨識效果 QQ):  不過同時 VSCode 的終端會顯示一個錯誤,但應該沒差啦 :smiley: ``` [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up