EasyDL使用初探

EasyDL使用初探

easydl recognition   2018-11-12

用EasyDL快速搭建一个儿童图书的图像识别模型

平台地址 EasyDL定制化图像识别 http://ai.baidu.com/easydl/

我现在想训练一本20页的儿童图书, 通过随手拍一张这本图书的照片就能够识别出当前是在哪一页

新建模型我们选择图像分类

新建模型后第一步就是需要上传一定的图片用来做训练. 先把图书的各个页面进行拍照, 也可以录视频然后切帧为图片. 按以下目录结构打个包上传就行.

每个文件夹的名字就是分类标签的名字, 里面所有的图片都应该是源自同一个页面内容, 示例如下

上传数据集后会自动生成标签, 并归集图片. 后续可以继续在这个基础上补充图片.

一般20张图片就够了, 但是为了训练更精准, 我平均每页准备了400张图片, 某些比较复杂的页面我用了1000+的图片. 这些图片主要是拍各个不同角度的视频然后每隔50ms切帧得到的.

训练参数很简单, 勾选快速训练就行, 其他全部默认. 然后在参与训练的分类后面添加我们刚刚上传的数据集就可以开始训练了.

训练需要花点时间, 200张图片一个小时内就能完成. 我上传了7000+图片, 大概花了6个小时.

训练好了模型后就可以线上校验, 随便拍几张看看置信度怎么样. 如果对预测的分类和置信度不太满意, 可以在数据集里面补充数据再训练一下.

我这边训练的模型基本能预测正确, 置信度也能达到90%+

发布模型后会给个接口地址. 百度审核后才能用. 等一天就行.

easydl-sdk.js

'use strict';

let request = require('request');
let bdAccessToken = require('./bd-access-token');

let token;
bdAccessToken(function (accessToken) {
    token = accessToken;
});

module.exports = function (data, callback) {

    let fd = {
        'top_num': 3,
        'image': data
    };

    request.debug = true;
    request({
        method: 'POST',
        // 发布模型时申请的地址
        url: 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/xxxx?access_token=' + token,
        json: true,
        body: fd,
        timeout: 5000
    }, callback);
};

bd-access-token.js

let request = require('request');

let params = {
    'grant_type': 'client_credentials',
    'client_id': 'xxx',  // 在百度开发者注册的应用id
    'client_secret': 'xxx'   // 应用的secret_key
};

let accessToken;

module.exports = function (callback) {
    if (accessToken) {
        callback(accessToken);
        return;
    }

    request.get({
        url: 'https://aip.baidubce.com/oauth/2.0/token',
        qs: params
    }, function (e, r, body) {
        if (e) {
            console.error("ACCESS_TOKEN get failed:", e);
            return;
        }
        console.log("ACCESS_TOKEN:", body);
        let json = JSON.parse(body);
        accessToken = json.access_token;
        callback(accessToken);
    });
};

demo.js

let easydl = require('./easydl-sdk');

let data = "xxxxxxx"; // 图片base64编码后的字符串
easydl(data, function(e, r, b) {
    console.log(e, b);
});

总的来说EasyDL上手很快. 如果只需要做简单的图像识别非常容易实现, 而且免费.

相关限制:

  • 标签上限1000
  • 图片上传上线100000
  • QPS, 2, 每日pv 500

如果需要提高这些限制, 需要联系百度的人. 学习测试使用基本是够用了.