在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

使用 Raspberry PiAI 套件進行非結(jié)構(gòu)化數(shù)據(jù)處理——Hailo邊緣AI

非結(jié)構(gòu)化數(shù)據(jù)處理、Raspberry Pi 5、Raspberry Pi AI套件、Milvus、Zilliz、數(shù)據(jù)、圖像、計算機視覺深度學習Python

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

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

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

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

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

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


在Raspberry Pi 5上實時運行

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

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

我們的圖像已經(jīng)上傳到MinIO:

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

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

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

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

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

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


查詢數(shù)據(jù)庫并顯示圖像

加載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

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

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


演示打包清單

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


入門指南

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

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

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

    關(guān)注

    87

    文章

    32937

    瀏覽量

    272580
  • 樹莓派
    +關(guān)注

    關(guān)注

    118

    文章

    1881

    瀏覽量

    106243
  • 邊緣AI
    +關(guān)注

    關(guān)注

    0

    文章

    116

    瀏覽量

    5195
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    手把手教你如何將樹莓網(wǎng)關(guān)鏈接到服務(wù)器之第二篇

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

    如何將樹莓網(wǎng)關(guān)與外網(wǎng)連接——手把手教你如何將樹莓網(wǎng)關(guān)連接到服務(wù)器之第三篇

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

    如何將樹莓網(wǎng)關(guān)連接到TTN——手把手教你如何將樹莓網(wǎng)關(guān)連接到服務(wù)器之第四篇

    接下來,我們用實際應(yīng)用實踐的例子,來告訴大家如何將樹莓網(wǎng)關(guān)連接到TTN服務(wù)器。
    發(fā)表于 05-20 08:00

    如何搞定樹莓AI服務(wù)開發(fā)

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

    如何將一個樹莓官方原始系統(tǒng)鏡像移植到paipai one設(shè)備

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

    樹莓基本設(shè)置流程(下)

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

    手把手教你如何將樹莓網(wǎng)關(guān)鏈接到服務(wù)器之第二篇

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

    如何將樹莓網(wǎng)關(guān)與外網(wǎng)連接——手把手教你如何將樹莓網(wǎng)關(guān)連接到服務(wù)器之第三篇

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

    如何將樹莓網(wǎng)關(guān)連接到TTN——手把手教你如何將樹莓網(wǎng)關(guān)連接到服務(wù)器之第四篇

    接下來,我們用實際應(yīng)用實踐的例子,來告訴大家如何將樹莓網(wǎng)關(guān)連接到TTN服務(wù)器。 1、樹莓網(wǎng)
    發(fā)表于 04-17 17:15 ?1613次閱讀

    如何將樹莓網(wǎng)關(guān)連接到內(nèi)置LoRaWAN? Network Server ——手把手教你如何將樹莓網(wǎng)關(guān)連接到服務(wù)器之第五篇

    前言 接下來,我們用實際應(yīng)用實踐的例子,來告訴大家如何將樹莓網(wǎng)關(guān)連接到內(nèi)置LoRaWAN Network Server。 1、配置樹莓網(wǎng)
    發(fā)表于 04-17 15:55 ?1548次閱讀

    如何將ubuntu安裝到樹莓派上

    本文描述如何將ubuntu安裝到樹莓派上。環(huán)境介紹:
    的頭像 發(fā)表于 08-08 14:49 ?3012次閱讀

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

    電子發(fā)燒友網(wǎng)站提供《如何將WizFi360 EVB Mini添加到樹莓Pico Python.zip》資料免費下載
    發(fā)表于 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攝像頭后,樹莓再次
    的頭像 發(fā)表于 11-07 13:44 ?797次閱讀
    主站蜘蛛池模板: 国产一区二区播放 | 婷婷在线影院 | 午夜日韩 | 特级做a爰片毛片免费看 | a级黄色毛片三个搞一 | 美女用手扒开尿口给男生桶爽 | 天天摸天天干 | 黑人边吃奶边扎下面激情视频 | 久久免费观看国产精品 | 我不卡老子影院午夜伦我不卡四虎 | 国产精品嫩草影院午夜 | 欧美成人午夜片一一在线观看 | 天天视频国产免费入口 | 美女免费视频黄 | 四虎最新入口 | 免费看日本黄色片 | 欧美a一级| 手机看片1024欧美 | 一级特黄a视频 | 日本欧美一区二区三区不卡视频 | 免费毛片网站在线观看 | 久久久精品免费国产四虎 | 午夜美女视频在线观看高清 | 在线播放一区二区精品产 | 欧美一级第一免费高清 | 狠狠做深爱婷婷久久一区 | 加勒比精品视频 | 色性综合| free性欧美video | 午夜福利毛片 | 黄视频免费在线观看 | 精品伊人久久大香线蕉网站 | 人成网站在线观看 | 日日操夜夜 | 看视频免费网站 | 成人在线色视频 | 亚洲最新黄色网址 | 天天躁狠狠躁夜躁2021 | 日本黄大乳片免费观看 | 日本免费黄网站 | 丁香婷婷九月 |