微信小程序之看圖識物

在這樣春暖花開的時(shí)間尖滚,是不是想要和男神女神一起出門踏青賞花啦喉刘?看到一款好看的花花草草,不認(rèn)識豈不是很丟人漆弄。不如動(dòng)手?jǐn)]個(gè)看圖識物的小程序吧睦裳,還能一展咱程序媛[猿]的魅力。ok撼唾,帶著這樣的目的廉邑,記錄下我的這次開發(fā)。此次開發(fā)用到了微信小程序的云服務(wù)開發(fā)倒谷,畢竟咱也沒有服務(wù)器蛛蒙,還有用到了百度AI的api。


5e7326fd35210_5e7326fd66182.gif

首先恨锚,如何進(jìn)行小程序的云服務(wù)開發(fā)呢宇驾?一直都在聽我老大說這個(gè)概念倍靡,這次終于動(dòng)手操作啦猴伶,對于小程序,之前只做過一個(gè)商品購物的小程序塌西,所以稍微有點(diǎn)基礎(chǔ)吧他挎。
第一步: 首先在創(chuàng)建的時(shí)候勾選云開發(fā),這里AppID一定要用真實(shí)的AppID捡需,在微信公眾平臺開發(fā)設(shè)置可以找到:


image.png

此時(shí)會(huì)讓你創(chuàng)建個(gè)環(huán)境办桨,這里創(chuàng)建的環(huán)境id后續(xù)需要寫到全局app.js里,注意:這里是環(huán)境id站辉,不是環(huán)境名稱哦(在云開發(fā)控制臺設(shè)置中查找環(huán)境id)


(5738HP.png

創(chuàng)建之后會(huì)有兩個(gè)文件夾呢撞,第一個(gè)文件夾就是用來寫云函數(shù)损姜,第二個(gè)文件夾是頁面代碼。


image.png

cloudfunctions云函數(shù)文件里每次創(chuàng)建都只寫一種方法殊霞,因?yàn)楹竺骓撁嬲{(diào)用接口名稱就是你創(chuàng)建的文件夾名字摧阅,如我這里是: baiduAi,同時(shí)創(chuàng)建完需要鼠標(biāo)點(diǎn)擊文件夾右擊=》上傳并部署:云端安裝依賴绷蹲,這時(shí)棒卷,在云開發(fā)控制臺云函數(shù)可以看到創(chuàng)建的云函數(shù)


image.png

這里點(diǎn)擊左上方的云開發(fā),可以看到里面有數(shù)據(jù)庫祝钢,存儲(chǔ)比规,云函數(shù)等,這里用到了存儲(chǔ)和云函數(shù)功能
第二步:寫好頁面后拦英,寫拍照蜒什,本地相冊上傳功能,這里微信小程序提供了相應(yīng)的api為:wx.chooseImage疤估,


image.png

第三步:圖片上傳后吃谣,會(huì)生成一個(gè)臨時(shí)url,我們需要做的就是把臨時(shí)url放到云服務(wù)的存儲(chǔ)中做裙,使用云開發(fā)api中wx.cloud.uploadFile岗憋,同時(shí),我們需要給圖片命名锚贱,因?yàn)檫@里會(huì)傳多張圖片仔戈,所以使用時(shí)間戳來命名,同時(shí)跳轉(zhuǎn)到上傳圖片成功的頁面拧廊,這里需要向下一個(gè)頁面?zhèn)黜撁娴呐R時(shí)路徑以便顯示监徘,同時(shí)還要傳fileID,也就是圖片在云服務(wù)存儲(chǔ)里的圖片id吧碾,這里ID是為了后面百度AI接口調(diào)用的時(shí)候使用

    wx.chooseImage({      // 上傳圖片
      sourceType: sourceType,   // 上傳圖片的類型【camera或者album】
      success: res =>{
        wx.showLoading({
          title: '圖片上傳中...',
        })
        console.log('調(diào)用圖片的成功結(jié)果:', res);
        let filePath = res.tempFilePaths[0];
        let cloudPath = 'image/' + Date.now() + filePath.match(/\.[^.]+?$/)[0]
        wx.cloud.uploadFile({  // 將圖片上傳至云存儲(chǔ)空間
          // 指定上傳到云路徑
          cloudPath: cloudPath,
          // 指定要上傳的文件的小程序臨時(shí)文件路徑
          filePath: filePath,
          // 成功回調(diào)
          success: res =>{
            console.log('上傳成功:', res);
            //  跳轉(zhuǎn)圖片上傳成功頁面
            wx.navigateTo({
              url: `../showPhone/showPhone?fileID=${res.fileID}&&pic=${filePath}`,
            })
          },
          fail: err => {
            wx.showLoading({
              title: '圖片上傳失敾丝!',
            })
          }
        })
      },
    })

第四步:在上傳成功頁面里倦春,首先是顯示出圖片户敬,同時(shí)需要調(diào)用百度AI的接口,這里百度AI接口的處理我是在云函數(shù)中處理睁本,使用的是node尿庐。對于百度AI,需要去百度AI官網(wǎng)登錄注冊一個(gè)賬號呢堰,我是搜索植物識別抄瑟,使用免費(fèi)使用功能,畢竟咱自己玩枉疼,一天也玩不了多少次皮假,哈哈鞋拟。打開后創(chuàng)建應(yīng)用,會(huì)生成我們需要的APP_ID, API_KEY,SECRET_KEY惹资,對照著百度AI提供的文檔進(jìn)行開發(fā)严卖。注意:這里需要安裝baidu-aip-sdk,可以在控制臺進(jìn)入相應(yīng)文件后直接npm安裝
附百度ai開發(fā)文檔(我選擇的是NodeSDK文檔): https://ai.baidu.com/ai-doc/IMAGERECOGNITION/Fk3bcxjx7

image.png

一切就緒后布轿,就開始處理圖片和百度AI之間的關(guān)系哮笆,將云服務(wù)中的圖片id傳入百度Ai接口中,返回的就是對應(yīng)圖片內(nèi)容的信息

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
let AirpImageClassifyClient = require('baidu-aip-sdk').imageClassify;

// 設(shè)置APPID/AK/SK
let APP_ID = "18927083"
let API_KEY = "tpsAYnBF16TxlxNedU6y9Saj";
let SECRET_KEY = "OhnH7KGWhTek0VFddUHFfKrk5Hh8DvV7";
// 新建一個(gè)對象汰扭,建議只保存一個(gè)對象調(diào)用服務(wù)接口
let client = new AirpImageClassifyClient(APP_ID, API_KEY,SECRET_KEY);

cloud.init()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  let { fileID } = event;   // 這里是因?yàn)槲覀冞@個(gè)函數(shù)只需要一個(gè)fileID的參數(shù)

  let res = await cloud.downloadFile({   // 云服務(wù)的下載
    fileID: fileID  
  })
  
  console.log('調(diào)用百度ai函數(shù)打印1:', res);

  let image = res.fileContent.toString("base64");   // 將圖片轉(zhuǎn)成base64格式稠肘,因?yàn)檫@里百度ai只接受base64格式

  let val = await client.advancedGeneral(image);  

  return {
    val
  }
}

處理好百度AI接口后,在顯示圖片的那個(gè)頁面調(diào)用該接口

wx.cloud.callFunction({
      // 需要調(diào)用的云函數(shù)名
      name: 'baiduAi',
      // 需要傳給云函數(shù)的參數(shù)
      data: {
        fileID: options.fileID
      },
      success: res => {
        console.log('百度ai傳回來的數(shù)據(jù):', res);
        wx.hideLoading();
        this.setData({
          pic: res.result.val.result
        })
        console.log(this.data.pic);
      },
      fail: error =>{
        console.log('接口失斅苊:', error);
      }
    })

這個(gè)時(shí)候项阴,一個(gè)看圖實(shí)物的小程序就完成啦,這里不只是可以辨別植物笆包,百度Ai接口對于其他類型圖片也可以識別环揽。

關(guān)注我,一起努力庵佣,共同進(jìn)步G附骸!后續(xù)會(huì)將代碼傳入github巴粪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通今,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肛根,更是在濱河造成了極大的恐慌辫塌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派哲,死亡現(xiàn)場離奇詭異臼氨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芭届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門储矩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉脖,你說我怎么就攤上這事椰苟∫衷拢” “怎么了树叽?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谦絮。 經(jīng)常有香客問我题诵,道長洁仗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任性锭,我火速辦了婚禮赠潦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘草冈。我一直安慰自己她奥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布怎棱。 她就那樣靜靜地躺著哩俭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拳恋。 梳的紋絲不亂的頭發(fā)上凡资,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音谬运,去河邊找鬼隙赁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛梆暖,可吹牛的內(nèi)容都是我干的伞访。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轰驳,長吁一口氣:“原來是場噩夢啊……” “哼咐扭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滑废,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝗肪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蠕趁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薛闪,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年俺陋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豁延。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腊状,死狀恐怖诱咏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缴挖,我是刑警寧澤袋狞,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響苟鸯,放射性物質(zhì)發(fā)生泄漏同蜻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一早处、第九天 我趴在偏房一處隱蔽的房頂上張望湾蔓。 院中可真熱鬧,春花似錦砌梆、人聲如沸默责。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傻丝。三九已至,卻和暖如春诉儒,著一層夾襖步出監(jiān)牢的瞬間葡缰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工忱反, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泛释,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓温算,卻偏偏與公主長得像怜校,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子注竿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,764評論 0 15
  • 我之于你 一如深紫色的鳶尾花 之于這個(gè)春季 ----席慕容 步驟一:靛藍(lán)淡淡平涂做底色 步...
    中笑閱讀 324評論 1 2
  • 字典的添加茄茁、刪除、修改操作 字典的遍歷 字典items()的使用 每個(gè)元素是一個(gè)key和value組成的元組巩割,以列...
    AngueTone閱讀 285評論 0 0
  • 這幾周的周一早上兒子總是有點(diǎn)懶床裙顽,叫不醒,叫了幾次還是沒動(dòng)靜宣谈,時(shí)間過得真快愈犹,老公起床去叫他總算起來了,記得昨晚叫我...
    紅葉雨晨閱讀 71評論 0 0