【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
        }
    ]
}

演示閃圖

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