最近国外有一款APP在健身圈火了。功能很简单:自动识别照片中的食物并计算卡路里。团队开发加市场也就两三个人,主要用大模型实现。我就想可以把它当作教程案例,原因如下:
-
-
这里先介绍一下 CloudMan 的开发背景,便于大家对照。
我工作头几年用Java开发过Web应用,不过已经是二十多年前的事了。后来一直做服务和实施,有时会编写一些Shell和Ansible脚本。
总结起来就是:
有一定开发经验,但欠缺最新的开发技术
下面来看看我是如何开发这个APP的。
调研
目前咱们知道方向是用大模型来实现,但具体怎么做还没有思路。不过没关心,可以问AI。
这里我问了字节旗下的豆包
https://www.doubao.com/
可能有人会问为什么不用chatGPT?
一个原因是豆包不需要梯子,用起来限制少。但更重要的是现在国内大模型已经很能打了,完全不输给国外的一流大模型。
除了豆包,DeepSeek、千问、文心、Kimi、智谱都能达到相同效果。后面我们也尽可能用国内的产品和服务。
我问豆包:
我想开发一个拍照查卡路里的APP,其功能是用户用手机拍摄或选取照片,APP识别照片中的食物并计算卡路里。请问该怎么做?请给出方案
豆包回答如下:
先来看最重要的
图像识别
豆包推荐了Google Cloud Vision API、百度 AI 开放平台的图像识别服务和自己训练卷积神经网络(CNN)模型。
自己训练肯定不行,咱没那技术也没必要,那就百度吧。
于是我让豆包详细介绍了一下百度 AI 开放平台
https://ai.baidu.com/
图像识别服务的使用方法。
按照豆包给出的步骤,找到了百度图像识别的服务列表。
能不能满足需求得试了才知道,我准备了三张图片。
我们希望大模型能识别图片中所有食物(包括果蔬、菜品等)并计算卡路里。
下面是测试过程:
测试结果:
果蔬识别
:只能识别单个果蔬,且不提供卡路里信息。
菜品识别
:能识别菜品并提供卡路里信息,但不能识别果蔬。
图像多主体检测
:能识别多个物体,但只给出分类信息,没有名称,也没有卡路里。
看来没有一种服务能完全满足需求。
不过如果把它们结合起来或许能行。比如先用“图像多主体检测”找出每一个食物,然后用“菜品识别”和“果蔬识别”确定各个食物的名称,如果没有卡路里信息或许还需要调用外部查询服务。
但这个方案太复杂了,要考虑的情况太多,实现起来难度大,关键是:
这样的方案不够AI
。
理想的情况应该是这样:
大模型根据我的要求,自己去处理中间环节,直接返回给我想要的答案。
有可能吗?还真能。
之前我忽略掉了一个服务“图像内容理解”,仔细研究后发现这正是我们想要的。
我们可以把要求直接写在“question”中,比如“识别图中食物或菜品及其卡路里”,上传图片就能返回我们想要的结果。
效果如下:
“图像内容理解”完全能满足需求,接下来要做的就是优化“question”,通常也叫提示词(prompt)。目前大模型返回的是一段自然语言,为了跟前端APP交互,我们希望返回一个结构化的JSON数组。比如下面这样:
[
{
name: “苹果”,
unit:”个”,
quantity: “1”,
calorie: “95”
},
{
name: “香蕉”,
unit:”只”,
quantity: “2”,
calorie: “236”
}
]
经过几轮迭代,最终我们的提示词如下:
识别图中食物或菜品,每种以格式{name: “”, unit:””, quantity: “”, calorie: “”}输出,放在数组中
演示如下:
到这里,技术方案基本上确定下来了:
调用百度大模型“图像内容理解”功能,返回JSON格式的结果
大家可以看到,在调研过程中我们走了些弯路,刚开始并没有找准“图像内容理解”这个服务。CloudMan 也是想借这个事情告诉大家:
多尝试,多探索,有时候不是AI做不到,而是我们还没触碰到它的能力边界。
目前(2025年3月)百度“图像内容理解”有两点不足:
-
-
识别效果有时不太理想,比如耙耙柑识别成柿子,有时没有卡路里信息。
对于这些限制,我们的解决思路很简单:
换更好的大模型
AI发展很快,大模型每几个月就会更新迭代。所有这些限制都是暂时的,即便是当下,我们也有更好的选项,这个咱们后面讨论。
下一节任务:开发前端APP并与大模型集成。