1. 主页 > 币圈百科

币看智能交易(一分钟了解货币)


欧易(OKX)交易所 - 全球顶尖数字货币交易平台

注册立即 领取价值高达 6,0000 元的数字货币盲盒,邀请码:vip1234,享受 20%手续费减免。

欧易注册 APP下载

一.需求说明

随着国家越来越强大,我们普通人接触外币的机会越来越多,但是外币实在太多了。这是哪个国家的货币,价值多少?一般人真的分辨不出来,但是通过百度的【货币识别】技术,我们足不出户分分钟就能识别出货币类型。

二、攻略的使用

注:本文采用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

联系我们

在线咨询:点击这里给我发消息

微信号:AB100082

工作日:9:30-18:30,节假日休息