91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【Sipeed M2 Dock開(kāi)發(fā)板試用體驗(yàn)】M2 Dock獲取MJPEG推流數(shù)據(jù)

開(kāi)發(fā)板試用精選 ? 來(lái)源:開(kāi)發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-10-28 15:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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


M2 Dock開(kāi)發(fā)板的MaixPY開(kāi)發(fā)環(huán)境,自身支持獲取攝像頭視頻數(shù)據(jù),并對(duì)外提供MJPEG圖傳。

前幾天,研究了米爾MYD-YT507開(kāi)發(fā)板USB攝像頭使用從入門到放棄,并成功實(shí)現(xiàn)了MJPEG推流圖傳。

于是,想著 M2 Dock 獲取 MJPEG推流數(shù)據(jù),接入到MaxiPY,顯示到屏幕上,以便于進(jìn)一步的處理。

M2Dock推流數(shù)據(jù)獲取邏輯.png

通過(guò)官方的在線手冊(cè)MaixPy3 image 模塊 - Sipeed Wiki了解到,通常創(chuàng)建一個(gè)image對(duì)象,使用的是Image.open()來(lái)打開(kāi)一個(gè)文件。

最簡(jiǎn)單的方法,可以在M2 Dock上,不間斷的獲取MJPEG的數(shù)據(jù),并保存到臨時(shí)文件,再使用 Image.open() 打開(kāi),然后再顯示到屏幕:

with open(tmp_file, "wb") as binary_file:
    binary_file.write(jpg)
    img = image.open(tmp_file)
    display.show(img)

上述代碼中的jpg,即為獲取的MJPEG數(shù)據(jù)。

但這種方法,還需要進(jìn)過(guò)一次保存文件的中轉(zhuǎn),多了一步操作。

如果能夠把獲取的數(shù)據(jù),直接給轉(zhuǎn)換成maix需要的數(shù)據(jù)格式,那就方便了。

進(jìn)一步查閱官方手冊(cè)MaixPy3 image 模塊 - Sipeed Wiki,了解到maix的image對(duì)象,還支持如下的調(diào)用方式:

Image.load(data, [size = (240, 240) , [mode = "RGB"]])python 對(duì)象中加載出一張圖像,會(huì)將 python 對(duì)象的數(shù)據(jù) copyImage 對(duì)象內(nèi)部,如將 tobytes 的二進(jìn)制數(shù)據(jù)重新恢復(fù)成 Image對(duì)象。
date可以是PIL對(duì)象, image.Image() 對(duì)象,bytes對(duì)象,numpy 對(duì)象.
當(dāng)databytes,numpy對(duì)象時(shí),需要提供sizemode參數(shù).
返回 Image 對(duì)象,以便您可以使用 . 表示法調(diào)用另一個(gè)方法。

而這里的data,可以是多種來(lái)源,例如PIL。

PIL可以通過(guò)JPG的bianry流數(shù)據(jù),直接生成Image對(duì)象。

那么結(jié)合兩者,就可以跳過(guò)文件保存再調(diào)用的步驟了:

bytes_stream = BytesIO(jpg)
pimg = Image.open(bytes_stream)
img = image.load(pimg)
display.show(img)

最終,經(jīng)過(guò)反復(fù)嘗試,實(shí)現(xiàn)了M2 Dock的MaxiPY,獲取MJPEG推流數(shù)據(jù)并顯示到屏幕。

完整的代碼如下:

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'??')
    b = img_bytes.find(b'?ù')
    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.1
Host:%s
Connection:Close

" % (
        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ù)接收

上述代碼中,包含如下的部分:

  1. 獲取MJPEG數(shù)據(jù)時(shí),可以試用python的request模塊,或者使用socket模塊,后者效率更高
  2. 獲取到MJPEG數(shù)據(jù)后,自動(dòng)分析其中的JPG數(shù)據(jù)幀,一旦檢測(cè)到,則進(jìn)行顯示處理
  3. 顯示處理部分,會(huì)自動(dòng)區(qū)分是在電腦上,還是在M2 Dock上
  4. 如果是在電腦上,則使用cv2進(jìn)行處理顯示,如果需要退出可以按ESC按鍵
  5. 如果是在M2 Dock上,則使用BytesIO來(lái) 獲取的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制流,然后提供給PIL生成進(jìn)行處理生成Image對(duì)象,再提供給display模塊顯示。

上述源碼,提供在M2_Dock: M2 Dock學(xué)習(xí)研究與實(shí)例分享 (gitee.com)

最終具體的呈現(xiàn)效果,可以查看附件的視頻。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK3576輕松搭建RTMP視頻,基于FFmpeg+Nginx協(xié)同

    瑞芯微RK3576芯片平臺(tái)實(shí)現(xiàn)多路RTMP視頻,基于觸覺(jué)智能RK3576開(kāi)發(fā)板PurplePiOH2演示。RTMP視頻
    的頭像 發(fā)表于 12-11 17:17 ?942次閱讀
    RK3576輕松搭建RTMP視頻<b class='flag-5'>推</b><b class='flag-5'>流</b>,基于FFmpeg+Nginx協(xié)同

    【RA4M2-SENSOR開(kāi)發(fā)板評(píng)測(cè)】基礎(chǔ)架構(gòu)與環(huán)境感知

    收到了 RA 生態(tài)工作室寄來(lái)的 RA4M2-SENSOR 開(kāi)發(fā)板,主控芯片為 R7FA4M2AD3CFL 本系列評(píng)測(cè)的第一篇,我們將啟動(dòng) “數(shù)據(jù)采集系統(tǒng)” 項(xiàng)目。本文將詳細(xì)介紹如何在
    的頭像 發(fā)表于 12-10 17:13 ?2154次閱讀
    【RA4<b class='flag-5'>M2</b>-SENSOR<b class='flag-5'>開(kāi)發(fā)板</b>評(píng)測(cè)】基礎(chǔ)架構(gòu)與環(huán)境感知

    【作品合集】視美泰M-K1HSE、3568開(kāi)發(fā)板測(cè)評(píng)

    M-K1HSE開(kāi)發(fā)板免費(fèi)試用 SC-3568HA開(kāi)發(fā)板免費(fèi)試用 GM-3568JHF開(kāi)發(fā)板
    發(fā)表于 09-22 10:32

    【作品合集】玄鐵Banana Pi BPI-RV2開(kāi)發(fā)板測(cè)評(píng)

    BPI-RV2 開(kāi)源網(wǎng)關(guān)是矽昌和?蕉派開(kāi)源社區(qū)(Banana Pi )合作設(shè)計(jì)。 活動(dòng)詳情地址:【RISC-V專題】Banana Pi BPI-RV2開(kāi)發(fā)板試用 作者:jf_113
    發(fā)表于 09-17 10:58

    【作品合集】矽速科技Sipeed MaixCAM Pro開(kāi)發(fā)板測(cè)評(píng)

    ,Grove接口。 活動(dòng)詳情地址: 【RISC-V專題】Sipeed MaixCAM Pro開(kāi)發(fā)板免費(fèi)試用 作者:jf_05814630 【Sipeed MaixCAM Pro
    發(fā)表于 09-05 09:33

    【EASY EAI Orin Nano開(kāi)發(fā)板試用體驗(yàn)】使用stream代碼和WEB服務(wù)器代碼實(shí)現(xiàn)在客戶端網(wǎng)頁(yè)上查看攝像頭圖像

    本帖最后由 donatello1996 于 2025-8-13 20:32 編輯 【EASY EAI Orin Nano開(kāi)發(fā)板試用體驗(yàn)】使用stream代碼和WEB服務(wù)器代碼
    發(fā)表于 08-11 23:15

    Sipeed MaixCAM Pro開(kāi)發(fā)板試用體驗(yàn)】 + 04 + 機(jī)器學(xué)習(xí)YOLO體驗(yàn)

    的 )。 這張圖是我離線訓(xùn)練的結(jié)果,我認(rèn)為訓(xùn)練出來(lái)的模型精度主要還是跟訓(xùn)練集的質(zhì)量和標(biāo)注有關(guān),只要在這幾方面做好,訓(xùn)練出來(lái)的模型精度肯定不會(huì)低(實(shí)測(cè)多次)。 三、結(jié)語(yǔ) 對(duì)于這次的開(kāi)發(fā)板試用活動(dòng)我個(gè)人非常
    發(fā)表于 07-24 21:35

    RA4M2-SENSOR開(kāi)發(fā)板手冊(cè)

    RA4M2-SENSOR開(kāi)發(fā)板手冊(cè)
    發(fā)表于 07-21 14:41 ?22次下載

    Sipeed MaixCAM Pro開(kāi)發(fā)板試用體驗(yàn)】+ 02 + 基礎(chǔ)功能測(cè)試

    、基礎(chǔ)功能測(cè)試 1.人臉表情情緒檢測(cè) 通過(guò)開(kāi)發(fā)板自帶的應(yīng)用程序?qū)崪y(cè)發(fā)現(xiàn)識(shí)別準(zhǔn)確率非常的高(但需在離人臉較近的地方進(jìn)行識(shí)別,如果識(shí)別距離過(guò)遠(yuǎn)會(huì)導(dǎo)致識(shí)別結(jié)果不準(zhǔn)確的問(wèn)題)。 2.找色塊功能 通過(guò)
    發(fā)表于 07-19 22:50

    Sipeed MaixCAM Pro開(kāi)發(fā)板試用體驗(yàn)】+ 01 + MaixCAM Pro開(kāi)箱

    會(huì)能夠去體驗(yàn)這款高性能 AI 視覺(jué)處理--MaixCAM Pro 。 二、開(kāi)箱 1.開(kāi)箱視頻 開(kāi)箱視頻見(jiàn)頂部。 2.包裝內(nèi)容 (1)MaixCAMPro 開(kāi)發(fā)板2)杜邦
    發(fā)表于 07-04 10:51

    Vidda大眼睛M2 Pro投影儀搭載MediaTek MT9679芯片

    Vidda 大眼睛 M2 Pro 搭載 MediaTek MT9679 旗艦投影芯片,該芯片集成 4 核 Arm Cortex-A73 CPU 和 Arm Mail-G52 MC1 GPU,強(qiáng)大算力
    的頭像 發(fā)表于 06-17 16:06 ?1986次閱讀

    【評(píng)測(cè)試用】合眾HZ-T536開(kāi)發(fā)板免費(fèi)試用體驗(yàn)

    【評(píng)測(cè)試用】合眾HZ-T536開(kāi)發(fā)板免費(fèi)試用體驗(yàn)
    的頭像 發(fā)表于 05-27 08:05 ?1000次閱讀
    【評(píng)測(cè)<b class='flag-5'>試用</b>】合眾HZ-T536<b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)<b class='flag-5'>試用</b>體驗(yàn)

    RA-Eco-RA4M2開(kāi)發(fā)板免費(fèi)試用啦 #開(kāi)發(fā)板試用

    開(kāi)發(fā)板
    ElecFans小喇叭
    發(fā)布于 :2025年04月02日 16:56:25

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

    米爾與ST合作發(fā)布的新品基于STM32MP257應(yīng)用處理器的MYD-LD25X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了2塊價(jià)值488元的MYD-LD25X開(kāi)發(fā)板發(fā)起
    的頭像 發(fā)表于 03-20 08:05 ?1155次閱讀
    免費(fèi)丨米爾 STM32MP257<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    有獎(jiǎng)試用?。A-Eco-RA4M2-100PIN-V1.0開(kāi)發(fā)板試用活動(dòng)報(bào)名

    RA-Eco-RA4M2-100PIN-V1.0開(kāi)發(fā)板試用活動(dòng)
    的頭像 發(fā)表于 03-13 12:10 ?1537次閱讀
    有獎(jiǎng)<b class='flag-5'>試用</b>??!RA-Eco-RA4<b class='flag-5'>M2</b>-100PIN-V1.0<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>試用</b>活動(dòng)報(bào)名