资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

(已拆分)EasyDL专业版-图像分类快速开始

EasyDL专业版图像分类Quickstart

快速开始

原材料采购网站图像分类场景

各种互联网内容平台或者电商平台中每天都会通过线上抓取、UGC等途径在网站中更新内容,内容可能包括图像、文字、视频等多种形式。当网站中主要的呈现数据形式为图片时,往往需要以不同分类、不同标签的形式将图片内容更好的展现给网站用户。而目前不少内容平台越来越趋于垂直化,打标签的结果往往需要定制。

某个原材料采购平台,网站内容上存在石料、金属等原材料商品的展示,为了将商品内容自动打标签减少人工后台审核和整理的成本,希望通过AI服务来解决。该企业用户有相关AI算法工程师,为追求高效开发和更高准确率的模型效果,该服务商发现百度大脑EasyDL推出专业版,可以更好满足其需求。下文将以该场景为案例介绍如何快速使用EasyDL专业版获取定制AI服务。

实现步骤

只需四步即可使用EasyDL专业版完成AI模型的训练,以及将模型以云端API形式发布并集成在自有网站中使用。

Step1:成为百度AI开放平台的开发者

要调用百度EasyDL定制化图像分类能力先要成为百度AI开放平台的开发者,首先让我们花5分钟来注册百度AI开放平台的开发者 (如果您已经是开发者可跳过此步骤)

先点击此处注册百度账户进入 如下图 的页面快速的建立一个百度账号吧。

图片

Step2:提前准备训练数据

图像分类需要提供每个材质分类的图片作为训练数据,我们看下两个分类的图片,金属的图片以及石材的图片:

  • 金属
  • 图片

图片

  • 石材

图片

图片

图片数量越多理论上训练的效果就越好,图像分类的每一类图片数据理建议不低于20张图片 注意图片需要为业务生产的真实环境所采集的图片,与真实场景越贴近,训练模型效果越佳

Step3:使用EasyDL专业版训练图像分类模型

我们有账号之后可以在EasyDL官网登录,并且进入专业版模型定制 操作页面

图片

创建项目,填写项目信息,并且选择图像分类服务

图片

图片

在创建模型之前,我们需要上传我们之前准备好的原始图片,我们先点击菜单 创建数据集 创建一个数据集

图片

接下来我们针对这个创建完成的数据集上传图片

图片

图片

上传完成后进行图片的标注

图片

标注的过程需要在右侧建立标签,然后右侧相应的标签标识图片类型,最后点击完成。

图片

在我们将所有的图片都进行标注完成后,我们可以使用这个数据集来创建模型了,点击左上角度的新建任务新建一个高级版任务

图片

在任务配置的页面,我们先选择我们刚刚标注完的数据集,把需要添加的数据集添加到右侧框内。

图片

然后我们可以选择高级版特有的模型网络,这里我们可以选择不同的网络测试效果

图片

选择完每个网络后,都会生成一份专属的模型的Python格式的配置代码,我们可以在网页编辑器中直接编辑代码,为了确保训练成功,我们必须遵循页头注释代码的注意事项

图片

之后完成模型的创建,提交训练任务后等待一段时间的训练,在进行下一步之前我们需要等待模型的训练完成

图片

等待训练完成后我们可以在列表中看到模型的效果指标数据,我们可以先选择发布云服务以及离线服务将训练好的模型进行发布。 这里我们先选择发布云服务

图片

发布云服务需要我们输入一个在线服务地址,之后会用来生成在线服务调用地址

图片

发布完成后我们可以通过云服务的 服务详情 按钮查看服务地址

图片

接下来为了能够安全的使用刚刚创建的在线服务,我们点击立即使用,跳转到百度云控制台创建一个应用

图片

填写信息创建完成后,我们需要查看API KEY 以及 Secret KEY,之后在调用在线服务的时候需要它们,至此我们完成了模型的创建训练工作,之后让我们用一些简单的客户端代码来调用这个服务

Step4: 通过使用在线API测试所训练的模型效果

第三步最后API KEY 以及 Secret KEY,以及第二步的数据,我们就可以写一个示例代码调用我们之前创建并训练完成的自定义材质分类模型

准备开发环境

我们选择用python来快速搭建一个原型,如果没有接下来需要安装以下python。可以参考下表列出的不同操作系统的安装方法进行安装。

Python的官方下载地址:下载python

Windows 快速测试包

windows平台的用户如果对上述的python安装感到困难,可以下载我们的一键测试包,下载地址:windows测试包

解压zip文件后,双击run.bat即可测试。

编写代码

新建一个 main.py

粘贴以下内容,不要忘记替换你的 API_KEY 以及 SECRET_KEY

# coding=utf-8

import sys
import json
import base64


# 保证兼容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

# 百度云控制台获取到ak,sk以及
# EasyDL官网获取到URL

# ak
API_KEY = 'fj71jwS9N5Kp1cdme0m7ILdB'

# sk
SECRET_KEY = '8TYQXdL536asDLVZtk01CSGnzbd3UVpN'

# url
EASYDL_PRO_CLASSIFY_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom_pro/v1/classification/material_classific"

"""  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):
    if IS_PY3:
        req = Request(url, json.dumps(data).encode('utf-8'))
    else:
        req = Request(url, json.dumps(data))
        
    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)


if __name__ == '__main__':

    # 获取access token
    token = fetch_token()

    # 拼接url
    url = EASYDL_PRO_CLASSIFY_URL + "?access_token=" + token

    filename = "test_image.jpg"

    file_content = read_file(filename)

    if IS_PY3:
        image_data = str(base64.b64encode(file_content), "UTF8")
    else:
        image_data = base64.b64encode(file_content)

    # 请求接口
    response = request(url, 
        {
            'image': image_data,
            'top_num': 5
        })

    result_json = json.loads(response)

    result = result_json["results"]
    if len(result) == 0:
        print("无法识别到结果")
    else:
        for item in result:
            print("置信度:" + str(item['score']) + "    类别名称:" + item['name'])

运行代码

在命令行中运行python main.py

您还可以在我们的github地址中找到main.py

结果

图片

若代码正确运行,命令行界面上会显示出运行结果:

置信度:0.9797531366348267    类别名称:metal
置信度:0.020246895030140877    类别名称:stone

结果中返回了识别出类别(金属材质),置信度, 更详细的参数和返回结果描述可以查看API文档EasyDL专业版 图像分类API参考文档

使用设备端离线SDK测试训练好的模型

对于没有网络等特殊情况,我们还可以使用运行在端设备上的离线模型进行识别

我们进入我的服务 查看服务列表,选择我们的材质分类模型。在上方选择设备端标签,在列表中找到我们的项目并点击操作栏中的部署

图片

在部署也没中勾选我们需要的端设备平台发布

图片

等待审批成功并发布完成后我们在我的服务的设备端部分点击服务详情 查看和下载各类平台的sdk和示例程序,我们还可以直接用安装或者iOS手机扫码下载示例程序测试

图片

WINDOWS离线SDK使用示例

服务详情中选择windows -》 下载SDK -》基础版本SDK -》通用X86版,并且点击获取序列号进入获取序列号页面,获取序列号

图片

获取序列号 图片

解压并且打开下载包,启动exe文件,在Serial Num框里填写上一部获取到的序列号(格式为xxxx-xxxx-xxxx-xxxx)后点击『启动服务』按钮

图片

启动成功后我们就可以在没有网络的情况下访问本地地址调用图像分类服务了,下面我们写一个简单的python示例:

# coding=utf-8
import requests

with open('./test.jpg', 'rb') as f:
    img = f.read()

result = requests.post('http://127.0.0.1:24401/', params={'threshold': 0.1},
                                                  data=img).json()

results = result["results"]

if len(results) == 0:
    print("图片中未识别到结果")
else:
    for obj in results:
        print(obj)

在sdk的exe目录中创建一个demo.py并且粘贴上面的代码,并且把需要预测的图片放到目录中,在命令行中执行

python37\python demo.py

您还可以在我们的github地址中找到demo.py,以及我们为您准备好的test.jpgdemo.bat, 请拷贝到sdk目录中直接双击demo.bat即可,我们来看看调用结果:

图片

在没有网络的情况下我们可以得到和在线API相同的识别结果

了解更多

除上文提到的场景外,EasyDL(经典版/专业版/零售版)还有更多的AI定制化能力用于满足各个行业的各种场景,您可以点击这里 了解更多

示例源代码

您可以在我们的官方github上下载示例源码

https://github.com/Baidu-AIP/QuickStart/tree/master/EASYDL-PRO-CLASSIFY

快速体验

我们提供了上述案例的官方android手机演示app下载地址,安装完成即可快捷方便的体验手机端的图像分类模型效果

图片

Android APP下载二维码:

图片

测试图片原图:图片

产品特色

一站式AI服务:

EasyDL提供围绕AI服务开发的端到端的一站式AI开发和部署平台,包括数据上传、数据标注、训练任务配置及调参、模型效果评估、模型部署,同时EasyDL面向不同用户提供了不同的训练平台,包括适用AI零基础或追求高效率开发的用户使用的经典版、适用AI初学者和AI专业用户使用的专业版、专为零售行业客户提供的零售版三种平台级方案,方便各类企业用户及个人开发者使用。

高精度模型效果:

EasyDL基于基于Paddle Paddle飞桨深度学习框架构建而成,内置丰富百度用户百亿级大数据训练的成熟预训练模型,底层结合百度自研的AutoDL/AutoML技术,基于少量数据就能获得出色效果和性能的模型。

丰富的服务部署方式:

EasyDL模型训练阶段需要在线训练。训练完成后,可将模型部署在公有云服务器、私有本地服务器,封装成可离线运行的设备端SDK,或直接购买软硬一体方案,有效应对各种业务场景对模型部署要求。

完善安全的数据服务:

数据对于模型效果至关重要,在数据服务上,EasyDL除提供基础的数据上传、存储、标注外,额外提供线下采集及标注支持、智能标注、多人标注、云服务数据管理等多种数据管理服务,大幅降低企业用户及开发者的训练数据处理成本,有效提高标注效率。

更多参考

百度EasyDL平台简介

如何获取API Key及Secret Key