python学习笔记11 百度识图

这个算是一个免费给百度打的广告吧,百度智能云里面有个百度识图接口,简介如下,只要有百度账号就能申请,每天500次免费调用,我无意中点进去的,就当是记录一下。

EasyDL是百度大脑推出的定制化AI训练及服务平台,支持面向各行各业有定制AI需求的企业用户及开发者使用。支持从数据管理与数据标注、模型训练、模型部署一站式AI开发流程,通过原始图片、文本、音频、视频类数据经过EasyDL加工、学习、部署可发布为公有云API、设备端SDK、本地化部署及软硬一体产品。

使用方法:
1.注册百度账号后进入百度ai开放平台,登录图像识别控制台,创建一个app,接口相关信息就有了。
2.代码

# coding=utf-8

import sys
import json
import base64
import os


# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
    from urllib.request import urlopen
    from urllib.request import Request
    from urllib.error import URLError
    from urllib.parse import urlencode
    from urllib.parse import quote_plus
else:
    import urllib2
    from urllib import quote_plus
    #from urllib2 import urlopen
    #from urllib2 import Request
    #from urllib2 import URLError
    from urllib import urlencode

# 防止https证书校验不正确
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

API_KEY = '这里填你的api key'

SECRET_KEY = '一样,secret key'

#这里填你图像识别要调用的接口,我这里用的是图片通用识别
#会把图片里所有信息都识别出来,试了下感觉能有50-60%的正确识别率
IMAGE_RECOGNIZE_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general"

#获取token的url,这个应该是固定的
"""  TOKEN start """
TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'


"""
    获取token
"""
def fetch_token():
    params = {'grant_type': 'client_credentials',
              'client_id': API_KEY,
              'client_secret': SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode('utf-8')
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req, timeout=5)
        result_str = f.read()
    except URLError as err:
        print(err)
    if (IS_PY3):
        result_str = result_str.decode()

    result = json.loads(result_str)

    if ('access_token' in result.keys() and 'scope' in result.keys()):
        if not 'brain_all_scope' in result['scope'].split(' '):
            print ('please ensure has check the  ability')
            exit()
        return result['access_token']
    else:
        print ('please overwrite the correct API_KEY and SECRET_KEY')
        exit()

"""
    读取文件
"""
def read_file(image_path):
    f = None
    try:
        f = open(image_path, 'rb')
        return f.read()
    except:
        print('read image file fail')
        return None
    finally:
        if f:
            f.close()

"""
    调用远程服务
"""
def request(url, data):
    req = Request(url, data.encode('utf-8'))
    has_error = False
    try:
        f = urlopen(req)
        result_str = f.read()
        if (IS_PY3):
            result_str = result_str.decode()
        return result_str
    except  URLError as err:
        print(err)

"""
    调用菜品识别接口并打印结果
"""
def print_result(filename, url):
    # 获取图片,我这里用的是桌面的一个文件夹,遍历里面的jpg来识别。
    for root,dir,filenames in os.walk(r"C:\Users\abc\Desktop\新建文件夹"):
        for filename in filenames:
         if filename.endswith(".jpg"):
            filename=os.path.join(root,filename)
            file_content = read_file(filename)
            print(filename)
            response = request(url, urlencode(
                {
                    'image': base64.b64encode(file_content),
                    'top_num': 1
                }))
            result_json = json.loads(response)

            # 打印图片结果
            for data in result_json["result"]:
                print(u"  菜品名称: " + data["keyword"])
                if data['root']:
                    print(u"  菜品热量: " + data["root"])

if __name__ == '__main__':

    # 获取access token
    token = fetch_token()

    # 拼接图像识别url
    url = IMAGE_RECOGNIZE_URL + "?access_token=" + token

    # 菜品图1
    print("菜品1")
    print_result("./food1.jpg", url)

    # 菜品图3
    print("菜品2")
    print_result("./food2.jpg", url)

    # 菜品图3
    print("菜品3")
    print_result("./food3.jpg", url)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值