日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派实现实时视频监控

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派实现实时视频监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. 硬件設備
  • 2. 軟件方法
    • 2.1. motion
    • 2.2. LJPG-streamer
    • 2.3. python(Picamera+socket)

我理解的實時視頻監控,是利用樹莓派的攝像頭采集到的視頻流通過無線或有線傳輸實現一個遠程的觀看。

攝像頭型號傳輸方式
USB、官方攝像頭motion、mjpg-streamer、python(Picamera+socket)

1. 硬件設備

USB和官方攝像頭屬性上的差別我覺得是官方攝像頭是采用一個特殊的轉接線(CSI(Camera Serial Interface))與樹莓派進行連接。
官方轉接線的攝像頭需要現在樹莓派配置上打開攝像頭功能,而USB攝像頭插上即用,在這里也說明攝像頭的啟用。

  • USB攝像頭
    將USB攝像頭插入樹莓派;
    lsusb查看USB攝像頭,找打相應的攝像頭型號,此處的是羅技攝像頭;

    046d:0825 Logitech, Inc. Webvam C270
  • 官方轉接線攝像頭
    將攝像頭轉接線連上樹莓派,那個卡槽可以往上掰開的,不要大力出奇跡了;
    打開樹莓派的攝像頭功能:sudo raspi-config,然后依次選擇5 Interfacing Options,進入之后選擇P1 Camera,然后在 Would you like the camera interface to be enabled? 對話框上選擇 Yes 。最后通過 Finish 退出,并重啟樹莓派;
    檢驗攝像頭是否啟用:在終端輸入raspistill -o test.jpg,如果成功則在主文件夾下有該圖片。

2. 軟件方法

方法說明
motion較為簡單,但是很耗CPU,相對延遲,有存儲功能
mjpg-streamer相對motion速度較快,沒有找到存儲目錄。更加推薦這個,在速度上比比python實現更快,也包含相應的參數配置,在/plugins/input_raspicam文件夾下,后期補充其詳細配置,堪比第三種方法。
python(Picamera+socket)http.server編程

2.1. motion

我嘗試過用無論是USB還是官方轉接線的攝像頭motion都可以實現。

motion 是一款開源的支持多種攝像頭的監控軟件。

如果不是第一次配置,可直接跳到第四步,即一些配置步驟只需要執行一次即可。
第一步:安裝motion

$sudo apt-get update $sudo apt-get install motion

第二步:接上攝像頭
如上所示。

第三步:配置motion
配置/etc/motion/motion.conf文件和/etc/default/motion文件

查看他的配置:樹莓派+motion實現局域網簡單監控

  • /etc/default/motion文件:

    //啟動后臺的守護進程 start_motion_daemon=yes
  • /etc/motion/motion.conf文件:

    //讓Motion作為守護進程運行 daemon on ... //用這個端口號來讀取數據 stream_port 8081 ... //網絡上其它主機也可以看到 stream_localhost off ... //幀速率為每秒30幀 stream_maxrate 30 ... //攝像頭捕捉視頻的幀速率為每秒30 framerate 30

其他一些重要的配置進行介紹。
(1)target_dir:該選項的默認值為/var/lib/motion。這就是Motion存儲動作捕捉結果的地方。Motion的進程是以用戶motion的身份運行的,所以用戶motion必須對該目標文件夾有寫入權限。
(2)threshold:動作捕捉閾值,默認值為1500。如果有超過閾值的像素點發生變化,那么認為有動作發生。
(3)videodevice:該項默認為路徑/dev/video0。這個路徑對應了默認的視頻設備。如果你無法在/dev下找到video0,那么可以嘗試加載V4L2驅動來解決問題:

$sudo rpi-update $sudo modprobe bcm2835-v412

第四步:開啟服務

$sudo service motion start $sudo motion

第五步:主機查看
在另一條能ping通的計算機上,輸入“http://樹莓派IP地址:8081/",就能看到攝像頭的信息啦,信息存儲在/var/lib/motion之下。
第五步:終止服務

$sudo service motion stop

參考鏈接:樹莓派(四):使用攝像頭實現拍照和遠程監控功能

2.2. LJPG-streamer

MJPG-streamer是一個優秀的開源project,它可以通過HTTP的方式訪問linux上面的兼容攝像頭,從而做到遠程視頻傳輸的效果。

其實現步驟大致需要先安裝mjpg-streamer依賴的庫,再從github上下載源碼進行編譯,再嘗試解決官方攝像頭啟動失敗的問題。前提為樹莓派上已連接攝像頭并且能夠開啟。
第一步:安裝必要的庫

$sudo apt-get update $sudo apt-get install subversion $sudo apt-get install libjpeg8-dev $sudo apt-get install imagemagick $sudo apt-get install libv4l-dev

第二步:下載源碼、修改配置并編譯
下載源碼(方式二選一即可):

// 方法一:采用git方式 $sudo apt-get install git $sudo git clone https://github.com/jacksonliam/mjpg-streamer.git // 方法二:采用wget方式 $wget http://github.com/jacksonliam/mjpg-streamer/archive/master.zip $sudo apt-get install unzip $unzip master.zip // 方法三:直接從官網下載壓縮包,然后解壓 $sudo apt-get install unzip $unzip mjpg-streamer-master.zip

編輯配置文件(可選,我沒有進行配置):

$cd mjpg-streamer-master/mjpg-streamer-experimental $vim plugins/input_raspicam/input_raspicam.c

編譯(在mjpg-streamer-master/mjpg-streamer-experimental路徑下):

$sudo apt-get install cmake $sudo apt-get install gcc g++ $make all $sudo make install

第三步:嘗試開啟服務
使用下面指令啟動普通USB攝像頭:

./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

啟動樹莓派專用攝像頭RaspiCamera的指令是:

./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -w ./www"

某些攝像頭在執行這個指令時會有報錯,至少要是最后沒有退回到命令行提示符:

第四步:查看圖像
查看圖像,在PC端打開瀏覽器,輸入下面網址可以看到靜態截圖:
http://<樹莓派IP>:8080/?action=snapshot

輸入下面兩條網址可以看到動態圖像(至于為什么端口號是8080在樹莓派上運行后有相關的提示,至于為什么加"?action=stream",在進入http://raspberry-ip-address:8080是一個網址,"?action=stream"專門存放視頻):
http://raspberry-ip-address:8080/?action=stream

動態圖像的這個地址在有的瀏覽器不太好使,可以使用下面這個網址:
http://raspberry-ip-address:8080/javascript_simple.html
第五步:退出
ctrl+c or ctrl+d

參考鏈接:
「玩轉樹莓派」搭建智能家居遠程監控系統
樹莓派上MJPG-streamer的安裝過程
Raspberry pi 記錄3-關於Pi Camera和即時串流(MJPG Stream Server)
樹莓派新版系統上使用mjpg-streamer獲取USB攝像頭和樹莓派專用攝像頭RaspiCamera圖像
mjpg-streamer

2.3. python(Picamera+socket)

樹莓派上python的編程環境

應用說明
Python3(IDLE)一個Python Shell,不適合大型代碼。
Thonny Python IDEmini版pycharm,有Python Shell和代碼書寫區域
Visual Studio Code

樹莓派上運行python文件

方法說明
方法一sudo python3 xxx.py(sudo可選)
方法二在程序開頭加入#!/user/bin/python3
# !/user/bin/python3 # Web streaming example # Source code from the official PiCamera package # http://picamera.readthedocs.io/en/latest/recipes2.html#web-streamingimport io import picamera import logging import socketserver from threading import Condition from http import serverPAGE="""\ <html> <head> <title>Raspberry Pi - Surveillance Camera</title> </head> <body> <center><h1>Raspberry Pi - Surveillance Camera</h1></center> <center><img src="stream.mjpg" width="640" height="480"></center> </body> </html> """class StreamingOutput(object):def __init__(self):self.frame = Noneself.buffer = io.BytesIO()self.condition = Condition()def write(self, buf):if buf.startswith(b'\xff\xd8'):# New frame, copy the existing buffer's content and notify all# clients it's availableself.buffer.truncate()with self.condition:self.frame = self.buffer.getvalue()self.condition.notify_all()self.buffer.seek(0)return self.buffer.write(buf)class StreamingHandler(server.BaseHTTPRequestHandler):def do_GET(self):if self.path == '/':self.send_response(301)self.send_header('Location', '/index.html')self.end_headers()elif self.path == '/index.html':content = PAGE.encode('utf-8')self.send_response(200)self.send_header('Content-Type', 'text/html')self.send_header('Content-Length', len(content))self.end_headers()self.wfile.write(content)elif self.path == '/stream.mjpg':self.send_response(200)self.send_header('Age', 0)self.send_header('Cache-Control', 'no-cache, private')self.send_header('Pragma', 'no-cache')self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')self.end_headers()try:while True:with output.condition:output.condition.wait()frame = output.frameself.wfile.write(b'--FRAME\r\n')self.send_header('Content-Type', 'image/jpeg')self.send_header('Content-Length', len(frame))self.end_headers()self.wfile.write(frame)self.wfile.write(b'\r\n')except Exception as e:logging.warning('Removed streaming client %s: %s',self.client_address, str(e))else:self.send_error(404)self.end_headers()# 綁定IP端口,使用HTTPServer來處理HTTP請求, ThreadingMinIn處理socket請求 class StreamingServer(server.HTTPServer, server.BaseHTTPRequestHandler):allow_reuse_address = Truedaemon_threads = Truedef camera_config(camera):camera.resolution = (640, 480)camera.framerate = 25camera.video_stabilization = True # 打開視頻穩定功能camera.brightness = 55camera.contrast = -5camera.awb_mode = 'auto'camera.ISO = 400return camerawith picamera.PiCamera() as camera:camera = camera_config(camera)output = StreamingOutput()#Uncomment the next line to change your Pi's Camera rotation (in degrees)#camera.rotation = 90camera.start_recording(output, format='mjpeg')try:address = ('', 8000)server = StreamingServer(address, StreamingHandler)server.serve_forever()finally:camera.stop_recording()

在樹莓派終端輸入:python3 ~/swift/rpi.python
此時監控系統以及開始工作了。局域網內的任何設備,打開瀏覽器地址欄輸入 http://樹莓派IP地址:8000,即可打開網絡監控系統。視頻響應的延時取決于你的樹莓派和路由器的性能。
參考鏈接
用樹莓派搭建一個實時視頻監控系統
樹莓派PiCamera庫的基本使用

總結

以上是生活随笔為你收集整理的树莓派实现实时视频监控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。