4表制、調(diào)用模型得到模型分析后的結(jié)果
1撩炊、在之前的項(xiàng)目基礎(chǔ)上放仗,添加一個(gè)文件夾 ModelService , 這個(gè)文件夾里面會(huì)放我們調(diào)用預(yù)測的服務(wù)
添加一個(gè)文件夾
2抑党、添加一個(gè)類 KouzhaoService 包警,用于我們 調(diào)用預(yù)測模型(我們在這里叫他口罩預(yù)測服務(wù))
添加一個(gè)類
添加類 KouzhaoService
3、上核心代碼
public class KouzhaoService
{
/// <summary>
/// 獲取預(yù)測結(jié)果
/// </summary>
/// <param path="">需要預(yù)測的圖片地址</param>
/// <returns></returns>
public string GetPredictionResult(string path)
{
// 創(chuàng)建樣例數(shù)據(jù)的單個(gè)實(shí)例對模型輸入數(shù)據(jù)集的第一行
ModelInput sampleData = new ModelInput()
{
ImageSource = path,
};
// 獲取預(yù)測結(jié)果
var predictionResult = ConsumeModel.Predict(sampleData);
return predictionResult.Prediction;
}
}
3.1 完整代碼:
using KouzhaoML.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace kouzhaowebapi.ModelService
{
public class KouzhaoService
{
/// <summary>
/// 獲取預(yù)測結(jié)果
/// </summary>
/// <param path="">需要預(yù)測的圖片地址</param>
/// <returns></returns>
public string GetPredictionResult(string path)
{
// 創(chuàng)建樣例數(shù)據(jù)的單個(gè)實(shí)例對模型輸入數(shù)據(jù)集的第一行
ModelInput sampleData = new ModelInput()
{
ImageSource = path,
};
// 獲取預(yù)測結(jié)果
var predictionResult = ConsumeModel.Predict(sampleData);
return predictionResult.Prediction;
}
}
}
4底靠、返回到我們 webapi 中調(diào)用這個(gè)預(yù)測
核心代碼:
new KouzhaoService().GetPredictionResult(圖片路徑);
完整代碼:
using KouzhaoML.Model;
using kouzhaowebapi.ModelService;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace kouzhaowebapi.Controllers
{
[ApiController]
public class DiscernController : ControllerBase
{
/// <summary>
/// 上傳文件:口罩驗(yàn)證
/// </summary>
/// <param name="stream"></param>
/// <param name="fileName"></param>
[HttpPost("upload")]
[Route("api/discern/kouzhao")]
public object UploadFile([FromForm] IFormCollection collection)
{
//申明返回的結(jié)果
string result = "";
FormFileCollection filelist = (FormFileCollection)collection.Files;
//檢查是否有文件提交上來
if (filelist != null && filelist.Any())
{
//我們只做第一個(gè)文件的檢查
IFormFile file = filelist[0];
//做隨機(jī)數(shù)害晦,用到文件夾名字上,防重名
Random random = new Random();
string r = "";
int i;
for (i = 1; i < 11; i++)
{
r += random.Next(0, 9).ToString();
}
//文件路徑
string Tpath = "/file/";
string name = file.FileName;
string FileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + r;
string FilePath = @"C:\" + Tpath;
//獲取文件類型
string type = System.IO.Path.GetExtension(name);
DirectoryInfo di = new DirectoryInfo(FilePath);
if (!di.Exists)
{
di.Create();
}
//文件保存的路徑
var filefullname = FilePath + FileName + type;
using (FileStream fs = System.IO.File.Create(filefullname))
{
// 復(fù)制文件
file.CopyTo(fs);
// 清空緩沖區(qū)數(shù)據(jù)
fs.Flush();
fs.Close();
fs.Dispose();
}
//成功提示賦值到返回結(jié)果中
result = "文件上傳成功";
//調(diào)用預(yù)測模型暑中,將結(jié)果賦值到 result 變量中壹瘟,該變量會(huì)作為結(jié)果返回出去
result = new KouzhaoService().GetPredictionResult(filefullname);
}
return result;
}
}
}
5鲫剿、接下來運(yùn)行項(xiàng)目,我們使用控制臺(tái)界面運(yùn)行項(xiàng)目稻轨。按 F5 運(yùn)行項(xiàng)目后灵莲,得到下面的情況,就代表程序啟動(dòng)了
運(yùn)行時(shí)的圖片
6殴俱、使用 Postman 測試上傳圖片
post上傳圖片
選擇圖片
點(diǎn)擊send按鈕
測試結(jié)果1政冻,沒戴口罩
接下來我們再去放一張戴口罩的照片
測試戴口罩的照片
點(diǎn)擊send按鈕
預(yù)測戴口罩成功
到這里就是 調(diào)用模型得到模型分析后的結(jié)果 的全部內(nèi)容了,后續(xù)會(huì)繼續(xù)出如何接入微信公眾號的 過程
歡迎進(jìn)qq群交流:704028989