六一兒童節,看我用ModelArts讓8090夢迴童年

【本期推薦】 8歲小朋友的兒童節,有點硬核,一起來認識這些小小程序員,看他們如何coding出一個與衆不同的童年。

摘要: 如果還能再過一次兒童節……

本文分享自華爲雲社區《“夢迴童年,盡享美食“--ModelArts + Wechaty 識別童年美食》,原文作者:華爲雲EI專家胡琦。

大家好,我是Copy攻城獅胡琦,昨晚終於把憋了很久的 ModelArts + Wechaty 實現有趣的美食圖片識別應用跑通了。儘管結合 Wechaty 調用 AI 相關服務在多年以前就被千人實現過了,不過作爲小白的我能夠藉助一站式AI開發平臺 ModelArts 新手製作數據集、訓練模型並部署,最終通過最好的微信開發庫 Wechaty 實現調用 AI 服務的聊天小助手,還是十分有趣的。當然,我也迫不及待地將我的實踐分享給大家,也希望能夠獲得各位大佬的指導!

數據集製作

我們從AI開發流程出發,當我確定了我的目的是要結合 ModelArts + Wechaty 來實現童年美食識別,基本上我的技術選型也就確定了,鑑於我學藝不精,零基礎都能上手的一站式AI開發平臺ModelArts和四行代碼就能實現聊天機器人的微信開發庫 Wechaty,便成了我唯一的選擇。準備數據的階段,我有幸遇到了前輩貢獻的代碼,因此能夠快速從某度圖片獲取我想要的圖片,具體操作可以查看我的歷史文章《新手小白如何快速獲取數據集》我用同樣的手法獲取到了菠蘿啤、大白兔奶糖、乾脆面、果丹皮、漢堡橡皮糖、猴王丹、花生牛軋糖、健力寶、酒心巧克力、烤紅薯、辣條、老冰棍、三色冰淇淋、沙琪瑪、跳跳糖、娃哈哈AD鈣、旺旺碎冰冰、旺仔牛奶、西瓜泡泡糖、仙貝、魚皮花生、玉米軟糖、真知棒、咪咪蝦條共24個分類,從7200張圖片中一張一張分揀,最終標註3543張,實現了一個暫時看上去想那麼回事的數據集--《"兒童節特輯"--8090的童年美食》

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622477560736-image.png 

不過,目前從數據的標籤分佈來看,不太合理,被標註最多的標籤數量多達268個,而被標註最少的標籤數量僅23個,兩者差了一個數量級,因此訓練出來的模型大概率會跑偏。

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622478810203-image.png

ModelArts上進行數據標註時,其實也是有一定技巧的。比如,我在本地獲取到了大量的圖片,通過 OBS 的命令行工具上傳到 OBS 桶中之後,由於此次標註是圖像分類,因此我在標註時可以通過圖片存放的 OBS 目錄來快速篩選出當前要分揀的標籤以及進行標註。目前ModelArts數據集處理時單頁最多可顯示60張圖片,這也給我對圖片進行精挑細選提供了強有力的支持。其次,在進行圖片挑選時,可以從最後一頁進行,每次刪除圖片時順帶把源文件也從 OBS 中移除,移除往前直至處理到第一頁。最後,又可以全選當前頁進行標註。整個數據集從數據獲取到數據處理再到數據集發佈,花了不到2小時,個人感覺對新手小白已經很友好了!

童年美食.png

訓練及評估模型

如果您對"兒童節特輯"--8090的童年美食》數據集感興趣,可以在 AI Gallery 進行一鍵下載,既可以下載到 OBS 也也可直接下載到 ModelArts 數據集。

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622479953447-image.png

基於數據集,在 ModelArts 平臺上除了可以自行開發算法並訓練模型,也可以使用 AI Gallery 的訂閱算法或者直接使用 ModelArts 的自動學習來訓練模型。這裏爲了更簡便的操作,本大獅就直接使用簡單粗暴的自動學習來實現,主要想看到當前的數據集能訓練出怎麼樣的結果(PS:其實主要是免費「請把免費打在評論區」),您期待嗎?

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622480518751-image.png

在創建完自動學習的任務運行9分鐘之後,我 Get 到了一個模型,從訓練結果來看還是非常理想的,不過究竟是騾子是馬,還得看最終部署之後的效果。

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622481390606-image.png

表中是各個標籤所對應的參考值,其中F1值是模型精確率和召回率的加權調和平均,用於評價模型的好壞,當F1值較高時說明模型效果較好;精確度指的是被模型預測爲某個分類的所有樣本中,模型正確預測的樣本比率,反映模型對負樣本的區分能力;召回率指的是被用戶標註爲某個分類的所有樣本中,模型正確預測爲該分類的樣本比率,反映模型對正樣本的識別能力。

部署模型

目前 ModelArts 支持一個免費的部署服務實例,因爲我之前的實踐已經佔用了名額,因此當我再次在自動學習中部署模型時會提示以下圖中的報錯,從而我只能去到「部署在線--在線服務」手動新建一個服務實例。

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622482173806-image.png

在部署模型的時候,我們可以根據自身的需求添加一些個性化設置或者其他功能,比如數據採集、難例篩選等等。

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622482617629-image.png

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622482827429-image.png

 

 

 

 

 

看到服務部署成功之後,我已經迫不及待地想先調試一下,隨便找了一張「跳跳糖」的圖片,讓 AI 識別一下,哎呀還不錯哦,感覺比我想象中的要好。ModelArts 的開發部分就告一段落,接着我們按照在線服務的調試指南進行與 Wechaty 的聯合開發,“Talk is cheap. Show me the code.”

此時,我們獲得的信息: AI 服務的在線地址以及file形式的輸入參數images

Wechaty 開發

https://gitee.com/hu-qi/cdn/raw/master/2021-6-1/1622483779621-image.png

先看看我們最終的呈現效果,也就是像微信機器人發送指定關鍵字之後再發送圖片,微信機器人就會調用 ModelArts 的在線服務來識別圖片並將結果返回給微信端。這裏我們就需要用到 Wechaty 這個強大的微信開發庫。關於 Wechaty 的詳細情況,您可以訪問 Wechaty 的官網瞭解--https://wechaty.js.org/ 從域名來看,這個開發庫應該和 JavaScript 有關,經過翻閱文檔,我得知,新手使用 Wechaty 僅需四行代碼:

npm install qrcode-terminal --save
npm install wechaty 
npm install wechaty-puppet-wechat --save // 這個依賴是關鍵
export WECHATY_PUPPET=wechaty-puppet-wechat // 這裏也是關鍵,需要配置你使用的puppet

我們可以新建一個文件夾,執行npm init初始化一個項目,然後執行上述代碼,接着新建index.js,寫入:

const { Wechaty } = require('wechaty');
const name = 'wechat-puppet-wechat';
let bot = '';
bot = new Wechaty({
    name, // generate xxxx.memory-card.json and save login data for the next login
});

//  二維碼生成
function onScan(qrcode, status) {
    require('qrcode-terminal').generate(qrcode); // 在console端顯示二維碼
    const qrcodeImageUrl = [
        'https://wechaty.js.org/qrcode/',
        encodeURIComponent(qrcode),
    ].join('');
    console.log(qrcodeImageUrl);
}

// 登錄
async function onLogin(user) {
    console.log(`貼心小助理${user}登錄了`);
    //   if (config.AUTOREPLY) {
    //     console.log(`已開啓機器人自動聊天模式`);
    //   }
    // 登陸後創建定時任務
    // await initDay();
}

//登出
function onLogout(user) {
    console.log(`小助手${user} 已經登出`);
}

bot.on('scan', onScan);
bot.on('login', onLogin);
bot.on('logout', onLogout);
bot
    .start()
    .then(() => console.log('開始登陸微信'))
    .catch((e) => console.error(e));

基本上就完成了 Wechaty 部分的開發,執行node index.js就能在控制檯顯示一個二維碼,其實類似我們登錄桌面端的微信,接着我們主要需要解決的問題:

  1. 監聽微信消息 -- 可以使用 bot.on('message')來實現;
  2. 對接 ModelArts -- 可以使用 token 鑑權方式訪問;
  3. 文件傳遞 -- 可以通過 form-data進行數據轉換。

基本代碼實現如下:


 

// 獲取Token
async function getToken() {
    let token = ''
    const data = {
        "auth": {
            "identity": {
                "methods": [
                    "password"
                ],
                "password": {
                    "user": {
                        "domain": {
                            "name": config.IAMDomain
                        },
                        "name": config.IAMUser,
                        "password": config.IAMPassword
                    }
                }
            },
            "scope": {
                "project": {
                    "name": config.IAMProject
                }
            }
        }
    }
    await axios.post(config.TokenURL, data).then(res => {
        token = res.headers['x-subject-token']
    }).catch(err => {
        console.log(err)
        token = ''
    });

    return token
}

// 識別美食
async function sendImage(fileName) {
    let resp = {}
    await getToken().then(async res => {
        // console.log(res)
        const form = new FormData();
        form.append('images', fs.createReadStream(fileName));
        console.log(form.getHeaders())
        await axios.post(config.URL, form, { headers: Object.assign(form.getHeaders(), { "X-Auth-Token": res }) }).then(res => {
            console.log(res.data)
            resp = res.data
        }).catch(err => {
            console.log(err)
            if (err.response && err.response.data) {
                resp = err.response.data
            }
        })
    }).catch(err => {
        console.log(err)
        resp = err.data
    })
    return resp
}

完整代碼參見: https://github.com/hu-qi/modelarts-wechaty

 溫馨提示:使用 Wechaty 的相關風險請自行評估。

1. 使用這種方式登錄微信存在被微信官方風控的可能性,嚴重者可封號;

2. 非所有賬號可使用此方案進行登錄/操作,如果您的賬號無法通過 Wechaty 提供的接口登錄,則無法使用。 

獲取更多 AI 相關數據、算法、模型等 AI 資產,請點擊“瞭解更多”,AI Gallery等您!

點擊關注,第一時間瞭解華爲雲新鮮技術~

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