【EasyDL Pro】中草药材AI识别师

中医药发展已经上升到国家战略高度,中医药AI创新是五千年中医瑰宝的传承利器。2018年我国中药市场规模达到2700亿元,未来5年将达到2万亿元。国内原料药和制剂厂有3994家,其中中药企业2080家。中药强调“道地药材”,经调查药用植物有383科,2039属,11146种(以上内容来自:http://www.yikumed.com/solution/13.html)。本次使用EasyDLPro图像分类对164种中草药材,18种功能类型(清热药,解表药,补虚药,平肝息风药,化湿药,利水渗湿药,温里药,理气药,消食药,止血药,活血化瘀药,化痰止咳平喘药,安神药,收涩药,开窍药,外用药,祛风湿药,泻下药)进行深度学习模型训练,数据集达25w+,基于 paddle-fluid-v1.6.2 通过ResNet50网络训练。分类精度均达到85.8%以上,平均每次鉴别仅耗时2-5秒,已经达到很好的水平。结合现代深度学习反向传播提高精准度,为生产过程中错综复杂的参数条件找到最优方案。

创建百度账号以及EasyDL相关基础使用


专业版介绍 https://ai.baidu.com/ai-doc/EASYDL/0k38n3p16

AI接入指南 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3

创建视觉任务

完善相关信息

完善模型名称等信息

创建数据集

选择标注好的压缩包

这里数据集有25w+图片 外加标注json文件 文件个数达50w+

根据百度压缩包的要求得到了JSON格式。使用Java的File 以及第三方fastjson、hutool 完成了数据标注 总耗时(毫秒):92008(标注JSON文件生成)+604785(文件迁移到一个文件夹下)+600000(文件夹压缩)

以下内容仅适用于图像分类单图单标签。仅供参考,绝非正经捷径

1.下载官方标注示例得到如下JSON结构

{
    "labels":[
        {
            "name":"Drama"
        },
        {
            "name":"Romance"
        }
    ]
}

2.根据JSON创建JavaBean(需要lombok插件和jar)

@NoArgsConstructor
@Data
public class EasyDLProTagBean {
    private List<LabelsBean> labels;
    @NoArgsConstructor
    @Data
    public static class LabelsBean {
        private String name;
    }
}

3.提前准备好数据集

小帅丶这里的数据是以分类名称为单位。共计164个文件夹。每个文件夹里面的文件也是以分类名称命名eg:aiye_001.jpg,aiye_002.jpg.....aiye_1500.jpg
假设以上数据都在D://dataset//chm 文件夹下面
public static void main(String[] args) {
    //数据根目录
    String filePathRoot = "D://dataset//chm//";
    File fileRoot = new File(filePathRoot);
    String[] listRoot = fileRoot.list();
    //开始时间
    long startTime = System.currentTimeMillis();
    for (String rootName : listRoot) {
        //拿到根目录文件夹名即标签名称
        String tagName = rootName;
        //根据标签名称得到所有标签名称下面的文件
        String filePath = filePathRoot+rootName;
        File file = new File(filePath);
        String[] list = file.list();
        if(list.length>0){
            //循环 生成JSON文件
            for (String s : list) {
                String fileName = s.substring(0,s.lastIndexOf("."));
                //生成一个名称与图片名称一致 后缀名为.json
                String jsonFileName = fileName+".json";
                //label对象 不是必须的 直接字符串拼接也可以
                EasyDLProTagBean bean = new EasyDLProTagBean ();
                List<LabelBean.Labels> labelsList = new ArrayList<LabelBean.Labels>();
                LabelBean.Labels labels = new LabelBean.Labels();
                labels.setName(tagName);
                labelsList.add(labels);
                bean.setLabels(labelsList);
                //生成label的json文件
                String JSONText = JSON.toJSONString(bean);
                //讲json文件写入当前文件夹中
                FileUtil.writeString(JSONText,filePath+File.separator+jsonFileName,"UTF-8");
            }
        }else{
            System.out.println(filePath);
        }
    }
    //耗时
    long timeConsuming = System.currentTimeMillis() - startTime;
    System.out.println(timeConsuming);
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4.重复3的代码稍作修改即可完成N个文件夹下面的文件迁移到某一个文件夹下面。打包上传即可

注意:默认为10w数据量。如果不够提交工单申请哦

等待标注完成

 

新建训练任务

选择网络、运行环境、数据集即可开启训练 会有免费100小时的资源哦

等待训练完成

可以进行部署、效果校验(查看精准度是否符合自己的期望)操作

训练结果

部署操作

选择公有云部署(根据自己需求来)、给定一个接口地址名称 不要超过20个字符

等待发布通过查看接口地址

Java代码调用

请自行修改【API地址】、【access_token】、【本地图片地址】

    /**
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
     * 下载
     */
    public static void main(String[] args) throws Exception {
        //请将API地址替换为EasyDL Pro任务发布后所提供的API地址
        String url ="【API地址】";
        //access_token获取方法请详见API使用说明,请注意access_token有效期为30天
        String access_token="【access_token】";
        //修改图片地址,测试不同图片
        byte[] file = FileUtil.readFileByBytes("【本地图片地址】");
        //参数image:图像base64编码
        String image = Base64Util.encode(file);
        //组装json格式的请求参数
        String params = "{\"image\":\""+image+"\",\"top_num\":5}";
        String result = HttpUtil.post(url, access_token, params);
        //输出识别结果
        System.out.println(result);
    }

结果返回

可以看到识别出了 gancao  精度为 0.9859

{
    "log_id":5732642380371350220,
    "results":[
        {
            "name":"gancao",
            "score":0.9859340786933899
        }
    ]
}

演示闪图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章