色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

樹莓派AI套件:如何將混亂的數據變成有序的魔法

上海晶珩電子科技有限公司 ? 2025-03-25 09:37 ? 次閱讀

使用 Raspberry PiAI 套件進行非結構化數據處理——Hailo邊緣AI

非結構化數據處理、Raspberry Pi 5、Raspberry Pi AI套件、Milvus、Zilliz、數據、圖像、計算機視覺深度學習Python

在邊緣實時相機流中檢測、顯示和存儲檢測到的圖像

即使預算有限,你也可以利用像配備8GB內存的Raspberry Pi 5和NVIDIA Jetson Orin Nano這樣的強大設備,開始構建一些邊緣AI用例。最近,針對RPI5平臺的Raspberry Pi AI套件發布了,所以我必須入手一個并嘗試一下。

AI套件增加了一個神經網絡推理加速器,其性能可達每秒13萬億次操作(TOPS),對于70美元的價格來說,這相當不錯。連接到這個M.2 Hat的是Hailo-8L M.2入門級加速模塊,它將為我們提供AI能力。

在第一次演示中,我修改了提供的RPI5 Hailo AI Python示例之一,以對網絡攝像頭進行實時圖像檢測,然后將檢測結果發送到Slack頻道,更重要的是,將檢測結果與元數據一起向量化并存儲到Milvus中。

c66cf48c-0919-11f0-9434-92fbcf53809c.jpg

c67b96a4-0919-11f0-9434-92fbcf53809c.jpg


在Raspberry Pi 5上實時運行

我們使用了Hailo提供的RPI5對象檢測程序示例,并對其進行了增強,以便將結果發送到Slack、MiNio和Milvus。

因此,我們使用了示例對象檢測程序,但首先我為Slack、Milvus、S3、TIMM、Sci-Kit Learn、Pytorch和UUID庫添加了一些導入語句。我還設置了一些稍后要使用的常量。然后,我們連接到我們的Milvus服務器和Slack頻道,并開始GStreamer循環。我設置了一個時間檢查,如果檢測到內容,我會將相機幀保存到文件中,然后上傳到S3并發送到我的Slack頻道。最后,我添加了向量化的圖像以及S3路徑、文件名、標簽和置信度等重要元數據。我們的集合中的每個條目都會獲得一個自動生成的ID。

我們的圖像已經上傳到MinIO:

c691c8ca-0919-11f0-9434-92fbcf53809c.jpg

它們也已隨我們的文本消息發送到我們的#reports Slack頻道。

c6b1b856-0919-11f0-9434-92fbcf53809c.jpg

最重要的是,我們的元數據和向量已經上傳,并且已經可以用于超快速搜索。

c6c51c20-0919-11f0-9434-92fbcf53809c.jpg

現在我們可以開始查詢我們的向量,我會通過Jupyter筆記本向你展示如何操作


查詢數據庫并顯示圖像

加載In [1]:

!pip install boto3

Requirement already satisfied: boto3 in ./milvusvenv/lib/python3.12/site-packages (1.34.129)
Requirement already satisfied: botocore<1.35.0,>=1.34.129 in ./milvusvenv/lib/python3.12/site-packages (from boto3) (1.34.129)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in ./milvusvenv/lib/python3.12/site-packages (from boto3) (1.0.1)
Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in ./milvusvenv/lib/python3.12/site-packages (from boto3) (0.10.1)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in ./milvusvenv/lib/python3.12/site-packages (from botocore<1.35.0,>=1.34.129->boto3) (2.9.0.post0)
Requirement already satisfied: urllib3!=2.2.0,<3,>=1.25.4 in ./milvusvenv/lib/python3.12/site-packages (from botocore<1.35.0,>=1.34.129->boto3) (2.2.1)
Requirement already satisfied: six>=1.5 in ./milvusvenv/lib/python3.12/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.35.0,>=1.34.129->boto3) (1.16.0)

In [5]:

from __future__ import print_functionimport requestsimport sysimport ioimport jsonimport shutilimport sysimport datetimeimport subprocessimport sysimport osimport mathimport base64from time import gmtime, strftimeimport random, stringimport timeimport psutilimport base64import uuidimport socketimport osfrom pymilvus import connectionsfrom pymilvus import utilityfrom pymilvus import FieldSchema, CollectionSchema, DataType, Collectionimport torchfrom torchvision import transformsfrom PIL import Imageimport timmfrom sklearn.preprocessing import normalizefrom timm.data import resolve_data_configfrom timm.data.transforms_factory import create_transformfrom pymilvus import MilvusClientimport osfrom IPython.display import display

In [6]:

from __future__ import print_functionimport requestsimport sysimport ioimport jsonimport shutilimport sysimport datetimeimport subprocessimport sysimport osimport mathimport base64from time import gmtime, strftimeimport random, stringimport timeimport psutilimport base64import uuidimport socketimport osfrom pymilvus import connectionsfrom pymilvus import utilityfrom pymilvus import FieldSchema, CollectionSchema, DataType, Collectionimport torchfrom torchvision import transformsfrom PIL import Imageimport timmfrom sklearn.preprocessing import normalizefrom timm.data import resolve_data_configfrom timm.data.transforms_factory import create_transformfrom pymilvus import MilvusClientimport osfrom IPython.display import display

In [8]:

# -----------------------------------------------------------------------------
class FeatureExtractor: def __init__(self, modelname): # Load the pre-trained model self.model = timm.create_model( modelname, pretrained=True, num_classes=0, global_pool="avg" ) self.model.eval()
# Get the input size required by the model self.input_size = self.model.default_cfg["input_size"]
config = resolve_data_config({}, model=modelname) # Get the preprocessing function provided by TIMM for the model self.preprocess = create_transform(**config)
def __call__(self, imagepath): # Preprocess the input image input_image = Image.open(imagepath).convert("RGB") # Convert to RGB if needed input_image = self.preprocess(input_image)
# Convert the image to a PyTorch tensor and add a batch dimension input_tensor = input_image.unsqueeze(0)
# Perform inference with torch.no_grad(): output = self.model(input_tensor)
# Extract the feature vector feature_vector = output.squeeze().numpy()
return normalize(feature_vector.reshape(1, -1), norm="l2").flatten()

In [9]:

extractor = FeatureExtractor("resnet34")
# -----------------------------------------------------------------------------# Constants - should be environment variables# -----------------------------------------------------------------------------DIMENSION = 512 MILVUS_URL = "http://192.168.1.163:19530" COLLECTION_NAME = "pidetections"BUCKET_NAME = "images"DOWNLOAD_DIR = "/Users/timothyspann/Downloads/code/images/"AWS_RESOURCE = "s3"S3_ENDPOINT_URL = "http://192.168.1.163:9000"AWS_ACCESS_KEY = "minioadmin" AWS_SECRET_ACCESS_KEY = "minioadmin"S3_SIGNATURE_VERSION = "s3v4"AWS_REGION_NAME = "us-east-1"S3_ERROR_MESSAGE = "Download failed"# -----------------------------------------------------------------------------

In [10]:

# -----------------------------------------------------------------------------# Connect to Milvus
# Local Docker Servermilvus_client = MilvusClient( uri=MILVUS_URL)# -----------------------------------------------------------------------------

In [12]:

import osimport boto3from botocore.client import Config
# -----------------------------------------------------------------------------# Access Images on S3 Compatible Store - AWS S3 or Minio or ...# -----------------------------------------------------------------------------s3 = boto3.resource(AWS_RESOURCE, endpoint_url=S3_ENDPOINT_URL, aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, config=Config(signature_version=S3_SIGNATURE_VERSION), region_name=AWS_REGION_NAME)
bucket = s3.Bucket(BUCKET_NAME)
# -----------------------------------------------------------------------------# Get last modified image# -----------------------------------------------------------------------------files = bucket.objects.filter()files = [obj.key for obj in sorted(files, key=lambda x: x.last_modified, reverse=True)]
for imagename in files: query_image = imagename break
search_image_name = DOWNLOAD_DIR + query_image
try: s3.Bucket(BUCKET_NAME).download_file(query_image, search_image_name)except botocore.exceptions.ClientError as e: print(S3_ERROR_MESSAGE)
# -----------------------------------------------------------------------------# Search Milvus for that vector and filter by a label# -----------------------------------------------------------------------------results = milvus_client.search( COLLECTION_NAME, data=[extractor(search_image_name)], filter='label in ["keyboard"]', output_fields=["label", "confidence", "id", "s3path", "filename"], search_params={"metric_type": "COSINE"}, limit=5)
# -----------------------------------------------------------------------------# Iterate through last five results and display metadata and image# -----------------------------------------------------------------------------for result in results: for hit in result[:5]: label = hit["entity"]["label"] confidence = hit["entity"]["confidence"] filename = hit["entity"]["filename"] s3path = hit["entity"]["s3path"] try: s3.Bucket(BUCKET_NAME).download_file(filename, DOWNLOAD_DIR + filename) except botocore.exceptions.ClientError as e: print(S3_ERROR_MESSAGE) print(f"Detection: {label} {confidence:.2f} for {filename} from {s3path}" ) img = Image.open(DOWNLOAD_DIR + filename) display(img) # Enhancement: we could also post this to slack or discord

詳細代碼請查看GitHub:https://gist.github.com/tspannhw/8e2ec1293c1cff1edaefbf7fde54f47a#file-edgeaifind-ipynb

c6d79620-0919-11f0-9434-92fbcf53809c.jpg

我已經錄制了這個演示的運行過程,所以你可以看到實時的操作情況。

如果你購買了一個并想設置它以復制我的演示,請參閱本文末尾的步驟。


演示打包清單

MinIO/S3、Milvus、Slack、Python、Boto3、OpenCV2、Pytorch、Sci-Kit Learn、TIMM、Hailo、YOLOv6n、對象檢測、Raspberry PiAI套件、配備8GB內存的Raspberry Pi5、logi網絡攝像頭、resnet34、Torchvision、PyMilvus、Hailo8L M.2模塊、M.2 M-Key Hat、散熱片。


入門指南

添加硬件(請參閱下面的視頻和鏈接)后,安裝庫,重啟,然后你就應該準備好了。

tspann@five:/opt/demo $ hailortcli fw-control identify
Executing on device: 000000.0Identifying boardControl Protocol Version: 2Firmware Version: 4.17.0 (release,app,extended context switch buffer)Logger Version: 0Board Name: Hailo-8Device Architecture: HAILO8LSerial Number: HLDDLBB241601635Part Number: HM21LB1C2LAEProduct Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
tspann@five:/opt/demo $ dmesg | grep -i hailo
[ 3.155152] hailo: Init module. driver version 4.17.0[ 3.155295] hailo 0000:01:00.0: Probing on: 1e60:2864...[ 3.155301] hailo 0000:01:00.0: Probing: Allocate memory for device extension, 11600[ 3.155321] hailo 0000:01:00.0: enabling device (0000 -> 0002)[ 3.155327] hailo 0000:01:00.0: Probing: Device enabled[ 3.155350] hailo 0000:01:00.0: Probing: mapped bar 0 - 0000000095e362ea 16384[ 3.155357] hailo 0000:01:00.0: Probing: mapped bar 2 - 000000005e2b2b7e 4096[ 3.155362] hailo 0000:01:00.0: Probing: mapped bar 4 - 000000008db50d03 16384[ 3.155365] hailo 0000:01:00.0: Probing: Force setting max_desc_page_size to 4096 (recommended value is 16384)[ 3.155375] hailo 0000:01:00.0: Probing: Enabled 64 bit dma[ 3.155378] hailo 0000:01:00.0: Probing: Using userspace allocated vdma buffers[ 3.155382] hailo 0000:01:00.0: Disabling ASPM L0s[ 3.155385] hailo 0000:01:00.0: Successfully disabled ASPM L0s[ 3.417111] hailo 0000:01:00.0: Firmware was loaded successfully[ 3.427885] hailo 0000:01:00.0: Probing: Added board 1e60-2864, /dev/hailo0

c7128532-0919-11f0-9434-92fbcf53809c.jpg



額外指令

gst-inspect-1.0 hailotoolslspci | grep Hailouname -av4l2-ctl --list-formats-ext -d /dev/video0ls /dev/video*ffplay -f v4l2 /dev/video0

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    87

    文章

    34146

    瀏覽量

    275302
  • 樹莓派
    +關注

    關注

    121

    文章

    1936

    瀏覽量

    106963
  • 邊緣AI
    +關注

    關注

    0

    文章

    146

    瀏覽量

    5333
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    如何將柔性傳感器與樹莓連接并在LCD屏幕上顯示其值

    在這個項目中,我們學習如何將柔性傳感器與樹莓連接并在LCD屏幕上顯示其值。
    的頭像 發表于 12-31 09:33 ?4349次閱讀
    <b class='flag-5'>如何將</b>柔性傳感器與<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>連接并在LCD屏幕上顯示其值

    如何將樹莓變成一個FM的音頻發射器

    本教程叫大家如何將樹莓變成一個FM的音頻發射器,可以用收音機,帶收音功能的手機來接收FM音頻了!!!準備:1.樹莓
    發表于 07-01 18:20

    手把手教你如何將樹莓網關鏈接到服務器之第二篇

    本文為系列文章——手把手教你如何將樹莓網關連接到服務器之第二篇,涉及圖1所示步驟二:如何在電腦上操作,配置樹莓網關的密碼、頻段以及選擇服
    發表于 05-19 08:00

    如何將樹莓網關與外網連接——手把手教你如何將樹莓網關連接到服務器之第三篇

    本文為系列文章——手把手教你如何將樹莓網關連接到服務器之第三篇,涉及最后一個步驟,即步驟三:如何將樹莓
    發表于 05-20 07:00

    如何將樹莓網關連接到TTN——手把手教你如何將樹莓網關連接到服務器之第四篇

    接下來,我們用實際應用實踐的例子,來告訴大家如何將樹莓網關連接到TTN服務器。
    發表于 05-20 08:00

    如何搞定樹莓AI服務開發

    微軟專家教你,如何搞定樹莓 AI 服務開發
    發表于 05-29 06:00

    如何將一個樹莓官方原始系統鏡像移植到paipai one設備

    產品實戰開發--串口控制臺使用(六)設備評估板鏈接視頻課程與圖片教程同步更新我們linux系統移植到一個新的硬件板子上時,第一件事要做的就是串口控制臺調試成功,下面我們說說如何將一個樹莓
    發表于 12-16 06:49

    樹莓基本設置流程(下)

    第四步,樹莓的中文設置 第五步,樹莓Debian安裝遠程登錄ssh并配置自動開機啟動 第六步,
    發表于 11-30 11:03 ?13次下載

    手把手教你如何將樹莓網關鏈接到服務器之第二篇

    本文為系列文章手把手教你如何將樹莓網關連接到服務器之第二篇,涉及圖1所示步驟二:如何在電腦上操作,配置樹莓網關的密碼、頻段以及選擇服務器
    發表于 04-15 13:48 ?1834次閱讀
    手把手教你<b class='flag-5'>如何將</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b>網關鏈接到服務器之第二篇

    如何將樹莓網關與外網連接——手把手教你如何將樹莓網關連接到服務器之第三篇

    本文為系列文章手把手教你如何將樹莓網關連接到服務器之第三篇,涉及最后一個步驟,即步驟三:如何將樹莓
    發表于 04-16 14:57 ?2644次閱讀

    如何將樹莓網關連接到TTN——手把手教你如何將樹莓網關連接到服務器之第四篇

    接下來,我們用實際應用實踐的例子,來告訴大家如何將樹莓網關連接到TTN服務器。 1、樹莓
    發表于 04-17 17:15 ?1657次閱讀

    如何將樹莓網關連接到內置LoRaWAN? Network Server ——手把手教你如何將樹莓網關連接到服務器之第五篇

    前言 接下來,我們用實際應用實踐的例子,來告訴大家如何將樹莓網關連接到內置LoRaWAN Network Server。 1、配置樹莓
    發表于 04-17 15:55 ?1608次閱讀

    如何將WizFi360 EVB Mini添加到樹莓Pico Python

    電子發燒友網站提供《如何將WizFi360 EVB Mini添加到樹莓Pico Python.zip》資料免費下載
    發表于 12-01 14:38 ?0次下載
    <b class='flag-5'>如何將</b>WizFi360 EVB Mini添加到<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>Pico Python

    樹莓新推AI HAT+:26 TOPS高性能版本震撼登場

     在成功推出樹莓AI套件AI攝像頭后,樹莓再次
    的頭像 發表于 11-07 13:44 ?1024次閱讀

    樹莓“吉尼斯世界記錄”:樹莓的性能發揮到極致的項目!

    完成的許多酷炫項目。這就引出了一個問題——你該如何將樹莓的性能推向極限呢?歷經13年的項目實踐和樹莓各型號的發展,你會驚訝地發現,
    的頭像 發表于 05-22 16:53 ?393次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>“吉尼斯世界記錄”:<b class='flag-5'>將</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b>的性能發揮到極致的項目!
    主站蜘蛛池模板: 国产精品日本不卡一区二区 | 九九热视频免费 | 伊人香蕉在线播放视频免费 | 国产亚洲精品免费视频 | 国产午夜视频在永久在线观看 | 亚洲 欧美 中文 日韩 另类 | 伦理片飘花免费影院 | 伊伊人成亚洲综合人网 | 久久免费精品一区二区 | 调教玩弄奶头乳夹开乳震动器 | 熟女人妻AV五十路六十路 | 久久久中日AB精品综合 | 国产av在线播放 | 国产免费人成在线视频视频 | 王雨纯羞羞 | 国产精品色吧国产精品 | 果冻传媒2021精品影视 | 精品人妻伦一二三区久久AAA片 | 男男高h浪荡受h | 精品一区二区三区高清免费观看 | 日韩 国产 欧美视频二区 | 日本黄色www | 无码AV免费精品一区二区三区 | 国产MD视频一区二区三区 | 最新国产在线视频在线 | 9420高清免费观看在线大全 | G0GO人体大尺香蕉 | 人妻熟女斩五十路0930 | 国产在线综合色视频 | 色老板影视 | 国产亚洲日韩另类在线播放 | 性xxxx直播放免费 | 久久这里只精品热在线18 | 国产线精品视频在线观看 | 国精产品一区二区三区四区糖心 | 人与人特黄一级 | 2022国产91精品久久久久久 | 欧美亚洲国内日韩自拍视频 | 青柠电影高清在线观看 | 蜜芽手机在线观看 | 影音先锋影院中文无码 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品