前言

在人工智能与开源硬件高速发展的今天,人们越来越希望科技产品不再冰冷,而是能够陪伴、互动甚至“拥有情绪”。电子宠物并不是全新的概念,但传统电子宠物往往只具备简单动画与按钮交互,远称不上智能。随着 RISC-V 生态逐渐成熟,开发者终于可以在完全开源的指令集架构上构建一个真正“活着”的 AI 桌面宠物系统。这不仅能够展示 RISC-V 在智能交互领域的潜力,也为未来本地 AI 硬件创新提供了实践路径。

本文将基于 VisionFive 系列 RISC-V 开发板,从硬件选型、系统构架、人脸识别、情绪系统、AI 对话、界面呈现等多个维度,完整介绍一个可以识主人、会撒娇、会生气、会提醒喝水的“永远活着的桌面 AI 宠物”的设计与实现过程。


1 桌面 AI 宠物的系统构想

桌面 AI 宠物的核心目标,是让一个电子生命体常驻用户桌面,与主人建立某种程度的“情感连接”。这种连接并非虚构,而是借由情绪状态、传感器输入、语音与表情反馈所产生的连续感知。

1.1 项目核心目标

整个系统围绕三个关键价值展开:

  1. 宠物需要具备持续运行能力,形成“永远在线”的生命态势。
  2. 宠物能够识别特定用户,例如当主人靠近时表情变得开心。
  3. 宠物具备情绪系统,能根据环境、互动、时间等因素产生“饥饿”“开心”“生气”“无聊”等状态。

通过这些能力,AI 宠物不再只是屏幕上的图标,而是具有性格的小生命体。

1.2 使用 RISC-V 平台的必要性

将本项目建立在 RISC-V 平台而非 ARM 或 x86 上,背后有三个设计考量:

第一,RISC-V 完全开源,开发者可在更底层进行扩展,便于未来加入传感器、加速器或自定义指令进行优化。

第二,RISC-V 生态正在快速增长,VisionFive 2 等主流板卡已经支持 Linux 桌面、OpenCV、YOLO 模型推理,对 AI 边缘应用的支持越来越完善。

第三,本项目适合作为 RISC-V 的展示案例:它集成了操作系统、视觉识别、轻量 AI、大型界面系统与多线程调度,是一个很好的验证场景。


2 硬件平台:VisionFive 开发板介绍

桌面 AI 宠物需要一套具备摄像头接口、可连接屏幕、拥有一定算力的硬件。VisionFive 系列开发板正好符合这一需求。以下给出常见配置。

2.1 VisionFive 2 硬件参数

下面以 VisionFive 2 为例概述其核心特性:

模块 描述
CPU StarFive JH7110,四核 RV64 处理器
GPU IMG BXE-2-32
RAM 4GB / 8GB LPDDR4
网络 千兆以太网、可扩展 WiFi
接口 USB 3.0、MIPI CSI 摄像头接口、HDMI 视频输出
存储 TF 卡、可扩展 NVMe

这些规格意味着它完全有能力运行 Linux 桌面系统、OpenCV、轻量 AI 模型以及 LVGL 图形系统。本项目正是在 VisionFive 2 上运行 Linux(Debian 或 OpenWrt)并构建用户界面。
在这里插入图片描述

2.2 外设与屏幕配置

AI 宠物需要视觉系统,因此必须搭配摄像头。选择方式主要关注 CSI 接口兼容性与分辨率。例如采用 OV5647 或 IMX219 模组可保证良好兼容性。

显示屏则可以使用两种方式:

  • HDMI 屏幕,用于大尺寸桌面摆件;
  • SPI 屏幕,通过 LVGL 绘制更原生的界面。

3 系统整体架构设计

AI 宠物系统由多个独立模块协作完成:视觉识别、情绪引擎、AI 对话模块、显示界面模块、时间与事件调度系统等。它们由主控循环统一调度。

3.1 系统模块结构

系统可以划分为以下五个核心子系统:

(1)视觉识别模块
基于 OpenCV + YOLO 实现人脸检测与目标分割。当检测到特定人脸时,向情绪引擎发送“亲近事件”。

(2)情绪引擎模块
维护宠物的状态,例如饥饿度、快乐度、疲劳度等,并根据变量变化生成“开心”“生气”“害怕”等情绪。

(3)轻量 AI 对话模块
采用 Phi-3-mini 或 Qwen-1.5B 作为本地对话模型,负责回应用户提问或与宠物对话。

(4)图形界面模块
使用 LVGL 绘制动态表情,例如:眯眼、哭泣、满脸爱心等。

(5)提醒与日程模块
用于喝水提醒、久坐提醒等互动行为,使宠物具备生活助理功能。

这些模块通过 Python 或 C++ 线程系统并行运行。


4 人脸识别系统的实现

VisionFive 支持 OpenCV 和 NCNN,因此可以使用 YOLOv5-Face 或 YOLO-Fastest 成功运行轻量级检测。

常见流程如下:

  1. 摄像头初始化并持续捕获图像。
  2. YOLO 模型进行实时推理。
  3. 如果识别到人脸,则将区域截取并进行特征对比。
  4. 当识别到“主人”时,向情绪模块发送“亲近事件”。

下面给出一个基于 Python + OpenCV 的示例:

import cv2
from emotion import send_event

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        continue

    faces = face_detector(frame)   YOLO 或 DNN 模型推理
    if len(faces) > 0:
        send_event("owner_close")

    cv2.imshow("camera", frame)
    if cv2.waitKey(1) == ord('q'):
        break

模型推理部分可以切换为 NCNN 提供的 YOLO 加速库,以适配 RISC-V 环境。


5 情绪引擎的行为建模

AI 宠物的核心是“情绪系统”。如果没有情绪机制,它就只是一块显示屏。而一个好玩的小动物需要自主变化。

5.1 情绪变量设计

宠物状态可分为:

  • 快乐值
  • 饥饿值
  • 精力值
  • 兴奋程度

这些变量会随时间变化。例如饥饿值会持续上升,而快乐值在见到主人时提升。

以下是一个简化的情绪变量表:

状态变量 初始值 变化规则
快乐度 70 主人靠近 +20;长时间无人看 -1/分钟
饥饿度 0 每 10 分钟 +5
精力 100 每小时 -5;互动 +10
兴奋度 0 对话 +10

5.2 情绪生成机制

系统每隔一秒根据变量计算当前表情,例如:

  • 快乐>80 显示“喜滋滋”
  • 饥饿>70 显示“委屈”
  • 生气条件:长时间没人理 + 饥饿>50
  • 害怕条件:光线快速变化或噪声突变

以下为情绪循环示例:

def update_emotion():
    global happy, hungry

    hungry += 0.01
    if last_seen_owner > 300:
        happy -= 0.05

    if hungry > 80:
        current = "hungry"
    elif happy < 40:
        current = "sad"
    else:
        current = "normal"

    return current

6 屏幕界面与表情绘制

图形界面由 LVGL 负责绘制。由于 LVGL 支持纯 C 和嵌入式渲染,因此非常适合 RISC-V 开发板。

通常将表情分为 PNG 或帧动画,也可以实时绘制矢量图。

以下为 LVGL 显示图片的实例:

lv_obj_t *img = lv_img_create(lv_scr_act());
lv_img_set_src(img, "S:/face_happy.bin");
lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);

如果情绪变化时,只需切换图片:

if (emotion == HAPPY) {
    lv_img_set_src(img, "S:/happy.bin");
}

7 AI 对话模块:让宠物开口说话

7.1 模型选型

对于 RISC-V 并没有成熟的大模型加速器,因此建议使用轻量模型,例如:

  1. Phi-3-mini(约3B)
  2. Qwen-1.5B-Chat

这些模型可以通过 GGUF 格式配合 llama.cpp 实现本地推理。

7.2 对话与情绪结合

当用户与宠物对话时,可将对话内容反馈给情绪系统。例如:

  • 用户夸奖宠物 → 快乐度 +20
  • 用户批评宠物 → 快乐度 -10
  • 长时间聊天 → 兴奋 +20

调用模型的 Python 示例:

from llama_cpp import Llama

llm = Llama(model_path="qwen1.5b.gguf")

def pet_reply(text):
    prompt = f"你是一只可爱的电子宠物,请用萌萌的语气回答:{text}"
    output = llm(prompt)
    return output["choices"][0]["text"]

8 任务提醒与生活助理功能

宠物不仅要有情绪,还要具备“生活功能”。例如,每小时提醒喝水、提醒久坐、天气提示等。

定时任务可由 Linux Cron 或 Python 的调度器实现:

import schedule, time

def remind_drink():
    send_event("remind_drink")
    display("喝水啦!主人~")

schedule.every(1).hours.do(remind_drink)

while True:
    schedule.run_pending()
    time.sleep(1)

提醒事件也会影响情绪,形成更丰富的互动体验。


9 系统集成与主循环设计

主循环负责协调摄像头、情绪、AI 和界面。例如:

while True:
    process_camera()
    mood = update_emotion()
    render_face(mood)
    handle_dialog()
    run_tasks()

各模块分别使用线程运行,保持宠物拥有类似“生命体”的持续感。


结语

基于 VisionFive 等 RISC-V 开发板构建的桌面 AI 宠物系统,是当前人工智能与开源硬件结合的绝佳案例。从人脸识别、情绪系统到 LVGL 表情界面,本项目展示了 RISC-V 在智能交互与边缘 AI 领域的可行性。更重要的是,一个“永远活着”的虚拟伙伴能够真正增强用户的情感体验,让桌面不再只是工具,而是陪伴。

未来,随着 RISC-V 生态不断发展,本地 AI 与嵌入式智能交互将迎来更大的可能。本项目也有望继续发展为开源社区的标杆性示例,让更多人见识到开源硬件的魅力。


参考资料

  1. VisionFive 官方文档
    https://doc-en.rvspace.org/VisionFive2/
  2. LVGL 官方文档
    https://docs.lvgl.io
  3. OpenCV 官方教程
    https://docs.opencv.org/
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐