如何用C#调用Azure计算机视觉API实现发票‘售卖了什么’问答?
解决C#调用Azure计算机视觉实现发票图片问答功能的问题
你之前用Web前端实现的是**视觉问答(VQA)**功能,而当前代码调用的是对象检测(Objects)接口,这两个功能完全不同,所以无法得到期望的结果。以下是正确的C#实现步骤:
核心思路
使用Azure计算机视觉的视觉问答API,直接传入图片和问题“What was sold”,API会返回对应答案,无需手动解析对象。
完整代码示例
using System; using System.IO; using System.Threading.Tasks; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models; class Program { static async Task Main(string[] args) { // 替换为你的订阅密钥和端点 string subscriptionKey = "你的订阅密钥"; string endpoint = "你的端点URL"; // 初始化客户端 var client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint }; // 图片路径(注意C#路径需用@转义或双反斜杠) string imagePath = @"C:\Users\Trevo\Pictures\Yacht\img_20220709_125430.jpg"; // 定义视觉问答参数:传入问题和图片流 using Stream imageStream = File.OpenRead(imagePath); var vqaParams = new VisualQuestionAnsweringParameters() { Question = "What was sold", Image = imageStream }; // 调用视觉问答API var vqaResult = await client.GenerateAnswerAsync(vqaParams); // 输出结果 if (vqaResult.Answers != null && vqaResult.Answers.Count > 0) { // 取置信度最高的答案 var bestAnswer = vqaResult.Answers[0]; Console.WriteLine($"售卖商品及价格:{bestAnswer.Answer}"); Console.WriteLine($"置信度:{bestAnswer.Confidence:P2}"); } else { Console.WriteLine("未识别到有效答案"); } } }
关键注意事项
- API接口选择:必须使用
GenerateAnswerAsync方法,而不是AnalyzeImageInStreamAsync的Objects特征,因为VQA是专门处理图文问答的功能。 - 路径转义:C#中本地路径需要用
@前缀避免转义,或者把\替换为\\。 - 权限验证:确保你的Azure计算机Vision资源订阅包含视觉问答功能(大部分付费 tier 都支持)。
- 异步调用:代码需在async方法中执行,比如Main方法标记为
async Task。
内容的提问来源于stack exchange,提问作者Trevor Daniel
相关产品推荐
相关产品推荐

