小米AI场景识别API需通过HTTPS调用官方接口,仅限白名单合作方获取access_token;PHP须用JSON格式发送base64图片(不含data前缀),设置正确Content-Type和Authorization头,返回英文标签如"indoor"/"outdoor"需自行映射中文语义。

小米AI场景识别API怎么调用(PHP版)
小米AI场景识别目前**不提供公开的独立SDK或PHP原生封装**,所有调用必须走其官方HTTP接口 https://ai.api.xiaomi.com/v1/scene/detect,且需携带有效 access_token。这个token不是随便注册就能拿到的——它只对已接入小米IoT开放平台、并通过「AI能力白名单」审核的商用合作方开放。个人开发者直接调用会返回 {"code":401,"message":"Unauthorized"}。
如果你只是想快速验证图像分类效果,建议先用小米官方调试工具(https://dev.mi.com/console/doc/detail?pId=3059)上传图片看返回结果,再决定是否推进商务对接流程。
PHP发送POST请求识别图像的正确写法
即使拿到token,也容易在PHP侧栽在几个细节上:Content-Type不对、图片没转base64、JSON字段名拼错。小米接口要求严格按文档传 image(base64字符串)和 model(目前仅支持 "scene"),不能多也不能少。
- 必须用
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']),不能用multipart/form-data -
image字段值是纯base64字符串,不含data:image/jpeg;base64,前缀 - 用
file_get_contents()读图后要base64_encode(),别漏掉这步 - 整个请求体必须是合法JSON,用
json_encode()包一层,别手动拼字符串
示例关键片段:
立即学习“PHP免费学习笔记(深入)”;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ai.api.xiaomi.com/v1/scene/detect');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'image' => base64_encode(file_get_contents('/path/to/photo.jpg')),
'model' => 'scene'
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $access_token
]);
$result = curl_exec($ch);
返回结果里怎么判断“家居”还是“户外”
接口返回的是一个带置信度的标签列表,比如 "label": "indoor" 或 "label": "outdoor",但要注意:小米的模型输出标签是固定枚举值,不是自然语言描述。它不会返回“客厅”“阳台”这种细分词,也不会返回“家居”“户外”这种中文词——而是英文小写标识符。
- 常见有效
label值包括:"indoor"、"outdoor"、"bedroom"、"living_room"、"garden"、"street" - 你需要自己做映射:把
"indoor"和"bedroom"等归为“家居”,"outdoor"、"garden"、"street"归为“户外” - 别只看第一个结果——
result数组按score降序排列,但最高分未必是你想要的语义层级;比如一张阳台照可能同时有"outdoor": 0.92和"living_room": 0.87,得结合业务逻辑取舍
为什么本地测试老是返回空或报错
最常卡在三个地方:token过期、图片尺寸超限、域名证书校验失败。小米接口强制HTTPS,且对SSL证书链敏感,部分旧版cURL(如PHP 7.2以下)默认会因证书问题中断连接。
- 检查
$access_token是否过期(有效期2小时),别复用第一次申请的token - 图片长宽都不能超过2048px,文件大小不能超过5MB,超了会返回
{"code":400,"message":"Invalid image size"} - 加一句
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)可绕过证书校验(仅测试用,上线必须关掉) - 用
curl_error($ch)打印真实错误,别只看HTTP状态码——很多失败其实是cURL底层报的
真正难的不是写几行PHP,而是确认你有没有权限调这个接口、图片预处理是否符合小米的隐式要求(比如光照、角度)、以及怎么合理解释多标签并存时的业务含义。这些没法靠查文档解决,得实测+反馈+调参。











