using System; using System.Threading.Tasks; using System.Text.Json; using XiaoZhiSharp_MauiApp.Services; namespace XiaoZhiSharp_MauiApp.McpTools { /// /// 摄像头视觉识别工具 - 实现拍照和AI图像识别功能 /// public class CameraVision_Tool { private readonly ICameraService? _cameraService; public CameraVision_Tool(ICameraService? cameraService) { _cameraService = cameraService; } /// /// 拍照识别功能 /// /// 要询问的问题 /// 识别结果 public async Task TakePhotoAndRecognize(string question = "请描述这张图片的内容") { try { if (_cameraService == null) { return "{\"success\": false, \"message\": \"摄像头服务不可用\"}"; } if (!_cameraService.IsSupported) { return "{\"success\": false, \"message\": \"设备不支持摄像头功能\"}"; } Console.WriteLine($"开始拍照识别,问题: {question}"); // 调用摄像头服务进行拍照和识别 var result = await _cameraService.CaptureAndExplainAsync(question); Console.WriteLine($"拍照识别完成: {result}"); return result; } catch (Exception ex) { var errorMessage = $"拍照识别失败: {ex.Message}"; Console.WriteLine(errorMessage); return $"{{\"success\": false, \"message\": \"{errorMessage}\"}}"; } } /// /// 仅拍照功能 /// /// 拍照结果 public async Task TakePhoto() { try { if (_cameraService == null) { return "{\"success\": false, \"message\": \"摄像头服务不可用\"}"; } if (!_cameraService.IsSupported) { return "{\"success\": false, \"message\": \"设备不支持摄像头功能\"}"; } Console.WriteLine("开始拍照..."); var imageData = await _cameraService.CapturePhotoAsync(); if (imageData != null && imageData.Length > 0) { Console.WriteLine($"拍照成功,图片大小: {imageData.Length} bytes"); return $"{{\"success\": true, \"message\": \"拍照成功\", \"imageSize\": {imageData.Length}}}"; } else { return "{\"success\": false, \"message\": \"拍照失败或用户取消\"}"; } } catch (Exception ex) { var errorMessage = $"拍照失败: {ex.Message}"; Console.WriteLine(errorMessage); return $"{{\"success\": false, \"message\": \"{errorMessage}\"}}"; } } /// /// 设置AI识别服务 /// /// 识别服务URL /// 认证Token /// 设置结果 public string SetVisionService(string url, string token = "") { try { if (_cameraService == null) { return "{\"success\": false, \"message\": \"摄像头服务不可用\"}"; } _cameraService.SetExplainUrl(url, token); Console.WriteLine($"AI识别服务已设置: {url}"); return $"{{\"success\": true, \"message\": \"AI识别服务设置成功\", \"url\": \"{url}\"}}"; } catch (Exception ex) { var errorMessage = $"设置AI识别服务失败: {ex.Message}"; Console.WriteLine(errorMessage); return $"{{\"success\": false, \"message\": \"{errorMessage}\"}}"; } } /// /// 获取摄像头状态 /// /// 摄像头状态信息 public string GetCameraStatus() { try { if (_cameraService == null) { return "{\"success\": false, \"message\": \"摄像头服务不可用\", \"supported\": false, \"hasPermission\": false}"; } var status = new { success = true, supported = _cameraService.IsSupported, hasPermission = _cameraService.HasPermission, message = _cameraService.IsSupported ? (_cameraService.HasPermission ? "摄像头就绪" : "需要摄像头权限") : "设备不支持摄像头" }; return JsonSerializer.Serialize(status); } catch (Exception ex) { return $"{{\"success\": false, \"message\": \"获取摄像头状态失败: {ex.Message}\"}}"; } } } }