请将 Raspberry Pi 和 pico 放入冰箱

本文介绍了一种基于RaspberryPi和pico的冰箱智能管理系统,通过对象识别技术(如YOLOv5)监控冰箱内物品,提供个性化菜单推荐和烹饪视频链接,旨在减少食物浪费并促进烹饪兴趣。
部署运行你感兴趣的模型镜像
请将 Raspberry Pi 和 pico 放入冰箱

转发: Please Fridge with RaspberryPi & pico

项目介绍

项目目的


通过识别用户冰箱中的物品、推荐可能的烹饪菜单并提供相关烹饪视频,减少食物浪费并促进各种烹饪活动。

主要特点和组件


Raspberry Pi 和 Pi 相机

捕获冰箱中的物品并使用对象识别来识别成分。

物体识别系统

使用 YOLOv5 准确识别图像中的成分。

开放人工智能API

根据公认的食材推荐可能的菜肴。

YouTube 抓取模块

自动搜索并获取与建议菜单相关的烹饪视频的 YouTube 链接。

电报通知系统

在 Telegram 消息中向用户发送菜单推荐和 YouTube 视频链接。

预期效益


  • 通过有效利用冰箱中的剩余成分来减少食物浪费。
  • 帮助用户轻松尝试不同的菜肴,增加烹饪的兴趣和享受。

项目实施步骤


Raspberry PI 和 Pico 设置
树莓派 4

Raspberry PI link

我们利用 Raspberry Pi 来驱动我们的 AI 模型并创建数据。

从 Raspberry 主页,您可以将 Raspbian 操作系统保存到 SD 卡、启动它并安装必要的模块。

Camera Module Setting

您可以通过上面的链接安装摄像头模块。

硬件连接

  • 启用串行接口:运行 sudo raspi-config 并选择“接口选项”>“串行”以启用硬件串行。
  • 编写Python代码或其他可以通过串口发送和接收数据的代码。

树莓派 Pico (W5100S-EVB-Pico)

Pico 通信并接收 Raspberry Pi 4 推断的数据,并利用以太网通信使用 chatGPT 进行菜单推荐。

连接以太网、供电并设置 UART 以与 Raspberry 4 通信。

硬件连接

将 Raspberry Pi 4 的 GPIO 引脚 14 (TX) 连接到 Pico 的 UART RX 引脚。
将 Raspberry Pi 4 的 GPIO 引脚 15 (RX) 连接到 Pico 的 UART TX 引脚。
将两块板的 GND 引脚相互连接。

YOLOv5(目标检测)

YOLO Github

我们检测目标冰箱。 显然,对象对象化中的快速参考系有利于实时检测,但我们只需对象化并唯一化类值即可创建数据。

1. 为了创建对象检测模型,我首先创建了一个数据集。 通过爬行,我构建了与食品成分或容器相关的图像数据集。 我花了大约 5 个小时为照片中的每个对象元素绘制边界框。

2. 我们使用 YOLOv5n.pt 纳米模型进行训练。 原因是轻。 然后,我们切换到 Onnx TFLite。 不过容量本身并没有太大的区别,参考速度也没有什么不同,所以我们使用了YOLOv5n模型。
YOLOv5 Train.ipynb

# pt to onnx to -> TFlite file 
!pip3 install tensorflow==2.3.1
!pip install -r requirements.txt
!python3 export.py --weights result.pt --img 418 --batch 1 --include onnx tflite

3. 使用 Raspberry Pi 进行对象识别 4. 使用适当的代码创建引用。 我使用了RaspCam,因此我将其设置为“0”(即数据)的RaspCam输入源部分并进行推理。 然后,我仅对参数中通过 save-txt 检测到的对象的类值和边界框坐标进行后处理,并将数据发送到 Pico。

我们已经在main.py文件中编写了适当的预处理代码,我们可以用它来发送数据到pico。我们还编写了UART通信。(作者是韩国人,所以有代码来预处理标签值 韩国人。)

from machine import UART
import time
import sys

uart = UART(0, 115200)

while True:
    if uart.any():
        data = uart.readline()
        print("Received:", data.decode().strip())
        sys.stdout.write(data.decode())
        
 #Data received by Pico
 # Received : [Kimchi,Tofu,Pork]

详细代码我已经上传到github了。

聊天 GPT 食谱

利用 UART 通信,我们从 Raspberry Pi 4 到 Raspberry Pi Pico 进行通信,并将对象表达式中的类值分配给 pico。

#GPT prompt
while True:
        if uart.any():
            data = uart.readline().decode("utf-8").strip()  # Read data and decode to string
            prompt = f"{data} Can you recommend a menu I can make with the above ingredients? "
            print(prompt)
            response = send_prompt_to_chatGPT(prompt)
            print(f"Received from UART: {data}")
            print(f"ChatGPT Response: {response}")
        utime.sleep(0.1)

从 Open AI 主页获取 api 键值,对其进行分配,然后通过在提示“您能推荐一个我可以使用上述成分查询制作的菜单吗”之前插入数据列表来向 GPT 提出问题。

结果

如上所示,GPT 会通过简单的菜谱提出菜单建议。

双向通讯

我通过 UART 通信将数据从 Raspberry Pi 发送到 Pico,所以我想我也可以接收它。

Pico代码添加

starred_section = extract_starred_section(response)
            if starred_section:
                uart.write(starred_section.encode("utf-8")) 
                print(f"Sent to Raspberry Pi 4: {starred_section}")

树莓派4代码添加

if ser.in_waiting >0:
   received_data = ser.readline(0.decode().strip()
   received_data = received_data +"Recipe" # recipe serch
YouTube 抓取

我们将使用上面的菜单来抓取和搜索 YouTube 以收集链接。

(我是韩国人,所以我会相应地进行预处理。您可以根据自己的语言进行预处理。)

常用表达

提示所建议的菜单处于一个不明确的位置,无法爬行,所以我要求它打印出来,前后都带有*。 爬网将利用正则表达式来提取 *{data}* 等数据。

I wanted to crawl on the Raspberry Pi Pico, but the library could not be installed due to capacity issues, so I used the two-way communication back to the Raspberry Pi to crawl.😂

爬取代码

!pip install youtube_dl

import yt_dlp as youtube_dl  

def fetch_youtube_link(query):
    ydl_opts = {
        'default_search': 'ytsearch',
        'quiet': True,
        'format': 'bestaudio/best',
        'noplaylist': True
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        result = ydl.extract_info(query, download=False)
        if 'entries' in result:
            video = result['entries'][0]
        else:
            video = result
    
    video_url = f"https://www.youtube.com/watch?v={video['id']}"
    return video_url, video['title']

if __name__ == "__main__":
    query = input("Enter a search query for YouTube: ") # user query
    url, title = fetch_youtube_link(query)
    print(f"Title: {title}")
    print(f"URL: {url}")

结果

这就是获取我想要的标题和标题的抓取方式。首先,我在我的电脑上验证了代码。

电报通知系统

首先,注册 Telegram 并将“BotFather”添加为好友。 和 /newbot 创建机器人并接收令牌。

如果您看到这样的令牌,则您的机器人已创建。 我们向机器人发送一条消息“你好”

api.telegram.org/bot{"your_tokens"}/getUpdates

如果您访问上面的网页,您将看到您发送的消息和您的信息的 JSON 文件。 从那里,您可以保存您的 ID 并检查消息是否已成功发送。

就这样,您就可以使用 Telegram 了。 现在是时候用代码来实现它了!

Python Telemgram Docs

如果您不确定,请查看上面的链接!🔥

代码

import requests

def send_telegram_message(chat_id, text):
    bot_token = "YOUR_BOT_TOKEN"
    send_text = f'https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={text}'
    
    response = requests.get(send_text)

    return response.json()

#examples
send_telegram_message("5795970252", "hi , im kdb")  #Put the data received from pico in text

结果

YouTube 标题和链接已发送至 Telegram。 我们可以轻松地使用家里的食材进行烹饪,并通过观看 YouTube 视频获得推荐。

完成项目


  1. 如果你有GPU资源,你的AI模型将快速引用它们
  2. 利用云通信将使您的项目更加完整。
  3. 有很多双向沟通的好例子。

为了这个项目,我在应用现有的人工智能技术方面做了很多努力。 我试图减轻模型的重量,但并没有太大的区别,但这似乎是我们要学习的作业,而且这是一个有意义的项目,因为我获得了很多关于整个通信理论芯片的知识。 硬件。

对于数据或代码问题,请联系hyun030508@icloud.com。

GitHub 来源

WIZnetMaker

SImon Github

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值