using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WPFMediaKit.DirectShow.Controls;
namespace BaiDuDishDemo
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
public string APP_ID { get; set; }
public string API_KEY { get; set; }
public string SECRET_KEY { get; set; }
public Baidu.Aip.ImageClassify.ImageClassify BaiduAipClient { get; set; }
public Baidu.Aip.Ocr.Ocr BaiduAipOcrClient { get; set; }
public Baidu.Aip.BodyAnalysis.Body BaiduAipBodyClient { get; set; }
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
APP_ID = "24045911";
API_KEY = "zcHzMCd0lUGK9WXRlWl79iGL";
SECRET_KEY = "VG45PUqGIuZhB0keehEPGIxSzaQrqPyH";
BaiduAipClient = new Baidu.Aip.ImageClassify.ImageClassify("Kx0CSX3f1l1LqNr7sXfxFRcc", "rVCmfYOsZWQfQRYu1LqzBad7IeCgeEhc");
BaiduAipOcrClient = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
BaiduAipBodyClient = new Baidu.Aip.BodyAnalysis.Body(API_KEY, SECRET_KEY);
BaiduAipClient.Timeout = 60000; // 修改超时时间
//if (MultimediaUtil.VideoInputDevices.Any())
//{
// mediaCapVideo.VideoCaptureDevice = MultimediaUtil.VideoInputDevices[0];
// mediaCapVideo.Play();
//}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
openFileDialog.Filter = "png文件(.png)|*.png|所有文件|*.*";
if (openFileDialog.ShowDialog() == true)
{
var image = File.ReadAllBytes(openFileDialog.FileName);
switch (((Button)sender).Name)
{
case "btn_rk":
// 自定义菜品识别-入库,可能会抛出网络等异常,请使用try/catch捕获
var vrief = $"{{\"Name\":\"{txt_Name.Text}\"}}";
var result = BaiduAipClient.Dishadd(image, vrief);
txt_Result.Text = result.ToString();
break;
case "btn_cx":
// 自定义菜品识别-检索,可能会抛出网络等异常,请使用try/catch捕获
DishSearch.DishSearchResult _DishSearchResult = Newtonsoft.Json.JsonConvert.DeserializeObject(BaiduAipClient.DishSearch(image).ToString());
txt_Result.Inlines.Clear();
for (int i = 0; i < _DishSearchResult.result.Length; i++)
{
Run run = new Run($"菜品名称:{_DishSearchResult.result[i].dishes[0].brief} 匹配度:{_DishSearchResult.result[i].dishes[0].score.ToString("P")}\r\n");
txt_Result.Inlines.Add(run);
}
break;
case "btn_Car":
// 如果有可选参数
var options = new Dictionary
{
{"top_num", 2},
{"baike_num", 0}
};
// 带参数调用车辆识别
result = BaiduAipClient.CarDetect(image, options);
txt_Result.Text = result.ToString();
// 如果有可选参数
options = new Dictionary
{
{"multi_detect", "true"}
};
// 带参数调用车牌识别
result = BaiduAipOcrClient.LicensePlate(image, options);
txt_Result.Text = txt_Result.Text + "\r\n" + result.ToString();
break;
case "btn_Face":
//var dynamic = "true";
//// 调用人流量统计-动态版,可能会抛出网络等异常,请使用try/catch捕获
// result = BaiduAipClient.BodyTracking(image, dynamic);
//Console.WriteLine(result);
//// 如果有可选参数
// options = new Dictionary
//{
// {"case_id", 123},
// {"case_init", "123"},
// {"show", "true"},
// {"area", "100"}
//};
//// 带参数调用人流量统计-动态版
//result = BaiduAipClient.BodyTracking(image, dynamic, options);
//Console.WriteLine(result);
break;
default:
// 如果有可选参数
options = new Dictionary
{
{"top_num", 2},
{"filter_threshold", "0.7"},
{"baike_num", 0}
};
// 带参数调用菜品识别
DishResult Dishresult = Newtonsoft.Json.JsonConvert.DeserializeObject(BaiduAipClient.DishDetect(image, options).ToString());
txt_Result.Inlines.Clear();
for (int i = 0; i < Dishresult.result_num; i++)
{
Run run = new Run($"菜品名称:{Dishresult.result[i].name}\r\n可信度:{Dishresult.result[i].probability}\r\n");
txt_Result.Inlines.Add(run);
}
break;
}
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit(); //给BitmapImage对象赋予数据的时候,需要用BeginInit()开始,用EndInit()结束
bitmapImage.UriSource = new Uri(openFileDialog.FileName);
bitmapImage.DecodePixelWidth = 320; //对大图片,可以节省内存。尽可能不要同时设置DecodePixelWidth和DecodePixelHeight,否则宽高比可能改变
bitmapImage.EndInit();
img_Dish.Source = bitmapImage;
}
}
}
}