币看智能交易(一分钟了解货币)
一.需求说明
随着国家越来越强大,我们普通人接触外币的机会越来越多,但是外币实在太多了。这是哪个国家的货币,价值多少?一般人真的分辨不出来,但是通过百度的【货币识别】技术,我们足不出户分分钟就能识别出货币类型。
二、攻略的使用
注:本文采用C#语言,开发环境为。Net Core 2.1,并通过在线API接口实现。
(1)平台访问
登录百度AI云管理中心创建“图像识别”应用,获取“API Key”和“秘钥”:https://console.bce.baidu.com/ai/? _=1562210220636 amp;from ai=1 #/ai/图像识别/概述/索引
(2)接口文件
文件地址:https://ai.baidu.com/docs#/ImageClassify-API/51e1d249
界面描述:识别图像中的货币类型,主要是纸币,正反面都能准确识别。接口返回货币的名称、代码、面值、年份信息;能识别各种现代常用货币,如美元、欧元、英镑、法郎、澳元、俄罗斯卢布、日元、韩元、泰铢、印尼卢比等。
请求解释
请求示例
方法HTTP: POST
请求网址:https://AIP . baidubce . com/rest/2.0/image-classify/v1/currency
URL参数:
标题如下:
请求参数放在主体中。参数的详细信息如下:
请求参数
退货描述
返回参数
回到示例
{
" log_id": 4247844653395235754,
"结果":{
" currencyName": "USD ",
“has detail”:1,
“货币代码”:“美元”,
“年份”:“2001年”,
"货币面额":" 50美元"
}
}
(3)源代码共享
3.1-根据API密钥和秘密密钥获取AccessToken
///
//获取百度Access _ Token
//
//API Key
//secret Key
//
public static String getaccessstoken(String Clienti String client secret)
{
String auth host=" https://AIP . Baidu BCE . com/oauth/2.0/Token ";
http client client=new http client();
List gt;paraList=new List gt();
律师。add(new key value pair(" grant _ type "," client _ credentials "));
律师。Add(new KeyValuePair("client_id ",clientId));
律师。add(new key value pair(" client _ secret ",client secret));
httpresponse message response=client。PostAsync(authHost,new formurlencoded content(paraList))。结果;
字符串结果=响应。Content.ReadAsStringAsync()。结果;
job object jo=(job object)JSON convert。反序列化对象(结果);
string token=jo[" access _ token "]。ToString();
返回令牌;
}
3.2-调用API接口获取识别结果
1.在Startup.cs文件的configure(I application Builder App,iHosting Environment Env)方法中打开虚拟目录映射函数:
string webroot path=hosting environment。WebRootPath//wwwroot目录
app . usestatic files(new static file options
{
file provider=newphysicalfileprovider(
path.com·拜恩(webroot path," Uploads "," BaiduAIs ")),
request path="/Baidu ais "
});
2。建立Index.cshtml文件。
2.1前台代码:由于html代码不能原生显示,所以只能简单说明一下:
它主要是一种形式。需要设置属性enctype="multipart/form-data ",否则无法上传图片;
表单中有两个控件:
一个输入:type="file ",asp-for="FileUpload ",用于上传图片;
一个输入:type="submit ",asp-page-handler="Currency ",提交并返回识别结果。
一个img:src="@Model.curPath",显示需要识别的图片。一个img: src="@ model.curpath ",显示需要识别的图片。
最后,显示后台消息字符串列表信息。如果需要输出原来的Html代码,需要使用@Html。Raw()函数。
2.2背景代码:
[BindProperty]
public IFormFile FileUpload { get; set; }
private readonly IHostingEnvironment HostingEnvironment;
public List msg=new List();
public string curPath { get; set; }
public BodySearchModel(IHostingEnvironment hostingEnvironment)
{
HostingEnvironment=hostingEnvironment;
}
public async Task OnPostCurrencyAsync()
{
if (FileUpload is null)
{
ModelState.AddModelError(string.Empty, "本地图片!");
}
if (!ModelState.IsValid)
{
return Page();
}
msg=new List();
string webRootPath=HostingEnvironment.WebRootPath;//wwwroot目录
string fileDir=Path.Combine(webRootPath, "Uploads//BaiduAIs//");
string imgName=await UploadFile(FileUpload, fileDir);
string fileName=Path.Combine(fileDir, imgName);
string imgBase64=GetFileBase64(fileName);
curPath=Path.Combine("/BaiduAIs/", imgName);//需在Startup.cs 文件 的 Configure(IApplicationBuilder app, IHostingEnvironment env)方法中开启虚拟目录映射功能
string result=GetImageJson(imgBase64, “你的API KEY”, “你的SECRET KEY”);
JObject jo=(JObject)JsonConvert.DeserializeObject(result);
try
{
msg.Add("货币名称:" + jo["result"]["currencyName"].ToString());
if (jo["result"]["hasdetail"].ToString().Equals("1"))
{
msg.Add("货币代码:" + jo["result"]["currencyCode"].ToString());
msg.Add("货币面值:" + jo["result"]["currencyDenomination"].ToString());
msg.Add("货币年份:" + jo["result"]["year"].ToString());
}
}
catch(Exception e1)
{
msg.Add(result);
}
return Page();
}
///
/// 上传文件,返回文件名
///
/// 文件上传控件
/// 文件绝对路径
///
public static async Task UploadFile(IFormFile formFile, string fileDir)
{
if (!Directory.Exists(fileDir))
{
Directory.CreateDirectory(fileDir);
}
string extension=Path.GetExtension(formFile.FileName);
string imgName=Guid.NewGuid().ToString("N") + extension;
var filePath=Path.Combine(fileDir, imgName);
using (var fileStream=new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
await formFile.CopyToAsync(fileStream);
}
return imgName;
}
///
/// 返回图片的base64编码
///
/// 文件绝对路径名称
///
public static String GetFileBase64(string fileName)
{
FileStream filestream=new FileStream(fileName, FileMode.Open);
byte[] arr=new byte[filestream.Length];
filestream.Read(arr, 0, (int)filestream.Length);
string baser64=Convert.ToBase64String(arr);
filestream.Close();
return baser64;
}
///
/// 图像识别Json字符串
///
/// 图片base64编码
/// API Key
/// Secret Key
///
public static string GetImageJson(string strbaser64, string clientId, string clientSecret)
{
string token=GetAccessToken(clientId, clientSecret);
string host="https://aip.baidubce.com/rest/2.0/image-classify/v1/currency?access_token=" + token;
Encoding encoding=Encoding.Default;
HttpWebRequest request=(HttpWebRequest)WebRequest.Create(host);
request.Method="post";
request.KeepAlive=true;
string str="image=" + HttpUtility.UrlEncode(strbaser64);
byte[] buffer=encoding.GetBytes(str);
request.ContentLength=buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response=(HttpWebResponse)request.GetResponse();
StreamReader reader=new StreamReader(response.GetResponseStream(), Encoding.Default);
string result=reader.ReadToEnd();
return result;
}
三、效果测试[bind property]
public IFormFile file upload { get;设置;}
private readonly IHostingEnvironment宿主环境;
public List msg=new List();
公共字符串curPath { get设置;}
public body search model(IHostingEnvironment hosting environment)
{
hosting environment=hosting environment;
}
public async task onPostCurrencyAsync()
{
if(file upload为null)
{
ModelState。AddModelError (string.empty,"局部图片!");
}
if(!模型状态。IsValid)
{
返回页面();
}
msg=new List();
string webroot path=hosting environment。WebRootPath//wwwroot directory
string filedir=path . combine(webroot path," uploads//Baidu ais//");
string img name=await UploadFile(file upload,fileDir);
字符串文件名=路径。Combine(fileDir,img name);
string im gbase 64=getfile base 64(文件名);
curPath=Path。Combine("/BaiduAIs/",imgName);//需要在Startup.cs文件的configure(I application Builder App,iHosting Environment Env)方法中开启虚拟目录映射函数
string result=getimage JSON(imgbase 64," your API KEY "," your SECRET KEY ");
job object jo=(job object)JSON convert。反序列化对象(结果);
试试
{
msg。Add("货币名称:"+jo ["结果"] ["货币名称"]。tostring());
if(jo[" result "][" has imm(immortal是什么意思) detail "]。tostring()。equals(" 1 ")
{
msg . add("货币代码:"+jo ["result"] ["货币代码]
msg。Add("货币面值:"+jo ["结果"] ["货币废止"]。tostring());
msg。Add("货币年份:"+jo["结果"]["年份"]。ToString());
}
}
catch(异常e1)
{
msg。添加(结果);
}
返回Page();
}
//
//上传文件并返回文件名
//
//文件上传控件
//文件绝对路径
/[目录。Exists(fileDir))
{
目录。create directory(fileDir);
}
字符串扩展名=路径。GetExtension(formFile。文件名);
string imgName=Guid。NewGuid()。ToString("N") +扩展;
var filePath=Path。Combine(fileDir,img name);
使用(var fileStream=new fileStream(file path,FileMode。创建,文件访问。write))
{
await form file。CopyToAsync(fileStream);
}
return img name;
}
//
//返回图像的base64编码
//
/文件绝对路径名
///
public h/]FileStream FileStream=new FileStream(文件名,文件模式。打开);
byte[] arr=新字节[filestream。长度];
filestream。Read(arr,0,(int)filestream。长度);
string baser64=Convert。to base 64 string(arr);
filestream。close();
return base 64;
}
//
//图像识别Json string
//
//image base64 encoding
//API key
//secret key public static string GetImageJson(string str baser 64,string clientId,string client secret)
{
string token=getaccessstoken(clientId,client secret);
string host=" https://AIP . baidubce . com/rest/2.0/image-classify/v1/currency?access _ token="+token;
Encoding编码=编码。违约;
HttpWebRequest请求=(HttpWebRequest)WebRequest。创建(主机);
请求。Method=" post
请求。KeepAlive=true
string str=" image="+http utility。UrlEncode(str baser 64);
byte[] buffer=编码。GetBytes(str);
请求。内容长度=缓冲区。长度;
请求。GetRequestStream()。写(buffer,0,buffer。长度);
HttpWebResponse响应=(HttpWebResponse)请求。GetResponse();
StreamReader reader=new StreamReader(响应。GetResponseStream(),编码。默认);
字符串结果=读取器。ReadToEnd();
返回结果;
}
三。效果测试
1.页面:
2.识别结果:
2.1
2.2
2.3
2.4
2.5
四。产品建议
1.增加【货币兑换】功能:如果可以输入一个目的地货币类型,然后识别货币值,就可以显示当前兑换成目的地货币的值,功能会更加完善。
2.增加【货币真假提示】功能:对于被识别的货币类型,如果能提供一个准确的方法来判断货币真假,让普通人也能识别手中的货币,如果能通过拍照自动识别货币类型真假,那就更好玩了。
3.希望后期提供【硬币】识别功能。
原文链接:https://ai.baidu.com/forum/topic/show/953076
本文来自网络,不代表币圈之家立场,如有侵权请联系我们删除,转载请注明出处:https://www.110btc.com/baike/24504.html