2024/11/09

OpenCV一瞥(續)

摘要

本文概要記錄於Ubuntu作業系統啟動一個Docker容器來透過OpenCV函式庫進行攝影機畫面擷取並傳遞到VLC多媒體播放器的步驟。

本文

本文於Ubuntu 24.04作業系統上,參考這裡來安裝Docker引擎,隨後便執行另一版Ubuntu的Docker容器,於該容器上安裝OpenCV (Open Source Computer Vision Library)函式庫,接著使用Python程式搭配OpenCV來進行攝影機畫面擷取,擷取完的畫面將透過管線(pipe)傳遞至VLC多媒體播放器;其中,Docker容器的概念可以參考這裡,至於使用的攝影機為PlayStation Eye。

終端機(terminal)操作步驟分述如下:

  • 啟動容器
  • 安裝OpenCV
  • 安裝VLC
  • 執行Python程式以進行攝影機畫面擷取並透過管線傳遞至VLC
    • VLC直接播放畫面
    • VLC轉換後以群播形式播放串流
    • VLC轉換後以獨播形式播放串流,之1
    • VLC轉換後以獨播形式播放串流,之2
  • 完成

步驟已條列在這裡,其中包含了攝影機畫面擷取的原始碼。

 

啟動容器

包含以下指令,分別是拉取映象檔、及實例化映象檔為一個容器;這裡的映象檔版本為jammy標籤的ubuntu(即Ubuntu 22.04)。

docker pull ubuntu:jammy
docker run --name ubuntu-inst -it -e DISPLAY --net=host -v $XAUTHORITY:/root/.Xauthority --privileged=true -v ~/Downloads:/experiment ubuntu:jammy bash

 

安裝OpenCV

apt-get update
apt-get install python3-opencv

 

安裝VLC

apt-get install vlc

 

執行Python程式以進行攝影機畫面擷取並透過管線傳遞至VLC

由於目前容器的使用者為root、但VLC預設不容許以root身分執行,所以參考這裡來更改VLC容許以root身分執行

sed -i 's/geteuid/getppid/' /usr/bin/vlc

 

VLC直接播放畫面

cd /experiment
python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=25 --rawvid-width=640 --rawvid-height=480  --rawvid-chroma=RV24 - --sout '#display'


VLC轉換後以群播形式播放串流

python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480  --rawvid-chroma=RV24 - --sout '#transcode{vcodec=mp4v,acodec=none}:rtp{mux=ts,dst=224.1.1.102,port=5004}'


VLC轉換後以獨播形式播放串流,之1

python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480  --rawvid-chroma=RV24 - --sout '#transcode{vcodec=mp4v,acodec=none}:standard{access=http,mux=ts,dst=:3333}'


VLC轉換後以獨播形式播放串流,之2

python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480  --rawvid-chroma=RV24 - --sout '#transcode{vcodec=theo,vb=4096,acodec=none,scale=1}:standard{access=http,mux=ogg,dst=:3333/stream.ogg}'


其中,原始碼內容(即capture.py)如下。


至於OpenCV和VLC的版本如下。

 

完成

包含以下指令,即離開(容器context)、刪除容器、和移除映象檔。

exit
docker rm -f ubuntu-inst
docker rmi ubuntu:jammy


參考文獻

https://gist.github.com/okdimok/465039e582f2b9810674952eeda85436
https://unix.stackexchange.com/questions/125546/how-to-run-vlc-player-in-root


沒有留言:

張貼留言