RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【米爾MYD-YT507開(kāi)發(fā)板試用體驗(yàn)】使用mjpeg_streamer建立攝像頭圖傳

開(kāi)發(fā)板試用精選 ? 來(lái)源:開(kāi)發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-10-26 15:18 ? 次閱讀

本文來(lái)源電子發(fā)燒友社區(qū),作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2294644_1_1.html


在之前的研究中,已經(jīng)實(shí)現(xiàn)了米爾MYD-YT507開(kāi)發(fā)板接入??低?/u>USB攝像頭,并進(jìn)行攝像頭數(shù)據(jù)的獲取,具體可查看:USB攝像頭使用從入門到放棄。

在此基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)了米爾MYD-YT507開(kāi)發(fā)提供MJPEG推流,矽速M(fèi)2 Dock讀取該MJPEG推流,并顯示到屏幕上,其邏輯如下:
M2Dock推流數(shù)據(jù)獲取邏輯.png

最終的效果,可以查看:M2 Dock獲取MJPEG推流數(shù)據(jù)

這篇文章,分享的就是 米爾MYD-YT507開(kāi)發(fā)板 實(shí)現(xiàn)MJPEG推流的部分。

最開(kāi)始,我嘗試了使用nginx + nginx-rtmp-module模塊,來(lái)實(shí)現(xiàn)rtmp視頻推流。

具體操作如下:

  1. 安裝nginx,及nginx-rtmp-module模塊:
# Ubuntu18.04操作系統(tǒng)
# 安裝pcre

sudo apt install libpcre3 libpcre3-dev
sudo apt install openssl libssl-dev
sudo apt install zlib1g-dev

# 安裝nginx
wget http://nginx.org/download/nginx-1.22.0.tar.gz
git git clone https://github.com/arut/nginx-rtmp-module
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
make -j4
sudo make install
  1. 使用ffmpeg獲取攝像頭數(shù)據(jù)并推流:

    ffmpeg -input_format mjpeg -s:v 640x480 -framerate 30 -i /dev/video0 -f flv "rtmp://127.0.0.1:1935/live/test"
    
  2. 使用支持視頻流的播放器,播放流地址(注意IP修改為開(kāi)發(fā)板實(shí)際的IP):rtmp://192.168.1.207:1935/live/test
    ...

在矽速M(fèi)2 Dock上,使用的開(kāi)發(fā)環(huán)境是MaixPy。
Python中,對(duì)于MJPEG數(shù)據(jù),可以很方便的獲取。
于是又了解了Ubuntu系統(tǒng)下MJPEG推流的資料,使用mjpeg_streamer就能很方便的實(shí)現(xiàn)。

具體操作如下:

sudo apt install cmake libjpeg9-dev

git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make all
sudo make install

mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -r 320x240 -f 10" -o "output_http.so -w ./"

執(zhí)行 mjpg_streamer 后,就會(huì)啟動(dòng)對(duì)應(yīng)的服務(wù):
image.png

然后,通過(guò)瀏覽器訪問(wèn) http://192.168.2.207:8080/?action=stream 即可:
image.png

提供的MJPEG服務(wù),可以用瀏覽器直接播放,也可以在Python程序中調(diào)用并呈現(xiàn)。
可供測(cè)試的代碼如下:

import numpy as np
import platform

if platform.uname().node == "sipeed":
    from io import BytesIO
    from PIL import Image
    from maix import camera, mjpg, utils, display, image
else:
    import cv2

READ_TYPE = "socket"    # url socket

MJPEG_HOST = "192.168.2.207"
MJPEG_PORT = 8080
MJPEG_QUERY = "/?action=stream"


def img_data_show(jpg):
    global img_bytes
    global tmp_file
    global is_sipeed
    global BytesIO
    global Image
    global np
    global image
    global display

    if is_sipeed:
        if True:
            bytes_stream = BytesIO(jpg)
            pimg = Image.open(bytes_stream)
            img = image.load(pimg)
            display.show(img)
        else:
            with open(tmp_file, "wb") as binary_file:
                binary_file.write(jpg)
                img = image.open(tmp_file)
                display.show(img)
    else:
        img = cv2.imdecode(np.frombuffer(
            jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('i', img)
        if cv2.waitKey(1) == 27:
            exit(0)


def img_data_match(chunk):
    global img_bytes
    global tmp_file
    global is_sipeed
    global BytesIO
    global Image
    global np
    global image
    global display
    global img_data_show

    img_bytes += chunk
    a = img_bytes.find(b'xffxd8')
    b = img_bytes.find(b'xffxd9')
    if a != -1 and b != -1:
        jpg = img_bytes[a:b+2]
        img_bytes = img_bytes[b+2:]
        img_data_show(jpg)     


img_bytes = b''
tmp_file = "/tmp/test.jpg"
is_sipeed = platform.uname().node == "sipeed"

print("Connect to %s:%d with %s on %s" % (MJPEG_HOST, MJPEG_PORT, READ_TYPE, platform.uname().node))

if READ_TYPE == "url":
    import requests

    MJPEG_URL = "http://%s:%s%s" % (MJPEG_HOST, MJPEG_PORT, MJPEG_QUERY)

    r = requests.get(MJPEG_URL, stream=True)
    if(r.status_code == 200):
        print("connect success!")
        for chunk in r.iter_content(chunk_size=1024):
            img_data_match(chunk)
    else:
        print("Received unexpected status code {}".format(r.status_code))
elif READ_TYPE == "socket":
    import socket

    client = socket.socket()  # 創(chuàng)建socket套接字
    ret = client.connect((MJPEG_HOST, MJPEG_PORT))  # 狀態(tài)位,判定是否連接成功
    request_url = "GET %s HTTP/1.1rnHost:%srnConnection:Closernrn" % (
        MJPEG_QUERY, MJPEG_HOST)

    if(ret == -1):  # 連接失敗,退出程序
        print("connet error!")
        exit(-1)
    else:  # 連接成功
        print("connect success!")

    client.send(request_url.encode())  # 發(fā)送socket請(qǐng)求,開(kāi)始接收數(shù)據(jù)
    chunk = client.recv(1024)  # 第一個(gè)recv返回信息,跟圖片無(wú)關(guān)
    chunk = client.recv(1024)  # 這個(gè)信息開(kāi)始跟圖片有關(guān)系,放到接收變量里
    while chunk:  # 判斷是否還有信息
        img_data_match(chunk)
        chunk = client.recv(1024)  # 繼續(xù)接收

電腦上,將上述代碼保存為mjpeg_display_demo.py,并修改代碼中MJPEG_HOST為實(shí)際的開(kāi)發(fā)板ip地址,然后使用python mjpeg_display_demo.py運(yùn)行,就能查看顯示了。

如果上述代碼運(yùn)行在矽速M(fèi)2 Dock中,那么對(duì)應(yīng)的效果就是顯示到屏幕上了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 米爾科技
    +關(guān)注

    關(guān)注

    5

    文章

    227

    瀏覽量

    20957
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    人臉疲勞檢測(cè)應(yīng)用-米爾基于RK3576核心/開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LR3576開(kāi)發(fā)板米爾基于瑞芯微RK3576開(kāi)發(fā)板)的人臉疲勞檢測(cè)方案測(cè)試。
    的頭像 發(fā)表于 12-20 08:06 ?119次閱讀
    人臉疲勞檢測(cè)應(yīng)用-<b class='flag-5'>米爾</b>基于RK3576核心<b class='flag-5'>板</b>/<b class='flag-5'>開(kāi)發(fā)板</b>

    如何用OpenCV進(jìn)行手勢(shì)識(shí)別--基于米爾全志T527開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LT527開(kāi)發(fā)板米爾基于全志T527開(kāi)發(fā)板)的OpenCV手勢(shì)識(shí)別方案測(cè)試。摘自優(yōu)秀創(chuàng)作者-小火苗
    的頭像 發(fā)表于 12-13 08:04 ?601次閱讀
    如何用OpenCV進(jìn)行手勢(shì)識(shí)別--基于<b class='flag-5'>米爾</b>全志T527<b class='flag-5'>開(kāi)發(fā)板</b>

    追加名額丨米爾瑞芯微RK3576開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開(kāi)發(fā)板免費(fèi)試用活動(dòng)加碼啦~~米爾追加了2塊價(jià)值849元的
    的頭像 發(fā)表于 11-22 01:00 ?163次閱讀
    追加名額丨<b class='flag-5'>米爾</b>瑞芯微RK3576<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    米爾-Xilinx XC7A100T FPGA開(kāi)發(fā)板試用】+01.開(kāi)箱(zmj)

    米爾-Xilinx XC7A100T FPGA開(kāi)發(fā)板試用】+01.開(kāi)箱(zmj) 1.感謝 感謝米爾電子和電子發(fā)燒友提供的此次試用機(jī)會(huì),可
    發(fā)表于 11-12 15:45

    有獎(jiǎng)丨米爾 瑞芯微RK3576開(kāi)發(fā)板免費(fèi)試用

    米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了7塊價(jià)值849元的
    的頭像 發(fā)表于 11-12 01:00 ?299次閱讀
    有獎(jiǎng)丨<b class='flag-5'>米爾</b> 瑞芯微RK3576<b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)<b class='flag-5'>試用</b>

    基于OPENCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--米爾NXP i.MX93開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LMX93開(kāi)發(fā)板米爾基于NXPi.MX93開(kāi)發(fā)板)的基于OpenCV的人臉檢測(cè)方案測(cè)試。OpenCV提供了一
    的頭像 發(fā)表于 11-07 09:03 ?1081次閱讀
    基于OPENCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--<b class='flag-5'>米爾</b>NXP i.MX93<b class='flag-5'>開(kāi)發(fā)板</b>

    【飛凌嵌入式OK3576-C開(kāi)發(fā)板體驗(yàn)】 USB攝像頭拍照測(cè)試

    USB攝像頭拍照 將 USB 攝像頭插入開(kāi)發(fā)板,將自動(dòng)安裝 uvc 驅(qū)動(dòng) 使用命令查看usb攝像頭,已經(jīng)將USB攝像頭插入到板子上。命令:v
    發(fā)表于 10-10 09:24

    點(diǎn)擊參與米爾NXP i.MX 93開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了3塊價(jià)值678元的
    的頭像 發(fā)表于 06-13 08:02 ?523次閱讀
    點(diǎn)擊參與<b class='flag-5'>米爾</b>NXP i.MX 93<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    米爾NXP i.MX 93開(kāi)發(fā)板的Qt開(kāi)發(fā)指南

    1.概述Qt是一個(gè)跨平臺(tái)的圖形應(yīng)用開(kāi)發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾NXPi.MX93開(kāi)發(fā)板MYD-LMX9X
    的頭像 發(fā)表于 06-07 08:01 ?1730次閱讀
    <b class='flag-5'>米爾</b>NXP i.MX 93<b class='flag-5'>開(kāi)發(fā)板</b>的Qt<b class='flag-5'>開(kāi)發(fā)</b>指南

    免費(fèi)!NXP i.MX 93開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了2塊價(jià)值678
    的頭像 發(fā)表于 05-23 08:01 ?720次閱讀
    免費(fèi)!NXP i.MX 93<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    米爾-芯馳D9360商顯試用評(píng)測(cè)】USB攝像頭測(cè)試

    零、前期工作 上文FFmpeg移植完成后,需要將x264/lib文件夾下的庫(kù)文件拷貝到開(kāi)發(fā)板的/lib/目錄下,將ffmpeg_install/lib文件夾下的庫(kù)文件全部拷貝到開(kāi)發(fā)板的/lib/目錄
    發(fā)表于 04-17 19:03

    G2D圖像處理硬件調(diào)用和測(cè)試-基于米爾-全志T113-i開(kāi)發(fā)板

    本篇測(cè)評(píng)由電子工程世界的優(yōu)秀測(cè)評(píng)者“jf_99374259”提供。本文將介紹基于米爾電子MYD-YT113i開(kāi)發(fā)板的G2D圖像處理硬件調(diào)用和測(cè)試。MYC-YT113i核心
    的頭像 發(fā)表于 04-12 08:01 ?663次閱讀
    G2D圖像處理硬件調(diào)用和測(cè)試-基于<b class='flag-5'>米爾</b>-全志T113-i<b class='flag-5'>開(kāi)發(fā)板</b>

    米爾-芯馳D9360商顯試用評(píng)測(cè)】成功解決QCamera的模塊調(diào)用,并編寫(xiě)簡(jiǎn)單的查找攝像頭程序

    ; cameraInfo.orientation(); } 8、編譯好后,把程序上傳給開(kāi)發(fā)板,插入U(xiǎn)SB攝像頭,執(zhí)行程序,就可以找到了攝像頭了:
    發(fā)表于 04-07 18:12

    ROS系統(tǒng)的智能車開(kāi)發(fā)-基于米爾芯馳MYD-JD9X開(kāi)發(fā)板

    本篇測(cè)評(píng)由電子工程世界的優(yōu)秀測(cè)評(píng)者“mameng”提供。本文將介紹基于米爾電子MYD-JD9X開(kāi)發(fā)板的ROS系統(tǒng)智能車開(kāi)發(fā)。目前實(shí)現(xiàn)ROS的方式主要有兩種:Ubuntu系統(tǒng)+ROS;U
    的頭像 發(fā)表于 01-26 08:01 ?919次閱讀
    ROS系統(tǒng)的智能車<b class='flag-5'>開(kāi)發(fā)</b>-基于<b class='flag-5'>米爾</b>芯馳<b class='flag-5'>MYD</b>-JD9X<b class='flag-5'>開(kāi)發(fā)板</b>
    RM新时代网站-首页