51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

手把手教你打造搭载GPT-4o的智能监护相机【资料全开源】

今天介绍的是一款用OpenAI打造智能监控与延时摄影摄像头,关于项目的所有设计文件及驱动代码已经整理在电子森林中,大家可以复制链接查看:https://www.eetree.cn/project/3205。

这款名为"TIME LEAP CAM"的相机专为长间隔延时摄影和长时间监控而设计,这个名字反映了它可以长时间捕捉图像来"跨越"时间的能力。市面上虽然有许多具有监控和延时功能的相机,但没有一款能够根据不同条件进行适应并基于这些条件做出智能判断。

这款相机的灵感来自个人需求。我年迈的父亲现在住在护理机构中,他在家中摔倒或处于异常状态时,在这种情况下,我希望收到通知,但持续监控摄像头画面是不切实际的。通常,当事件被发现时,已经为时已晚。意识到许多其他人可能面临类似的情况,我决定开发这款相机。

巧合的是,OpenAI 大约在同一时间发布了具有视觉功能的 GPT-4。我探索了将捕获的图像发送到 OpenAI 进行内容分析的可能性,在确认可以从 PC 发送图像并进行分析后,我决定将此功能集成到相机中。

由 OpenAI GPT-4o 进行监控

一个挑战是需要通信来发送图像,为了保持相机的能效和成本效益,我选择了支持WiFi通信和HTTPS(SSL)协议的ESP32S3 SoC。该相机使用 WiFi 连接到互联网,并使用 OpenAI 的 GPT-4o 来分析图像。如果满足某些条件,相机会通过LINE发送通知。例如,如果有人跌倒、宠物的食物碗是空的,植物看起来不健康,窗户是打开的,或者看起来可能会下雨,它都可以发送通知。这消除了持续人工监控的需要。LINE通知包括相关图像,而且可以通过配置屏幕上的自然语言轻松设置通知条件。

相机由电池供电,在不拍摄图像时进入深度睡眠模式以节省电量。捕获的图像存储在内部 64GB eMMC 上。有 12 个文件夹可用于组织存储的图像。相机设计为户外使用时防水,尽管它不是完全防水的。充电是通过 Qi 无线充电器完成的,并且可以通过智能手机或 PC 上的 WiFi 上的网络浏览 器配置设置。如果相机处于睡眠模式,触摸背面的键盘会激活 Web 服务器进行配置访问。在5分钟之内不活动,相机会自动返回到睡眠模式。

要使用图像分析和LINE通知功能,需要OpenAI API密钥、CloudFlare图像服务访问ID和API密钥,以及LINE消息API帐户ID和访问令牌。通过WiFi进行互联网通信也是必要的,仅用于延时摄影时,则不需要 WiFi 通信。

服务 ID 和访问密钥可从相应的服务网站获取:

  • OpenAI API:https://openai.com/index/openai-api/

  • CloudFlare图像:https://developers.cloudflare.com/images/about

  • LINE消息API:https://developers.line.biz/en/docs/messaging-api/

相机的特点

  • 自动对焦

  • 长间隔拍摄

  • 节能深度睡眠模式(睡眠时电流小于440微安,功率1.5毫瓦)

  • 支持Qi无线充电,充满电后自动停止

  • 防水设计

  • 使用 OpenAI GPT-4o/GPT-4-Turbo 模型的图像分析和 LINE 通知

  • 支持自然语言设置通知条件(支持多语言输入)

  • 触摸激活的 Web 服务器和自动睡眠模式

  • 通过NTP进行时间同步(WiFi连接时自动调整)和RTC时间保持

相机的规格

  • 分辨率:高达 2592x1944 (QSXGA)

  • 传感器:OV5640 500万像素传感器

  • SoC 模组:ESP32-S3-WROOM-1-N16R8(240MHz、512KB SRAM、16MB 闪存、8MB PSRAM)

  • 电池:3.7V LiPo 1100mAh

  • 存储:64GB eMMC

  • 通信:WiFi 2.4GHz

  • 充电:Qi无线充电

  • 尺寸:67(W) x 78(H) x 66(D) mm

注意事项

  • 防水:相机的设计不能承受完全浸没在水中。

  • 需要 API 密钥:要使用图像识别和通知功能,请从 OpenAI、CloudFlare Images 和 LINE Messaging API 获取 API 密钥。

  • Internet 连接:使用图像识别和通知等高级功能时需要。延时功能无需 WiFi。

更新版本 v0.2.1

  • 更新了配置屏幕的用户界面。

  • 新增了在达到指定周期时,向LINE发送状态通知的功能。

  • 新增了网页预览图片查看功能。

  • 新增了将图像上传到 Cloudflare Images进行私有存储,并使用签名URL。

  • 新增了Cloudflare Images上的图像在1天后自动删除。

  • 新增了通过网页从相机下载压缩图像的功能(仅限PC浏览器)。

  • 新增了在网页上查看剩余电量的功能。

  • 新增了在网页上查看WiFi信号强度的功能。

  • 新增了限制延时摄影拍摄时间的功能。

  • 新增了在相机背面触摸按钮3秒时触发拍摄的功能。

运行方式

TIME LEAP CAM 相机通过在预设的时间间隔或特定时间拍摄图像来工作。这些图像存储在内置的64GB eMMC 存储中。在每次拍摄过程中,相机都会执行自动对焦以确保图像清晰。捕获的图像保存在 12 个可用轨道之一中,可根据需要进行配置。

在监控模式下,捕获的图像会连同提示一起发送到 OpenAI 的 GPT-4o 或 GPT-4-Turbo(例如,"如果有人,请在回复添加"NOTICE"和原因。如果没有人,只需回复"NONE"。AI根据提示分析图像内容,如果回复包含"NOTICE",则表示图像符合指定条件。如果回复是"NONE",则表示不符合。

当检测到"NOTICE"时,图像将上传到 CloudFlare Images 以生成图像的 URL。然后,该URL与通知消息一起发送到LINE Messaging API。指定的LINE帐号会收到通知和图片。

通知条件可以使用自然语言设置,并且只要GPT-4o支持,系统支持多种语言。

相机由 3.7V LiPo 1100mAh 电池供电,使用 Qi 无线充电器充电。只需将相机放在 Qi 充电器上即可启动充电过程,电池充满后充电会自动停止。

Qi无线充电

TIME LEAP CAM 相机的配置和图像查看可以通过智能手机或 PC 浏览器通过 WiFi 完成。用户可以设置捕获间隔、捕获时间和分辨率等参数。访问相机的 IP 地址(例如 http://192.168.2.100)会打开设置界面。IP地址由所连接WiFi网络的DHCP服务器分配,刷新固件后可在相机启动控制台中查看。目前,IP地址、WiFi SSID、密码、OpenAI API 密钥以及 CloudFlare 访问 ID 和 API 密钥必须在源代码的 cfg.toml 文件中设置。

当相机处于睡眠模式时,触摸相机背面会激活 Web 服务器,从而允许访问设置界面。如果5分钟内没有任何交互,相机将自动返回到睡眠模式。

背面的触摸按钮

如果设置的图像拍摄间隔超过90秒,则相机在拍摄图像后将处于深度睡眠状态。如果持续时间少于 60 秒,相机将不会进入睡眠模式。这是因为 ESP32 深度睡眠功能在唤醒时会运行初始化序列,大约需要 30 秒才能完成。

相机在连接到WiFi时使用NTP进行时间同步,并使用RTC来维持时间。

设计原理图

这是 Qi 接收器原理图。我使用了BQ51013BRHLR作为控制集成电路。AC1 和 AC2 连接到了接收器线圈 WR483265-15F5-G。如果将 USB 连接到主机 PC,则此相机可以通过 USB 电源为电池充电。

Qi Reciever

ESP32-S3-WROOM、eMMC 和摄像头接口。

ESP32 eMMC 和摄像头接口

为了降低功耗,eMMC 和 Camera 电源由 ESP32-S3 控制。通过此控制,功耗低于 1.5 mW。eMMC线路的上拉电阻为100千欧,这也有助于减少功耗。

PCB布局

这里使用了 4 层定制 PCB。

订购PCB时,大部分参数可以保留默认值,但"最小孔径"应为0.25mm,"表面处理"应选择"沉金(ENIG)"。原因是最小通孔为0.25mm,如果eMMC焊盘不是"沉金(ENIG)",焊盘上的焊料会略微凸起,没有适当的对齐就无法正确焊接。

组装完成后,安装所有组件。

安装软件

这款相机的软件是用 Rust 编写的。在Ubuntu 22.04上的编译步骤在GitHub的README中有详细说明。请按照以下步骤安装软件:

  1. 系统更新和软件包安装

使用以下命令更新系统并安装必要的软件包: *

sudo apt update && sudo apt -y install git python3 python3-pip gcc build-essential curl pkg-config libudev-dev libtinfo5 clang libclang-dev llvm-dev udev libssl-dev python3.10-venv
  1. Rust 安装

安装 Rust 编程语言和 Cargo 包管理器: *

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装后,通过获取环境来激活 Rust: *

. "$HOME/.cargo/env"
  1. 附加工具安装

安装以下 Rust 工具:

  • ldproxy

  • ESPN的

  • cargo-espflash

使用以下命令: * * *

cargo install ldproxycargo install espupcargo install cargo-espflash
  1. ESP环境设置

执行以下命令,安装并更新乐鑫 Rust 生态系统。 * *

espup installespup update

设置环境变量: *

. ./export-esp.sh
  1. Udev 规则配置

配置设备权限的 udev 规则: * * *

sudo sh -c 'echo "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"303a\", ATTRS{idProduct}==\"1001\", MODE=\"0666\"" > /etc/udev/rules.d/99-esp32.rules'sudo udevadm control --reload-rulessudo udevadm trigger
  1. 克隆存储库

克隆 TimeLeapCam 存储库: * *

git clone https://github.com/hnz1102/timeleapcam.gitcd timeleapcam/code/

7.设置WiFi SSID,密码等

更改以下配置文件。 * * * * * * * * * * * * * * * * * * * * *

cfg.toml
[timeleapcam]wifi_ssid = "<Your AP SSID>"  # Set your AP SSIDwifi_psk = "<Your AP Password>" # Set your AP Passwordhttp_server = "" # NOT USEDresolution = "8"track_id = "0"timezone_offset = "9"auto_capture = "false"idle_in_sleep_time = "300"duration = "0"api_key = "<API KEY for openAI>" # Set your OpenAI API Keymodel = "gpt-4o"query_openai = "false"query_prompt = "If is there somebody, Add in the reply as 'NOTICE' and reason. If is nobody, Just reply is 'NONE'."post_account = "<Your LINE Account ID>" # Set your LINE Account IDpost_access_token = "<Access Token for LINE Message>" # Set your LINE Access Tokenstorage_account = "<Your Cloudflare Account ID>" # Set your Cloudflare Account IDstorage_access_token = "Your Cloudflare Access Token>" # Set your Cloudflare Access Tokenpost_message_trigger = "NOTICE"
  1. 构建和烧录

生成项目并将其刷写到设备: * *

cargo build --releasecargo espflash flash --release --monitor
  1. 运行相机

闪烁后,相机将启动。控制台将显示启动消息。第一次启动可能需要几分钟时间来格式化 eMMC。完成后,将显示一个 IP 地址: *

I (6520) esp_netif_handlers: sta ip: 192.168.2.191, mask: 255.255.255.0, gw: 192.168.2.1

打开 Web 浏览器并导航到显示的 IP 地址(例如"http://192.168.2.191")。配置界面将允许您设置捕获间隔、捕获时间、分辨率和其他设置。

通过检查控制台输出中是否有指示成功初始化的消息,确保相机正常运行: * * * * * * * * * * * * * * * * * * * * *

I (9550) camera: Detected OV5640 cameraI (9550) camera: Camera PID=0x5640 VER=0x00 MIDL=0x00 MIDH=0x00I (10250) cam_hal: buffer_size: 16384, half_buffer_size: 1024, node_buffer_size: 1024, node_cnt: 16, total_cnt: 960I (10250) cam_hal: Allocating 983040 Byte frame buffer in PSRAMI (10250) cam_hal: cam config okI (10270) ov5640: Set PLL: bypass: 0, multiplier: 200, sys_div: 4, pre_div: 2, root_2x: 0, pclk_root_div: 2, pclk_manual: 1, pclk_div: 4I (10270) ov5640: Calculated XVCLK: 5000000 Hz, REFIN: 2500000 Hz, VCO: 500000000 Hz, PLL_CLK: 50000000 Hz, SYSCLK: 12500000 Hz, PCLK: 3125000 HzI (10310) timeleapcam::capture: Capturing Frame Thread Start...I (10310) timeleapcam::monitoring: Query thread startedI (10310) timeleapcam::autofocus: Autofocus PID: 0x5640I (10320) timeleapcam: Resolution changed: 21 -> 8I (15270) timeleapcam::autofocus: Waiting for autofocus to start...I (15270) timeleapcam::autofocus: Autofocus initializedI (15290) timeleapcam::autofocus: AutoFocus Mode EnabledI (15290) timeleapcam::autofocus: AutoFocus TriggeredI (25310) timeleapcam::autofocus: AutoFocus TimeoutI (25320) ov5640: Set PLL: bypass: 0, multiplier: 180, sys_div: 4, pre_div: 2, root_2x: 0, pclk_root_div: 2, pclk_manual: 1, pclk_div: 4I (25320) ov5640: Calculated XVCLK: 5000000 Hz, REFIN: 2500000 Hz, VCO: 450000000 Hz, PLL_CLK: 45000000 Hz, SYSCLK: 11250000 Hz, PCLK: 2812500 HzI (25360) timeleapcam::autofocus: AutoFocus Mode EnabledI (25360) timeleapcam::autofocus: AutoFocus TriggeredI (29490) timeleapcam::autofocus: AutoFocus Done

按照这些步骤操作,您将成功安装并配置 Time Leap Cam 的软件。

外壳设计

这款相机安装在使用 3D 打印机创建的外壳中。外壳设计有一定程度的防水性能,适合户外使用,尽管它不防水。在外壳的底部,安装了一个线圈以接收来自 Qi 无线充电器的电源,并将电池放置在该线圈上方。然后将PCB安装在电池上方,摄像头部分从前面凸出。

底座上装有盖子,用于固定内部 PCB 和相机组件。在外壳内部,有一个用于软件编写的USB端口和一个用作触摸开关的螺丝。然后将盖壳放在该组件上。盖套包括一块圆形亚克力板,以保护相机镜头,同时使其可见。

相机用途

在以下情况都可以使用:

  • 老年人监护和紧急通知

该摄像头安装在老年人的家中,以监控他们的健康状况。如果摄像头检测到患者跌倒或处于异常状态,会通过LINE向指定的护理人员或家庭成员发送通知。

  • 家庭安全监控

出于安全目的,该摄像头用于监控房屋。它可以检测异常活动,例如打开的窗户、进入场所的人或任何其他指定条件。

  • 宠物监控

摄像头监控家中的宠物,确保它们安全并有足够的食物和水。如果宠物的食物碗是空的或宠物遇险,它可以通知主人。

  • 植物健康监测

相机用于监测花园或室内环境中植物的健康状况。它可以检测植物是否枯萎或是否需要浇水。

  • 天气监测

相机捕捉天空图像以监测天气状况。如果检测到下雨或其他天气变化的迹象,它可以通知用户。

  • 施工现场监控

该摄像机用于建筑工地,以监控进度并确保安全。它可以检测工人是否佩戴安全装备或是否存在任何安全隐患。

  • 野生动物观察

相机放置在自然栖息地,长时间观察野生动物的行为。如果检测到特定动物或环境发生变化,它可以通知研究人员。

  • 项目的延时摄影

该相机用于创建长期项目的延时视频,例如建筑施工、植物生长或艺术创作。

  • 远程物业监控

摄像机监控远程物业,例如度假屋或小木屋。它可以检测并通知所有者任何未经授权的访问或环境变化。

结论

总之,"TIME LEAP CAM"是一款专为长间隔延时摄影和长期监控而设计的自动对焦相机。它利用 OpenAI 的 GPT-4o 功能来分析捕获的图像,并且在满足特定条件(如检测到有人跌倒或窗户打开)时通过LINE发送通知。相机运行在低功耗 ESP32S3 SoC 上,支持 WiFi 通信,并使用 Qi 无线充电。它具有用于省电的深度睡眠模式、用于存储的 64GB eMMC 并且拥有适合户外使用的强大设计,相机的设置可以通过 WiFi 访问的 Web 界面轻松配置。这个设备满足了自动化监控的需求,无需持续的人工监督,使其成为包括老年护理和环境监测在内的各种应用中的宝贵工具。

项目原文链接已经整理在电子森林中,有兴趣的朋友可以点击"阅读原文"查看。

赞(6)
未经允许不得转载:工具盒子 » 手把手教你打造搭载GPT-4o的智能监护相机【资料全开源】