百度AI攻略:货币识别

1.需求及方案:

近两年用外币进行诈骗的案件很多。例如:2015年12月,一安徽诈骗团伙,用不值1角人民币的50印蒂(intis,秘鲁旧货币,1991年发行新货币后已停止流通,目前无货币价值,仅有"收藏"价值),在豫皖鲁苏四省行骗,却屡屡得手。该团伙今年以来已诈骗20多起,至12月8日,警方已查明落实了6起,骗款达20多万元。

同时随着我国经济的发展,出国旅游的人越来越多,在兑换货币的时候也经常有国人被骗的消息。

能否开发一款方便的应用,借AI的力量,给大家一双慧眼呢?正好现在百度推出了货币识别API(百度货币识别,识别图像中的货币类型,返回货币名称、代码、面值、年份信息,可识别百余种国内外常见货币。),我在这个基础上集成其他API,开发了这个货币估值及防诈骗的应用。

以下为具体方案:

2.平台接入

货币识别接入网址:https://ai.baidu.com/tech/imagerecognition/currency 现在需要进行邀测申请。

具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了:

http://ai.baidu.com/forum/topic/show/943327

3.货币识别调用攻略(Python3)

3.1首先认证授权:

在开始调用任何API之前需要先进行认证授权,具体的说明请参考:

http://ai.baidu.com/docs#/Auth/top

具体Python3代码如下:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import base64

import json

#client_id 为官网获取的AK, client_secret 为官网获取的SK

client_id =【百度云应用的AK】

client_secret =【百度云应用的SK】

#获取token

def get_token():

    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret

    request = urllib.request.Request(host)

    request.add_header('Content-Type', 'application/json; charset=UTF-8')

    response = urllib.request.urlopen(request)

    token_content = response.read()

    if token_content:

        token_info = json.loads(token_content)

        token_key = token_info['access_token']

    return token_key

3.2 接口调用:

详细说明请参考:https://ai.baidu.com/docs#/ImageClassify-API/f3c9e21c

接口描述

识别图像中的货币类型,以纸币为主,正反面均可准确识别,接口返回货币的名称、代码、面值、年份信息;可识别各类近代常见货币,如美元、欧元、英镑、法郎、澳大利亚元、俄罗斯卢布、日元、韩元、泰铢、印尼卢比等。

说明的比较清晰,这里就不重复了。

大家需要注意的是:

API访问URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/currency

图片格式:Base64编码字符串,以图片文件形式请求时必填。(支持图片格式:jpg,bmp,png),图片大小不超过4M。最短边至少15px,最长边最大4096px。 注意:图片的base64编码是不包含图片头的

Python3调用代码如下:

#货币识别

#filename:图片名(本地存储包括路径)

def currency(filename):

    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/currency"


    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())


    params = dict()

    params['image'] = img

    params['show'] = 'true'

    params = urllib.parse.urlencode(params).encode("utf-8")

    #params = json.dumps(params).encode('utf-8')


    access_token = get_token()

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        result=data['result']

        print ('货币名称:',result['currencyName'])

        print ('货币代码:',result['currencyCode'])

        print ('货币年份:',result['year'])

        print ('货币面值:',result['currencyDenomination'])

    return result['currencyCode'],float(result['currencyDenomination']),result['year']

4.应用方案:

4.1 整体方案:

首先调用货币识别API对货币图片进行识别。

然后对货币年份及该国货币情况对比,判断是否为废币。如果为废币,提出警告。如果是流通货币调用汇率API,给出对应的人民币价值。

4.2 具体实现代码:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import base64

import json

#client_id 为官网获取的AK, client_secret 为官网获取的SK

client_id =【百度云应用的AK】

client_secret =【百度云应用的SK】

#获取token

def get_token():

    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret

    request = urllib.request.Request(host)

    request.add_header('Content-Type', 'application/json; charset=UTF-8')

    response = urllib.request.urlopen(request)

    token_content = response.read()

    if token_content:

        token_info = json.loads(token_content)

        token_key = token_info['access_token']

    return token_key

#货币识别

#filename:图片名(本地存储包括路径)

def currency(filename):

    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/currency"


    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())


    params = dict()

    params['image'] = img

    params['show'] = 'true'

    params = urllib.parse.urlencode(params).encode("utf-8")

    #params = json.dumps(params).encode('utf-8')


    access_token = get_token()

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        result=data['result']

        print ('货币名称:',result['currencyName'])

        print ('货币代码:',result['currencyCode'])

        print ('货币年份:',result['year'])

        print ('货币面值:',result['currencyDenomination'])

    return result['currencyCode'],float(result['currencyDenomination']),result['year']

import re

#调用汇率API提取汇率

def get_currency_rate(fromcurrency,tocurrency):

    fp = urllib.request.urlopen('http://webforex.hermes.hexun.com/forex/quotelist?code=FOREX'+fromcurrency+tocurrency+',&column=code,LastClose,UpdownRate&callback=ongetjsonpforex&_=1451543515359')

    html = fp.read().decode("utf-8")

    #print(html)

    fp.close()

    s = re.findall("\((.*)\)",str(html))[0]

    sjson = json.loads(s)

    rate = sjson["Data"][0][0][1]/10000

    #print (rate)

    return rate

#货币是否流通判断及对应人民币

def currency_value(filename):

    code,value,year=currency(filename)

    #对于旧秘鲁币等停止兑换的货币进行判断

    #目前只写了秘鲁币的逻辑,后续需要不断的加入其他废币的信息

    if code=='PEN':

        if year<='1991年':

            print ('已经作废不可兑换,谨防诈骗!')

            return

    if code=='DEI':

        print ('已经作废不可兑换,谨防诈骗!')

        return


    rate=get_currency_rate(code,'CNY')

    result=round(value*rate,3)

    print ('汇率(昨收盘):',rate)

    print ('对应人民币(昨收盘):',result)

    return result


currency_value('bilu1000.jpg')

5 效果测试

5.1 防诈骗

“大娘,您看这个秘鲁币老值钱了”。“大娘别信他,拿来让我看看”:

货币名称: 秘鲁新索尔

货币代码: PEN

货币年份: 1986年

货币面值: 1000

已经作废不可兑换,谨防诈骗!

“大娘,快报警!”

再来个面值更高的:

货币名称: 秘鲁印蒂

货币代码: DEI

货币年份: 1988年

货币面值: 5000

已经作废不可兑换,谨防诈骗!


5.2 正常货币确认价值

货币名称: 澳大利亚元

货币代码: AUD

货币年份: -

货币面值: 100

汇率: 4.7503

对应人民币: 475.03

货币名称: 美元

货币代码: USD

货币年份: 1993年

货币面值: 50

汇率: 6.7332

对应人民币: 336.66

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容