2020年2月25日 星期二

Raspberry PI 安裝 OpenCV

在import cv2會有錯誤訊息

Python2 的 安裝方法:
sudo apt-get install python-opencv

Python3 的 安裝方法: 
pip3 install opencv-python==3.4.6.27
Ref: https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/issues/67

直接裝最新版可能無法使用, 先指定版本比較安全

VrtualBox 錯誤訊息(?

之前為了實驗課, 有準備一個Fedora 5的虛擬機

前幾天重跑的時候發現開機後沒有視窗介面, 錯誤訊息是 no screen found.  囧!!

後來在這邊看到解決方法:
http://www.pclinuxos.com/forum/index.php/topic,137837.0.html

感覺是VB更新到某一個版本後, 虛擬機裡面的Guest Additions需要重新安裝

1. 先進入終端機模式
2. 插入VB的Guest映像檔
3. 用指令的方式去安裝Guest additions
4. 重開機, 然後就好了

神奇~~ XD

2020年2月21日 星期五

PI camera 加速方法 (!?

昨天看到一篇文章在介紹提升 PI 的FPS
https://www.pyimagesearch.com/2015/12/28/increasing-raspberry-pi-fps-with-python-and-opencv/

然後用他的sample code測了一下, 結果是:

pi@raspberrypi:~$ python3 picamera_fps_demo.py
[INFO] sampling frames from `picamera` module...
[INFO] elasped time: 3.21
[INFO] approx. FPS: 31.47 (by cv2.VideoCapture(0))

[INFO] sampling THREADED frames from `picamera` module...
[INFO] elasped time: 0.32
[INFO] approx. FPS: 309.94 (by PiVideoStream().start())

pi@raspberrypi:~$ python3 fps_demo.py
[INFO] sampling frames from webcam...
[INFO] elasped time: 3.77
[INFO] approx. FPS: 26.51 (by cv2.VideoCapture(0))

[INFO] sampling THREADED frames from webcam...
[INFO] elasped time: 1.74
[INFO] approx. FPS: 57.59 (by WebcamVideoStream(src=0).start())


看了一下code, 主要差異是讀取video的語法

[方法1: 大約30FPS]
import cv2
stream = cv2.VideoCapture(0)

[方法2: 大約58FPS]
from imutils.video import WebcamVideoStream
vs = WebcamVideoStream(src=0).start()

[方法3: 大約300FPS] 驚!!!!!!!!!!!!!!
from imutils.video.pivideostream import PiVideoStream
vs = PiVideoStream().start()

raspbian 安裝 dlib

安裝指令其實很簡單, 就一行pip而已:
pip install dlib


可是啊, 安裝過程超級久, 感覺系統資源吃很兇
從昨天下午4點多打完指令後, 到了今天早上9點多還在跑
可是按ctrl + c還可以終止, 應該也不算當掉 XDD

然後就改了一下swap大小, 從100變成1024
sudo nano /etc/dphys-swapfile

找 CONF_SWAPSIZE=100
把 100 改成 1024

重新啟動的指令: sudo service dphys-swapfile restart
檢查目前的狀態: swapon -s
ref: https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-swap-configuration-using-usb-stick/


為了節省更多系統資源(?) 也一併把桌面環境關閉, 改成純文字模式 (其實忘記正確的名稱)
指令: sudo init 3

打完這個指令後, 桌面環境就被關閉了


這個時候再打 pip install dlib, 大約兩小時就跑完了 (QQ)

要恢復桌面環境就再打 sudo init 5


2020年2月19日 星期三

[測試中] BerryNet on RaspPI

官網
https://github.com/DT42/BerryNet
https://github.com/DT42/BerryNet/wiki/Installation
https://github.com/DT42/BerryNet/wiki/Dashboard
https://github.com/DT42/BerryNet/wiki/Cameras
https://github.com/DT42/BerryNet/blob/master/doc/darknet-nnpack.md


投影片介紹
https://docs.google.com/presentation/d/1SZGGCBSZSHyt_m7kWsrlZtjnzLY09bvQ-BxvUjQVzxg/edit#slide=id.g6526f6c623_0_417

台灣樹莓派介紹
https://www.raspberrypi.com.tw/28323/meetup-28-data/

其他網站
https://hackaday.io/project/28649-berrynet-deep-learning-gateway-on-raspberry-pi

DIY Your AI Home Security Camera With Raspberry Pi And Open-source Software
https://medium.com/berrynet/diy-your-ai-home-security-camera-with-raspberry-pi-and-open-source-software-10d4364df20f

-----------------

$ git clone https://github.com/DT42/BerryNet.git
$ cd BerryNet
$ ./configure

If the installation is completed successfully, next step is to configure your BerryNet.
https://github.com/DT42/BerryNet/wiki/Configuration

輸入這個網址
http://PI_addr/berrynet-dashboard/


然後就沒有了 QQ

2020年2月3日 星期一

DHT11的datasheet閱讀心得(?


雖然是一個很普通的sensor(!?), 最近在看code跟datasheet的內容, 發現很多對不上的地方

在一開始的MCU傳送訊號時, 會先送出 >18ms 的signal, 然後再等待20~40 us, 接下來是讀取DHT回傳的bit


------------------------------------------------------------------
在Adafuit的範例裡:
https://github.com/adafruit/Adafruit_Python_DHT/blob/master/source/Raspberry_Pi_2/pi_2_dht_read.c

  // Set pin high for ~500 milliseconds.
  pi_2_mmio_set_high(pin);
  sleep_milliseconds(500);

  // Set pin low for ~20 milliseconds.
  pi_2_mmio_set_low(pin);
  busy_wait_milliseconds(20);

在另一個範例裡:
https://github.com/szazo/DHT11_Python/blob/master/dht11.py

        # send initial high
        self.__send_and_sleep(RPi.GPIO.HIGH, 0.05)

        # pull down to low
        self.__send_and_sleep(RPi.GPIO.LOW, 0.02)

------------------------------------------------------------------

這兩個的寫法, MCU分別傳 500ms(adafruit) 與 50ms(szazo)的訊號(high), 然後等待(low) 20 ms的時間.

只是看datasheet的說明, 應該傳送 20ms 就夠了

至於等待(low)的時間長度, 應該是要包含後面的DHT回傳資料的區間
假設回傳的都是1 (120us), 40 bit 就是 40 * 120 us

再加上DHT response (160us), 還有MCU wait time (20~40 us)

總共是 40*120 + 160 + 40 = 5000 us = 5ms

理論上, MCU送 20ms 的訊號(high), 然後再等待(low) 5 ms, 應該就可以了


實測之後會發現, 等待(low) 5 ms 會有問題, 10ms會比較穩定一點

所以code可以改成 傳送20ms的訊號(high), 然後等待10ms (low)


可是規格書有提到, 最多只能每秒測一次

所以時間寫大一點好像也沒差 XD

-----

為什麼blogger不能直接 ctrl+v 貼上圖片啊, 這樣好麻煩... zzz