zoukankan      html  css  js  c++  java
  • 果蔬识别轻松帮你区分车厘子与大樱桃

    曾经一张车厘子的照片刷爆朋友圈,有一种财务自由叫车厘子自由!


    网友哭了:我只能买一颗回去尝尝……
    又快到了车厘子和樱桃的季节,很多人面对车厘子和大樱桃傻傻分不清楚,这两种水果看起来十分相近,但价格差别巨大,60元/斤的进口“车厘子”和15元/斤的中国“大樱桃”,有啥区别?肉眼分不清楚,交给百度Ai吧。

    一.平台接入

    此步骤比较简单,不多阐述。可参照之前文档:

    https://ai.baidu.com/forum/topic/show/943028

    二.分析接口文档

    1. https://ai.baidu.com/docs#/ImageClassify-API/f0fe4219

       (1)接口描述

    该请求用于识别果蔬类食材,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的果蔬食材结果。 

    (2)请求说明

    需要用到的信息有:

    请求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/classify/ingredient

    Header格式:Content-Type:application/x-www-form-urlencoded

    请求参数:image, 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 。注意:图片需要base64编码、去掉编码头后再进行urlencode。

    (3)返回示例

       {'log_id': 7884358602702161307,

     'result': [{'name': '车厘子', 'score': 0.60600465536118},

                {'name': '大樱桃', 'score': 0.35849434137344},

                {'name': '樱桃', 'score': 0.022074541077018},

                {'name': '黑珍珠樱桃', 'score': 0.0061983447521925},

                {'name': '黑樱桃', 'score': 0.0045025632716715}],

     'result_num': 5}

    2.获取accesstoken

    #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.decode("utf-8"))
    token_key = token_info['access_token']
    return token_key
    三.识别结果

     1.车厘子

    识别结果:  {'score': 0.60600465536118, 'name': '车厘子'}

    2.大樱桃

    识别结果:  {'score': 0.66473871469498, 'name': '大樱桃'}

    四.源码共享

    # -*- coding: utf-8 -*-
    
    #!/usr/bin/env python
    
    
    
    import os
    
    import requests
    
    import base64
    
    import json
    
    from pprint import pprint
    
    import time
    
    #client_id 为官网获取的AK, client_secret 为官网获取的SK
    
    api_key = '**************'
    
    secret_key = '********************'
    
    
    
    class LandmarkRecognizer(object):
    
        def __init__(self, api_key, secret_key):
    
            self.access_token = self._get_access_token(api_key=api_key, secret_key=secret_key)
    
            self.API_URL = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/classify/ingredient' + '?access_token=' 
    
                          + self.access_token
    
        #获取token
    
        @staticmethod
    
        def _get_access_token(api_key, secret_key):
    
            api = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' 
    
                '&client_id={}&client_secret={}'.format(api_key, secret_key)
    
            rp = requests.post(api)
    
            if rp.ok:
    
                rp_json = rp.json()
    
    #            print(rp_json['access_token'])
    
                return rp_json['access_token']
    
            else:
    
                print('=> Error in get access token!')
    
        def get_result(self, params):
    
            rp = requests.post(self.API_URL, data=params)
    
            if rp.ok:
    
    #            print('=> Success! got result: ')
    
                rp_json = rp.json()
    
                pprint(rp_json)
    
                return rp_json
    
            else:
    
                print('=> Error! token invalid or network error!')
    
                print(rp.content)
    
                return None
    
        #果蔬识别
    
        def detect(self, img_path):
    
            f = open(img_path, 'rb')
    
            strover = '识别结果:'
    
            img_str = base64.b64encode(f.read())
    
            params = {'image': img_str}
    
            tic = time.clock()
    
            rp_json = self.get_result(params)
    
            toc = time.clock()
    
          
    
            result = rp_json['result']
    
            strover += '  {} 
     '.format(result[0])
    
            print(strover)
    
            print('花费时长: '+'%.2f'  %(toc - tic) +' s')
    
    
    
    if __name__ == '__main__':
    
        recognizer = LandmarkRecognizer(api_key, secret_key)
    
        img = 'F:paddleyt2.jpg'
    
        recognizer.detect(img)

    作者:wangwei8638 
  • 相关阅读:
    echo "不允许上传该类型的文件
    php构造函数,引入数据库操作类函数
    php函数描述及例子
    php如何判断远程文件是否存在
    多线程面试题系列(16):多线程十大经典案例之一 双线程读写队列数据
    多线程面试题系列(15):关键段,事件,互斥量,信号量的“遗弃”问题
    多线程面试题系列(14):读者写者问题继 读写锁SRWLock
    多线程面试体系列(13):多线程同步内功心法——PV操作下
    多线程面试题系列(12):多线程同步内功心法——PV操作上
    多线程面试题系列(11):读者写者问题
  • 原文地址:https://www.cnblogs.com/AIBOOM/p/11236688.html
Copyright © 2011-2022 走看看