本速查表基于项目中使用的 5 个核心识别功能(植物、动物、车辆、车牌、菜品)整理,涵盖 API 调用的核心要素(客户端、方法名、参数、结果字段等),方便开发时快速查阅,减少重复查文档的成本。
| 识别类型 | 核心客户端 | API 方法名 | 必传参数 | 常用可选参数 | 结果存储节点 | 关键结果字段(示例) |
|---|---|---|---|---|---|---|
| 植物识别 | ImageClassify | PlantDetect | image(byte[]) | 无(默认返回所有结果) | "result" | - name:植物名称(如 “玫瑰”)- score:相似度(0-1,如 0.92) |
| 动物识别 | ImageClassify | AnimalDetect | image(byte[]) | 无(默认返回所有结果) | "result" | - name:动物名称(如 “金毛寻回犬”)- score:相似度(0-1,如 0.89) |
| 车辆识别 | ImageClassify | CarDetect | image(byte[]) | top_num(返回结果数) | "result" | - name:车辆型号(如 “宝马 3 系 2020 款”)- score:相似度(0-1,如 0.95) |
| 车牌识别 | Ocr | LicensePlate | image(byte[]) | multi_detect(多车牌) | "words_result" | - color:车牌颜色(如 “blue”)- number:车牌号码(如 “京 A12345”) |
| 菜品识别 | ImageClassify | DishDetect | image(byte[]) | top_num(返回结果数) | "result" | - name:菜品名称(如 “宫保鸡丁”)- calorie:卡路里(每 100g,如 “150kcal”)- probability:相似度(0-1,如 0.91) |
一、通用调用步骤(所有功能通用)
初始化客户端
:传入百度 AI 的API_KEY和SECRET_KEY
创建对应客户端(ImageClassify或Ocr)。
// 图像分类客户端(植物/动物/车辆/菜品) ImageClassify classifyClient = new ImageClassify(API_KEY, SECRET_KEY); // OCR客户端(车牌识别) Ocr ocrClient = new Ocr(API_KEY, SECRET_KEY);
设置超时时间
(可选,默认可能较短,建议设置为 60 秒):
classifyClient.Timeout = 60000; // 单位:毫秒 ocrClient.Timeout = 60000;
读取图片为字节数组
(API 要求的统一输入格式):
// 方式1:直接读取(可能锁定文件,适合简单场景) byte[] imageBytes = File.ReadAllBytes("图片路径.jpg"); // 方式2:流读取(避免文件锁定,推荐生产环境) using (var stream = new FileStream("图片路径.jpg", FileMode.Open, FileAccess.Read)) { byte[] imageBytes = new byte[stream.Length]; stream.Read(imageBytes, 0, imageBytes.Length); }调用 API 并解析结果:根据识别类型调用对应方法,从返回的
JObject中提取结果(需引用Newtonsoft.Json.Linq)。
二、各功能调用示例(含参数配置)
1. 植物识别(无可选参数)
// 1. 调用API var result = classifyClient.PlantDetect(imageBytes); // 2. 解析结果 if (result.ContainsKey("result") && result["result"] is JArray plantList) { foreach (JObject plant in plantList) { string name = plant["name"]?.ToString() ?? "未知植物"; double score = plant["score"]?.ToObject<double>() ?? 0; Console.WriteLine($"植物:{name},相似度:{score:F2}"); } }2. 车辆识别(带 top_num 参数)
// 1. 配置可选参数(只返回前3个相似度最高的结果) var carOptions = new Dictionary<string, object> { {"top_num", 3} }; // 2. 调用API var result = classifyClient.CarDetect(imageBytes, carOptions); // 3. 解析结果 if (result.ContainsKey("result") && result["result"] is JArray carList) { foreach (JObject car in carList) { string name = car["name"]?.ToString() ?? "未知车辆"; double score = car["score"]?.ToObject<double>() ?? 0; Console.WriteLine($"车辆:{name},相似度:{score:F2}"); } }3. 车牌识别(带 multi_detect 参数)
// 1. 配置可选参数(允许识别图片中的多个车牌) var plateOptions = new Dictionary<string, object> { {"multi_detect", "true"} }; // 2. 调用API(注意使用Ocr客户端) var result = ocrClient.LicensePlate(imageBytes, plateOptions); // 3. 解析结果(结果存在于"words_result"节点) if (result.ContainsKey("words_result") && result["words_result"] is JArray plateList) { foreach (JObject plate in plateList) { string colorCode = plate["color"]?.ToString() ?? "unknown"; string color = colorCode == "blue" ? "蓝色" : colorCode == "yellow" ? "黄色" : "未知"; string number = plate["number"]?.ToString() ?? "未知号码"; Console.WriteLine($"车牌:{color}({number})"); } }4. 菜品识别(带 top_num 参数,结果含卡路里)
// 1. 配置可选参数(只返回前4个菜品结果) var dishOptions = new Dictionary<string, object> { {"top_num", 4} }; // 2. 调用API var result = classifyClient.DishDetect(imageBytes, dishOptions); // 3. 解析结果(相似度字段为probability,非score) if (result.ContainsKey("result") && result["result"] is JArray dishList) { foreach (JObject dish in dishList) { string name = dish["name"]?.ToString() ?? "未知菜品"; string calorie = dish["calorie"]?.ToString() ?? "未知"; double probability = dish["probability"]?.ToObject<double>() ?? 0; Console.WriteLine($"菜品:{name},卡路里:{calorie}/100g,相似度:{probability:F2}"); } }三、关键注意事项
客户端与功能对应:
植物、动物、车辆、菜品识别必须使用
ImageClassify客户端。车牌识别必须使用
Ocr客户端,混用会导致 API 调用失败。
结果字段差异:
植物、动物、车辆的相似度字段为
"score"。菜品的相似度字段为
"probability"(百度 API 设计差异,需特别注意)。车牌识别的结果节点为
"words_result",其他功能为"result"。
参数值类型:
可选参数的值需为
object类型,如top_num传3(int),multi_detect传"true"(string),需严格按照百度 API 文档要求传值。
异常处理:
调用 API 前需确保图片文件存在且可读,避免
IOException。网络异常(如无网络、超时)或 API 错误(如密钥无效、图片过大)会抛出
Exception,需通过try-catch捕获并提示用户。