一、引言
说起花草树木,不知道有没有小伙伴对这些感兴趣,也可能是我年纪大了,平时就喜欢研究花花草草,甚至于开始养一些植物。我虽然养过兰花,但兰科植物的分类却是五花八门,以至于我到现在还是分不清楚。不过随着AI产品的不断问世,像AI大模型辅助编程,又或是酒店送餐的AI机器人等等,AI产物慢慢在我们的生活中占据一席之地。
当我看到、了解到AI Glasses产品的时候,我立马就蹦出一个念头,能不能把Ta变成一部植物百科全书,当用户戴着眼镜欣赏某个植物时,Ta是否可以将这个植物的百科信息直接投射到用户的眼镜里呢?就这样,我的技术方案应运而生,通过AI眼镜+图像识别+查询百科+AR投射,实现"所见即所得"的植物百科信息可视化,用户只需用眼镜拍摄看到的花草树木,系统即可实时识别并投射对应植物的百科信息至视野中,辅助用户辨别各式各样的植物,当然了还可以辨别各种红伞伞、白杆杆的蘑菇,避免误食。
目标用户:植物爱好者,或有相关研究需求的用户,例如辨别蘑菇可食用性、教小朋友认识植物等。
二、技术实现思路
系统采用端侧识别+云侧校验的混合架构,核心流程如下:

- 图像采集:AI眼镜摄像头拍摄具体的植物图像;
- 端侧预处理:在眼镜本地进行初步图像裁剪与特征提取;
- 云侧识别:上传至云端AI模型进行精确分类与匹配对应的植物品种;
- AR投射:将结果通过AR技术叠加至用户视野;
- 语音交互:支持语音查询历史记录或调整投射样式。
三、核心代码实现
图像采集与传输
前提:通过CXR-M SDK连接AI眼镜摄像头,并监听图像帧数据,采集用户实时拍摄的植物影像数据。
代码功能:获取植物图像并触发云端识别请求。
java
// 使用CXR-M SDK的CameraService获取图像流
public class FoodCameraService extends Service {
private CameraDevice mCameraDevice;
private ExecutorService mExecutor = Executors.newSingleThreadExecutor();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
openCamera(); // 初始化摄像头
return START_STICKY;
}
private void openCamera() {
CameraManager manager = (CameraManager) getSystemService(CAMERA_SERVICE);
try {
manager.openCamera("0", mCameraCallback, mExecutor); // "0"为默认摄像头ID
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
mCameraDevice = camera;
startCapture(); // 摄像头就绪后开始捕获
}
};
private void startCapture() {
// 此处省略CaptureRequest配置代码,实际需设置JPEG输出格式
// 捕获到图像后通过CXR-M SDK的UploadService上传至云端
mCameraDevice.createCaptureSession(Arrays.asList(getOutputSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
session.capture(buildCaptureRequest(), null, null);
}
}, null);
}
}
技术亮点:
- 通过
CameraManager动态管理摄像头资源,兼容不同设备; - 使用单独线程(
ExecutorService)处理图像流,避免阻塞主线程。
云端查询匹配并识别植物信息
前提:图像上传至云端后,调用AI模型查询植物百科信息,精确匹配与定位植物的科目并将详细的植物信息查询出来。
代码功能:接收云端返回的JSON数据并解析。
python
# 云端植物识别(调用百度智能云大模型API,精简版)
import requests
import json
# ---------------------- 1. API配置(需先申请百度智能云AK/SK)----------------------
# 步骤:1. 百度智能云官网注册 → 2. 开通"植物识别"API → 3. 获取AK/SK
API_KEY = "你的百度智能云API_KEY"
SECRET_KEY = "你的百度智能云SECRET_KEY"
TOKEN_URL = "https://aip.baidubce.com/oauth/2.0/token"
RECOGNIZE_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant"
# ---------------------- 2. 精简版植物百科(可根据API返回的植物名称扩展)----------------------
PLANT_ENCYCLOPEDIA = {
"绿萝": {"科属": "天南星科", "习性": "耐阴喜湿", "养护": "喷水增湿,水培土培均可", "禁忌": "忌强光"},
"玫瑰": {"科属": "蔷薇科", "习性": "喜阳耐旱", "养护": "见干见湿,花后剪残枝", "禁忌": "忌积水"},
"多肉": {"科属": "景天科等", "习性": "耐旱怕涝", "养护": "宁干勿湿,透气土壤", "禁忌": "忌频繁浇水"},
"月季": {"科属": "蔷薇科", "习性": "喜阳喜肥", "养护": "勤施肥,花后剪枝", "禁忌": "忌积水"},
"吊兰": {"科属": "百合科", "习性": "耐阴耐旱", "养护": "盆土湿润,定期施肥", "禁忌": "忌强光直射"},
# 可根据API识别结果,无限扩展百科条目
}
# ---------------------- 3. 核心功能(获取Token+调用API+解析结果)----------------------
def get_access_token():
"""获取API调用Token(有效期30天,可缓存复用)"""
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return requests.post(TOKEN_URL, params=params).json()["access_token"]
def plant_recognize_with_api(img_path):
# 1. 读取图片并编码为Base64(API要求的输入格式)
with open(img_path, "rb") as f:
img_base64 = f.read().hex() # 简化Base64编码(百度API支持hex格式)
# 2. 调用百度植物识别大模型API
token = get_access_token()
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = {"image": img_base64, "top_num": 1} # top_num=1返回最可能的结果
response = requests.post(f"{RECOGNIZE_URL}?access_token={token}", headers=headers, data=data)
result = response.json()
# 3. 解析API结果(提取植物名称和置信度)
if "result" in result and len(result["result"]) > 0:
plant_name = result["result"][0]["name"] # 大模型返回的植物名称
confidence = round(result["result"][0]["score"] * 100, 2) # 置信度
else:
plant_name = "未知植物"
confidence = 0.0
# 4. 匹配百科信息(无对应条目则返回默认值)
encyclopedia = PLANT_ENCYCLOPEDIA.get(plant_name, {"科属": "未知", "习性": "暂无", "养护": "暂无", "禁忌": "暂无"})
# 5. 输出最终结果(适配端侧AR展示)
final_result = {
"植物名称": plant_name,
"置信度(%)": confidence,
"百科信息": encyclopedia
}
print(json.dumps(final_result, ensure_ascii=False, indent=2))
return final_result
# ---------------------- 测试调用 ----------------------
if __name__ == "__main__":
plant_recognize_with_api("uploaded_plant.jpg") # 端侧上传的植物图片路径
技术亮点:
- 使用百度智能云的植物识别大模型,适配云端推理;
- 返回结构化JSON,便于端侧解析。
AR植物百科信息投射
前提:通过CXR-M SDK的AR功能将匹配到的植物百科信息数据投射至用户视野。
代码功能:在眼镜屏幕固定位置渲染文本。
arduino
// AR投射服务(基于CXR-M SDK的ARCore集成)
public class CalorieARRenderer implements GLSurfaceView.Renderer {
private String mCalorieText = "植物信息";
public void updateCalorie(String text) {
mCalorieText = text; // 由云端回调更新
}
@Override
public void onDrawFrame(GL10 gl) {
// 简化示例:实际需使用ARCore的Anchor定位
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glLoadIdentity();
gl.glOrthof(0, 1, 0, 1, -1, 1); // 设置2D正交投影
drawText(gl, mCalorieText, 0.5f, 0.9f); // 在屏幕上方居中显示
}
private void drawText(GL10 gl, String text, float x, float y) {
// 实际需集成FreeType库或使用CXR-M SDK的文本渲染API
// 此处省略字体加载与纹理绘制代码
}
}
技术亮点:
- 通过
GLSurfaceView.Renderer实现低延迟渲染; - 固定坐标投射,避免遮挡植物主体。
本方案围绕 "端云协同 + 硬件融合 + 场景适配" 三大核心,精准解决 "实时识别" 与 "无感交互" 关键问题:
- 端云协同架构:端侧通过 CXR-M SDK 完成图像采集、裁剪、降噪及特征提取等预处理,大幅缩减云端传输量与延迟;云端依托百度智能云植物识别模型实现高精度识别,既保障端侧实时响应,又弥补本地算力不足,达成 "速度 + 精度" 双重平衡。
- 硬件深度融合:基于 Rokid CXR-M SDK 打通 "摄像头采集 - 端侧处理 - AR 投射" 全链路,无需第三方 APP 中转;AR 模块通过 ARCore 接口,将百科数据以悬浮窗形式投射至视野右上角(避开植物主体),延迟控制在 500ms 内,实现真正 "所见即所得"。
- 场景化适配:针对不同需求预留灵活扩展接口,例如为进山采蘑菇的新手人群定制 "有毒提醒" 功能 ------ 匹配到有毒蘑菇时,AR 窗口自动转为红色警示,让通用技术升级为个性化实用工具。
四、技术总结
这方案的核心,其实是用 AI 给眼镜 "加 buff"------ 它不是多出来的工具,而是眼镜本身的功能延伸:就像眼镜帮人看清物体轮廓,AI 帮人 "读懂" 植物的底细。
从技术上来说,端云协同、硬件融合、场景适配这三点,解决的是 "用着顺不顺手" 的问题;从实际体验来看,AI 让认识植物、了解养护技巧,从特意去查变成抬眼就知,真正做到科技顺着生活来。
当然,AI Glasses结合大模型搜索可以玩出各式各样的花活,并不仅局限于识别植物,当然还可以识别动物,随着模型升级,让AI Glasses成为一个资深的医学博士,帮你一秒看懂病历单也不是天马行空的想象,我想可能就在明年、后年......我相信技术改变生活,AI也将会慢慢的更懂用户的需求。