人脸识别OSD相框





为什么选择OSD 相框?




我之前在 Instructables 做过 2 个照片时钟项目:
https://www.instructables.com/id/ESP32-Photo-Clock...
https://www.instructables.com/id/Arduino-BiJin-ToK...
二者每分钟都会从互联网上检索一张美女照片和一个时间表并显示在液晶显示屏上。
展示美女固然好,但对我而言都是陌生人,何不放上个人喜欢的照片,并加上现在的时间和其他即时资讯呢?
该项目正在探索如何实现这一点。
为什么要使用 Face Aware?






我们先来看看如何为照片添加即时信息OSD:
- 从特定文件夹中随机选择一张照片
- 检索时间
- 从互联网获取即时信息
- 在照片上绘制时间和即时信息
步骤 1-3 很简单;步骤 4 看起来也很简单,但确定在哪里绘制文本并不那么容易。
如果文字太小,在合理的距离内难以阅读;如果文字太大,则很有可能会遮住照片中的物体。尤其是肖像照,文字遮住脸部是不可取的。
由于每张照片的人脸位置不一样,为了避免OSD遮住人脸,我们需要先进行人脸检测。然后我们才能找到没有人脸的区域来绘制文字。
2 层设计

人脸检测过程需要一定的处理能力,而相框则可以非常轻量。因此我将其分为两层:
服务器
人脸识别照片引擎是一个 Node.js 应用服务器。对于每个 HTTP 请求,它将:
- 从照片文件夹中随机选择一张照片
- 人脸检测
- 确定无面或最少面区域
- 同时,每隔一段时间从互联网上获取天气或其他有用的即时信息
- 在照片上绘制时间和即时信息
- 以 JPEG 格式返回带 OSD 的照片作为 HTTP 响应
客户
客户端可以是网络浏览器、小程序或物联网设备。
例如,带有 2-4 英寸 LCD 的 ESP32 开发板非常适合作为小型相框放在桌面上。
设置照片服务器选项 1:Docker 镜




为了方便起见,我已经为人脸识别照片 OSD Node.js 应用服务器预先构建了一个 Docker 镜像。
如果您尚未设置 Docker,请按照 Docker 入门指南进行操作:
https://www.docker.com/get-started
然后运行以下命令:(将/path/to/photo替换为你自己的照片路径)
通过浏览http://localhost:8080/进行测试
您可能会发现显示的时间不符合您的时区:
如果你和我一样住在香港,可以添加香港天气信息:
如果您想开发自己的 OSD 信息:
修改app.js中的update_osd()函数,定制自己的OSD信息,开发完成后,只要在docker命令中去掉DEBUG=Y环境即可。
设置照片服务器选项 2:从源代码构建

如果您熟悉 Node.js,您可以从源代码构建应用服务器。
获取源代码:
安装软件包:
创建照片文件夹并将您自己的照片复制到该文件夹中。
运行应用服务器:
客户端选项2:ESP32+LCD






相框客户端可以像 ESP32 开发板和 LCD 一样简单。
以下是所需的硬件:
ESP32 开发板
任何 ESP32 开发板都应该可以,这次我使用的是名为 MH-ET LIVE 的开发板。
LCD 显示屏
任何 Arduino_GFX 支持的 LCD,您都可以在 GitHub readme 中找到当前支持的显示器:
https://github.com/moononournation/Arduino_GFX
跳线
一些跳线,取决于开发板和 LCD 引脚布局。在大多数情况下,6-9 根母对母跳线就足够了。
液晶显示器支架
一些支撑可以帮助液晶显示器直立,这次我使用了卡座支架。
ESP32+LCD组装





ESP32 最好是排针在上方的,如果排针在下方,就直接把板子倒过来 ;>
用跳线连接 ESP32 和 LCD,然后将其安装到支架上。
以下是示例连接摘要:
ESP32+LCD软件

Arduino IDE
如果您尚未下载并安装 Arduino IDE,请执行以下操作:
https://www.arduino.cc/en/main/software
ESP32 支持
如果尚未添加 ESP32 支持,请按照安装说明进行操作:
https://github.com/espressif/arduino-esp32
Arduino_GFX 库
下载最新的 Arduino_GFX 库:(按“克隆或下载”->“下载 ZIP”)
https://github.com/moononournation/Arduino_GFX
在 Arduino IDE 中导入库。(Arduino IDE“草图”菜单 -> “包含库” -> “添加 .ZIP 库” -> 选择下载的 ZIP 文件)
编译并上传
- 打开 Arduino IDE
- 打开 ESP32PhotoFrame 示例代码(“文件” -> “示例” -> “Arduino 的 GFX 库” -> “WiFiPhotoFrame”)
- 在 SSID_NAME 和 SSID_PASSWORD 中填入你的 WiFi AP 设置
- 在 HTTP_HOST 和 HTTP_PORT 中替换服务器主机名或 IP 和端口
- 按 Arduino IDE“上传”按钮
- 如果发现方向不正确,请在新类代码中更改“旋转”值(0-3)
欣赏照片!

现在是时候将 IoT 相框放在您的桌面上并享受它了!
- 添加您自己的即时信息
- 微调源照片尺寸以提高人脸检测准确率
- 自动将最新照片放入服务器照片文件夹
- 拍摄更多照片;>











