女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    瀏覽量

    275274
  • 樹莓派
    +關注

    關注

    121

    文章

    1936

    瀏覽量

    106954
  • 邊緣AI
    +關注

    關注

    0

    文章

    146

    瀏覽量

    5330
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    在這個項目中,我們學習如何將柔性傳感器與樹莓連接并在LCD屏幕上顯示其值。
    的頭像 發表于 12-31 09:33 ?4348次閱讀
    <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

    如何搞定樹莓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 ?1826次閱讀
    手把手教你<b class='flag-5'>如何將</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b>網關鏈接到服務器之第二篇

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

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

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

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

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

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

    如何將ubuntu安裝到樹莓派上

    本文描述如何將ubuntu安裝到樹莓派上。環境介紹:
    的頭像 發表于 08-08 14:49 ?3131次閱讀

    如何將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 ?1017次閱讀

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

    完成的許多酷炫項目。這就引出了一個問題——你該如何將樹莓的性能推向極限呢?歷經13年的項目實踐和樹莓各型號的發展,你會驚訝地發現,
    的頭像 發表于 05-22 16:53 ?380次閱讀
    <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>的性能發揮到極致的項目!