Select Page

在Raspberry 使用 Python Vlc or CVlc 播放影音

如果想要用 Raspberry 樹梅派打造自己擁有的播放器,首選就是用VLC,可以全功能的做各種高難度的自訂控制,真的有找不到的功能,就自己再添加一下就可以了。

首先要先安裝 VLC

sudo apt install -y vlc

接下來安裝 Python VLC

python -m pip install python-vlc

封裝一個 VLC.py

import os, time

# 設置VLC庫路徑,需在import vlc之前
os.environ['PYTHON_VLC_MODULE_PATH'] = "./vlc-3.0.6"

import vlc


class Player:
    '''
        args:設置 options
    '''
    def __init__(self, *args):
        if args:
            instance = vlc.Instance(*args)
            self.media = instance.media_player_new()
        else:
            self.media = vlc.MediaPlayer()

    # 設置待播放的url地址或本地文件路徑,每次調用都會重新加載資源
    def set_uri(self, uri):
        self.media.set_mrl(uri)

    # 播放 成功返回0,失敗返回-1
    def play(self, path=None):
        if path:
            self.set_uri(path)
            return self.media.play()
        else:
            return self.media.play()

    # 暫停
    def pause(self):
        self.media.pause()

    # 恢復
    def resume(self):
        self.media.set_pause(0)

    # 停止
    def stop(self):
        self.media.stop()

    # 釋放資源
    def release(self):
        return self.media.release()

    # 是否正在播放
    def is_playing(self):
        return self.media.is_playing()

    # 已播放時間,返回毫秒值
    def get_time(self):
        return self.media.get_time()

    # 拖動指定的毫秒值處播放。成功返回0,失敗返回-1 (需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
    def set_time(self, ms):
        return self.media.get_time()

    # 音視頻總長度,返回毫秒值
    def get_length(self):
        return self.media.get_length()

    # 獲取當前音量(0~100)
    def get_volume(self):
        return self.media.audio_get_volume()

    # 設置音量(0~100)
    def set_volume(self, volume):
        return self.media.audio_set_volume(volume)

    # 返回當前狀態:正在播放;暫停中;其他
    def get_state(self):
        state = self.media.get_state()
        if state == vlc.State.Playing:
            return 1
        elif state == vlc.State.Paused:
            return 0
        else:
            return -1

    # 當前播放進度情況。返回0.0~1.0之間的浮點數
    def get_position(self):
        return self.media.get_position()

    # 拖動當前進度,傳入0.0~1.0之間的浮點數(需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
    def set_position(self, float_val):
        return self.media.set_position(float_val)

    # 獲取當前文件播放速率
    def get_rate(self):
        return self.media.get_rate()

    # 設置播放速率(如:1.2,表示加速1.2倍播放)
    def set_rate(self, rate):
        return self.media.set_rate(rate)

    # 設置寬高比率(如"16:9","4:3")
    def set_ratio(self, ratio):
        self.media.video_set_scale(0)  # 必須設置為0,否則無法修改屏幕寬高
        self.media.video_set_aspect_ratio(ratio)

    # 註冊監聽器
    def add_callback(self, event_type, callback):
        self.media.event_manager().event_attach(event_type, callback)

    # 移除監聽器
    def remove_callback(self, event_type, callback):
        self.media.event_manager().event_detach(event_type, callback)

使用VLC.py

def my_call_back(event):
    print("call:", player.get_time())


if "__main__" == __name__:
    player = Player()
    player.add_callback(vlc.EventType.MediaPlayerTimeChanged, my_call_back)
    player.play("test.mp3")

    # 防止当前进程退出
    while True:
        pass
def my_call_back(event):
    print("call:", player.get_time())

官方文檔

https://www.olivieraubert.net/vlc/python-ctypes/doc/

參考資料

https://zhuanlan.zhihu.com/p/69906080

Raspberry Pi – PiVPN (OpenVPN)

用 Raspberry Pi 來實作一個簡單、靈活、好控管、安全、便宜的好用VPN,只要有一個固定IP,一台 Raspberry Pi,接上網路就可以擁有一個 VPN Server,Client 端則是下載 OpenVPN,就可以連上 PiVPN。

curl -L https://install.pivpn.io | bash

安裝非常的容易,安裝完畢後,需要用到的指令也很容易,列舉如下

「pivpn add」添加新用戶帳號跟密碼

「pivpn list」列出目前所有有效的帳號

「pivpn revoke」刪除某個用戶的帳號

「pivpn uninstall」卸載 PiVPN

官方網址:https://pivpn.io/

不到萬元台幣打造自己的機器狗-Make your pupper

不到萬元台幣打造自己的機器狗-Make your pupper

最新名人新寵「波士頓動力機器狗」,一隻要價220萬台幣,可不是每個人都養得起的,但佛心的史丹佛機器狗,已經開源了,在大陸那邊已經百花齊放,每家公司都擁有自己的機器狗,不用羨慕他們,全世界最強的擬態機器人公司,當然還是波士頓動力,但你看完這篇,也可以在幾天內買好零件,打造自己的動力機器狗。

波士頓動力機器狗宣傳片

史丹佛大學 Pupper 簡介

史丹佛大學開源的機器狗專案,用的主機是 Raspberry Pi 4,OS 是 Linux base ,可以與 Ubuntu 相容,核心的影像辨識演算法用的是 OpenCV ,預設就可以選轉、跳躍、小跑步

日本做的可愛 Pupper

從 Pupper BOM 表開始

可以從下面的網址,取得製作動力機器狗的所有需要的元件,如果全部都用買的大約要900美元,但很多東西是可以自己印,或是自己改,但如果嫌麻煩,直接去 Amazon 上一次購足即可

https://docs.google.com/spreadsheets/d/e/2PACX-1vRAPT8knAtIKwr5NxvVsEOxPK8zk8y3jPc51TdTPQtBHN7I9rqgU3z4Ys-C3Z3ETR2kcSDSY-u5ZP6k/pubhtml?widget=true&headers=false

去 Amazon 買足 Pupper 元件

上面提到的所有元件,已經有人整理好了,你只需要用下面的連結,進去選擇你需要的就可以了,Amazon 的購物清單,真的是超方便敗家的

https://www.amazon.com/-/zh_TW/hz/wishlist/ls/2ZB9AWGJ92F9L?ref_=wl_fv_le

直接購買整理好的 Pupper 元件

https://www.mangdang.net/Product?_l=en

組裝 Pupper 的身體

這部分是最花時間的,分成元件、外殼本體、電子電路,熟捻的高手大約要花費2小時

https://pupper.readthedocs.io/en/latest/guide/assembly.html

https://github.com/stanfordroboticsclub/Pupper-Raspi-PDB/

安裝 Pupper 的大腦 (軟體)

這個部分,如果你是常用 Raspberry Pi 的人,應該可以在1小時左右處理好,如果不是的話,按步驟來,應該需要3-4小時

https://pupper.readthedocs.io/en/latest/guide/software_installation.html

安裝程式在https://github.com/Nate711/RPI-Setup

OpenCV如果想換版本可以參考我之前的文章

校準以及測試

連接你的PS4搖桿,來控制 Pupper

https://pupper.readthedocs.io/en/latest/guide/operation.html

Pupper 參考資訊

Fusion 360 CAD 模型:https ://a360.co/2TEh4gQ

你可以透過 Fusion 360 CAD 匯出模型,並且用 3D 列印把它列印出來

史丹佛大學動力機器狗專案首頁

https://pupper.readthedocs.io/en/latest/guide/purchasing.html

用 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