|
今天介绍的是一款用OpenAI打造智能监控与延时摄影摄像头, 这款名为“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时间保持
相机的规格 更新了配置屏幕的用户界面。 新增了在达到指定周期时,向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. 系统更新和软件包安装 使用以下命令更新系统并安装必要的软件包: sudoaptupdate&&sudoapt-yinstallgitpython3python3-pipgccbuild-essentialcurlpkg-configlibudev-devlibtinfo5clanglibclang-devllvm-devudevlibssl-devpython3.10-venv 2. Rust 安装 安装 Rust 编程语言和 Cargo 包管理器: curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|sh 3. 附加工具安装 安装以下 Rust 工具: ldproxy ESPN的 cargo-espflash
cargoinstallldproxycargoinstallespupcargoinstallcargo-espflash 4. ESP环境设置 执行以下命令,安装并更新乐鑫 Rust 生态系统。 设置环境变量: 5. Udev 规则配置 配置设备权限的 udev 规则: sudosh-c'echo"SUBSYSTEMS==\"usb\",ATTRS{idVendor}==\"303a\",ATTRS{idProduct}==\"1001\",MODE=\"0666\"">/etc/udev/rules.d/99-esp32.rules'sudoudevadmcontrol--reload-rulessudoudevadmtrigger6. 克隆存储库 克隆 TimeLeapCam 存储库: gitclonehttps://github.com/hnz1102/timeleapcam.gitcdtimeleapcam/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"
8. 构建和烧录 生成项目并将其刷写到设备: cargobuild--releasecargoespflashflash--release--monitor 9. 运行相机 闪烁后,相机将启动。控制台将显示启动消息。第一次启动可能需要几分钟时间来格式化 eMMC。完成后,将显示一个 IP 地址: I(6520)esp_netif_handlers:staip:192.168.2.191,mask:255.255.255.0,gw:192.168.2.1 打开 Web 浏览器并导航到显示的 IP 地址(例如“http://192.168.2.191”)。配置界面将允许您设置捕获间隔、捕获时间、分辨率和其他设置。 通过检查控制台输出中是否有指示成功初始化的消息,确保相机正常运行: I(9550)camera etectedOV5640cameraI(9550)camera:CameraPID=0x5640VER=0x00MIDL=0x00MIDH=0x00I(10250)cam_hal:buffer_size:16384,half_buffer_size:1024,node_buffer_size:1024,node_cnt:16,total_cnt:960I(10250)cam_hal:Allocating983040ByteframebufferinPSRAMI(10250)cam_hal:camconfigokI(10270)ov5640:SetPLL: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:CalculatedXVCLK:5000000Hz,REFIN:2500000Hz,VCO:500000000Hz,PLL_CLK:50000000Hz,SYSCLK:12500000Hz,PCLK:3125000HzI(10310)timeleapcam::capture:CapturingFrameThreadStart...I(10310)timeleapcam::monitoring uerythreadstartedI(10310)timeleapcam::autofocus:AutofocusPID:0x5640I(10320)timeleapcam:Resolutionchanged:21->8I(15270)timeleapcam::autofocus:Waitingforautofocustostart...I(15270)timeleapcam::autofocus:AutofocusinitializedI(15290)timeleapcam::autofocus:AutoFocusModeEnabledI(15290)timeleapcam::autofocus:AutoFocusTriggeredI(25310)timeleapcam::autofocus:AutoFocusTimeoutI(25320)ov5640:SetPLL: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:CalculatedXVCLK:5000000Hz,REFIN:2500000Hz,VCO:450000000Hz,PLL_CLK:45000000Hz,SYSCLK:11250000Hz,PCLK:2812500HzI(25360)timeleapcam::autofocus:AutoFocusModeEnabledI(25360)timeleapcam::autofocus:AutoFocusTriggeredI(29490)timeleapcam::autofocus:AutoFocusDone 按照这些步骤操作,您将成功安装并配置 Time Leap Cam 的软件。 外壳设计 
这款相机安装在使用 3D 打印机创建的外壳中。外壳设计有一定程度的防水性能,适合户外使用,尽管它不防水。在外壳的底部,安装了一个线圈以接收来自 Qi 无线充电器的电源,并将电池放置在该线圈上方。然后将PCB安装在电池上方,摄像头部分从前面凸出。 
底座上装有盖子,用于固定内部 PCB 和相机组件。在外壳内部,有一个用于软件编写的USB端口和一个用作触摸开关的螺丝。然后将盖壳放在该组件上。盖套包括一块圆形亚克力板,以保护相机镜头,同时使其可见。 相机用途 在以下情况都可以使用: 该摄像头安装在老年人的家中,以监控他们的健康状况。如果摄像头检测到患者跌倒或处于异常状态,会通过LINE向指定的护理人员或家庭成员发送通知。 出于安全目的,该摄像头用于监控房屋。它可以检测异常活动,例如打开的窗户、进入场所的人或任何其他指定条件。 摄像头监控家中的宠物,确保它们安全并有足够的食物和水。如果宠物的食物碗是空的或宠物遇险,它可以通知主人。 相机用于监测花园或室内环境中植物的健康状况。它可以检测植物是否枯萎或是否需要浇水。 相机捕捉天空图像以监测天气状况。如果检测到下雨或其他天气变化的迹象,它可以通知用户。 该摄像机用于建筑工地,以监控进度并确保安全。它可以检测工人是否佩戴安全装备或是否存在任何安全隐患。 相机放置在自然栖息地,长时间观察野生动物的行为。如果检测到特定动物或环境发生变化,它可以通知研究人员。 该相机用于创建长期项目的延时视频,例如建筑施工、植物生长或艺术创作。 摄像机监控远程物业,例如度假屋或小木屋。它可以检测并通知所有者任何未经授权的访问或环境变化。 结论 总之,“TIME LEAP CAM”是一款专为长间隔延时摄影和长期监控而设计的自动对焦相机。它利用 OpenAI 的 GPT-4o 功能来分析捕获的图像,并且在满足特定条件(如检测到有人跌倒或窗户打开)时通过LINE发送通知。相机运行在低功耗 ESP32S3 SoC 上,支持 WiFi 通信,并使用 Qi 无线充电。它具有用于省电的深度睡眠模式、用于存储的 64GB eMMC 并且拥有适合户外使用的强大设计,相机的设置可以通过 WiFi 访问的 Web 界面轻松配置。这个设备满足了自动化监控的需求,无需持续的人工监督,使其成为包括老年护理和环境监测在内的各种应用中的宝贵工具。 |