1. 程式人生 > >基於微信小程式的人臉識別

基於微信小程式的人臉識別

現在關於人臉識別的SDK其實有很多,諸如face++、百度大腦之類的,他們都能為開發者免費提供人臉識別的介面。阿里也和face++合作,實現了支付寶的刷臉支付。

但是很遺憾,網上關於識別一段視訊中的使用者行為(諸如搖搖頭,眨眨眼,微笑)的資料很少,可能是技術沒有公開,所以只能自己去想解決方法了。本人最近在做一個關於微信小程式的畢業設計,所以想到了把這兩個技術結合下,這裡寫篇部落格,為大家解解惑吧,純是自己的一些想法,如果大家有疑惑或者更好的建議,可以發郵件聯絡我([email protected])。

大致的解決方案如下: 
這裡寫圖片描述

圖可能不是很清晰,請看這裡

  1. 使用者在微信小程式中拍攝一段視訊
  2. 將使用者拍攝的視訊傳到七牛雲伺服器
  3. 藉助七牛雲伺服器的媒體處理api對視訊每隔一定時間截圖,形成一張張視訊切圖
  4. 使用百度大腦的人臉識別api分析每張圖中使用者的行為,最後得出結論

現在開始coding:

A. 先初始化一個微信小程式的專案,然後新建一個video頁面,這個頁面的js中需要首先引入七牛雲上傳檔案的js—qiniuUpload.js,然後繫結拍攝視訊的按鈕的事件—chooseVideo,程式碼大致如下:

chooseVideo: function () {
    initQiniu();
    var that = this;
    wx.chooseVideo({
      sourceType: ['camera'
, 'album'], camera: 'front', maxDuration: 40, success: function (res) { console.log('拍照之後:'); console.log(res); that.setData({ src: res.tempFilePath }); //七牛上傳檔案 var vedioObject = res; var filePath = res.tempFilePath; },error: function
(err){
console.log(err) } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

這樣就把使用者在拍攝之後的視訊資訊(時長,高度,寬度,臨時儲存地址拿到了),接下來就是上傳到七牛雲伺服器了。

B. 將視訊上傳到七牛雲伺服器 
上傳檔案到七牛過程呢,有一點小複雜,建議大家先去看下七牛的官方技術文件,這裡後臺我是用的是php,但是實際上七牛的SDK幾乎支援所有的主流語言,所以對php不熟悉的同學也不用太擔心。 
大致的流程就是先搭建一個獲取上傳token的介面,在上傳檔案的時候你需要首先請求這個介面,獲得的token是作為上傳函式的必要引數,這是使用七牛PHP SDK的程式碼:

<?php
  require '../qiniu-sdk/autoload.php';
  use Qiniu\Auth;
  // 用於簽名的公鑰和私鑰
  $accessKey = 't5tBss9FrousfymdmFw4ki2fscwZ8qGaIw8SZmX8';
  $secretKey = 'uASYB6XxzJy9tLWeGsLaNaQyX4bVafIVh6Dpgvxo';
  // 初始化籤權物件
  $auth = new Auth($accessKey, $secretKey);

  // 空間名  https://developer.qiniu.io/kodo/manual/concepts
  $bucket = 'andyliwr-server';
  // 生成上傳Token
  $upToken = $auth->uploadToken($bucket);
  $returnData = array('uptoken'=>$upToken);
  echo json_encode($returnData);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然後就是在微信小程式中呼叫七牛的上傳api,這裡感謝未知名大神的原始碼貢獻,建議好好看看README,裡面的qiniuUpload.js已經幫我們封裝好了,直接設定定義引數,然後呼叫initQiniu(),就可以使用qiniuUploader.upload的上傳函式,需要設定的引數如下:

var options = {
    region: 'SCN', // 華東區,生產環境應換成自己七牛帳戶bucket的區域
    uptokenURL: 'https://xxxxx/uploadImg.php', // 生產環境該地址應換成自己七牛帳戶的token地址,具體配置請見server端
    domain: 'https://xxxxx/' // 生產環境該地址應換成自己七牛帳戶物件儲存的域名
  };
  • 1
  • 2
  • 3
  • 4
  • 5

大致過程如下 
- 從 github 上下載qiniuUploader.js,匯入小程式工程。

  • 在使用 SDK 之前,您必須先註冊一個七牛雲帳號,並登入控制檯獲取一對有效的 AccessKey 和 SecretKey,您可以閱讀 如何接入七牛  安全機制 以進一步瞭解如何正確使用和管理金鑰 。

  • SDK 依賴服務端頒發 uptoken,可以通過以下二種方式實現:

  • 您需要了解您的七牛儲存空間設定在那個區域,比如華東,華南等,參見區域設定

後端服務應提供一個 URL 地址,供小程式請求該地址後獲得 uptoken。請求成功後,服務端應返回如下格式的 json(至少包含 uptoken 欄位):

{
    "uptoken": "0MLvWPnyya1WtPnXFy9KLyGHyFPNdZceomL..."
}
  • 1
  • 2
  • 3

根據你建立的七牛儲存空間,把對應的 https 上傳地址新增到小程式的訪問白名單中,方法如下:

  1. 登入 微信公眾平臺,前往 設定 - 開發設定,點選 伺服器配置 下的「修改」連結。
  2. 修改 uploadFile 域名(比如華北 https 上傳地址為:https://up-z1.qbox.me,地址不清楚請參見https地址附錄)
  3. 如果需要下載檔案,則還需要一同設定 downloadFile 域名,為你的 bucket 下載地址
  4. 儲存即可

儲存區域對應 HTTPS 地址,參考官方文件

配置好引數之後,你就應該可以體驗下看看能否成功上傳視訊了了,ps:我這裡講得比價籠統,不會的直接下再小程式的原始碼,開始整。

所以想要獲取到所有切圖只需要結合視訊時長寫一個迴圈就好了,另外兩個引數w是視訊的寬度,h是視訊的高度,這些需要微信小程式傳送給後臺:

var allPicture = [];
for(var i=0; i<vedioObject.duration; i++){
  allPicture.push(res.imageURL+'?vframe/jpg/offset/'+i+'/w/'+vedioObject.width+'/h/'+vedioObject.height+'/rotate/0');
}
  • 1
  • 2
  • 3
  • 4
 wx.request({
   url: https://xxxxx/analysis/request/AipFace.php + '?video_url=' + res.imageURL + '&duration=' + vedioObject.duration + '&width=' + vedioObject.width + '&height=' +vedioObject.height, //僅為示例,並非真實的介面地址
   header: { 'content-type': 'application/json' },
   success: function (res) { ..........
  • 1
  • 2
  • 3
  • 4

D: 使用百度API做人臉分析 
同樣的百度API雖然對個人使用者免費但是需要註冊一個appid,這裡建議去看下百度的文件,我這裡就不多說了,不會的直接下載程式碼

最後對接後返回的結果做個檢測,isSimle為true則表示使用者微笑了:

var isSimle = res.data.result.some(function(item){
 if(item.result instanceof Array){
   return item.result.some(function(item2){
     return item2.expression == '1';
   })
 }else{
   return item.result.expression == '1';
 }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最後,覺得有啥不懂的,你可以聯絡我,踩坑是肯定的,做程式設計師咱們就得有這覺悟,不懂的你可以聯絡我([email protected]),也可以關注我的github(https://github.com/Andyliwr).

相關推薦

程式--人臉識別入庫以及匹配人臉

首先,建立Camera目錄和pagecamera.xml的程式碼如下<camera device-position="{{show}}" flash="off" binderror="error" style="width: 100%; height: 400px;"&

程式人臉識別

微信小程式中的人臉識別登入大大提高了使用者登入的安全性,所以人臉識別的技術應用的越來越廣泛了。下面我們就來看看在微信小程式中人臉識別技術該怎麼寫。首先我們需要搭建一個前臺的簡單頁面,示例程式碼如下:<camera device-position="front" flas

程式——人臉識別

頁面佈局程式碼<view class='box'> <view>人臉採集與識別</view> <view class='font'>學生資訊(包括人像)採集,刷臉登入</view> <button type="

程式——人臉識別功能

最近學習了關於微信小程式中的人臉識別功能,收穫頗多。首先我們看一下頁面:這是前臺頁面的程式碼,都是些微信小程式中的控制元件,也用到了Weui的樣式。<form bindsubmit='formSubmit'> <view class="weui-ce

程式-人臉識別+輸出人臉匹配資訊

1.在微信小程式建立 camera頁面camera.wxml程式碼為:<camera device-position="{{show}}" flash="off" binderror="error" style="width: 100%; height: 400px;"

程式-人臉識別(1)照片入庫

現在我們的科技是越來越發達了,我們現在有的手機有一個功能就是刷臉登入,那這是什麼原理呢?那就是人臉識別。首先你要把你的照片(包括整張人臉)傳給伺服器,他將你的照片傳入到資料庫當中。在你要登入的時候,將你刷臉是的照片與傳入伺服器資料庫裡面的照片進行對比,從而實現刷臉登入。下面是

程式人臉識別的實現

首先我們建立一個前臺的頁面設計<!--pages/camera/camera.wxml--> <camera device-position="{{device}}" flash="off" binderror="error" style="width: 1

程式-人臉識別(2)實現人臉識別功能

上一篇的部落格已經將圖片存入到百度雲與自己的伺服器阿里雲上面了,接下來就是在寫一個頁面,是刷臉頁面,通過這個頁面你將自己的臉拍照,傳入到自己的伺服器上,去與存入百度雲上面的照片進行對比。下面是程式碼。前臺程式碼:<camera device-position="fron

程式---人臉識別

本次人臉識別主要採用的是百度雲人臉識別介面精準定點陣圖中人臉,獲得眼、口、鼻等72個關鍵點位置,分析性別、年齡、表情等多種人臉屬性獲取Access——tokenfunction access_token(){ $file = __DIR__ . '\access_token

實現基於程式人臉識別思路和步驟

人臉識別就是:指利用分析比較人臉視覺特徵資訊進行身份鑑別的計算機技術。人臉識別是一項熱門的計算機技術研究領域,可以將人臉明暗偵測,自動調整動態曝光補償,人臉追蹤偵測,自動調整影像放大;它屬於生物特徵識別技術,是對生物體(一般特指人)本身的生物特徵來區分生物體個體。原文:htt

基於程式人臉識別

現在關於人臉識別的SDK其實有很多,諸如face++、百度大腦之類的,他們都能為開發者免費提供人臉識別的介面。阿里也和face++合作,實現了支付寶的刷臉支付。 但是很遺憾,網上關於識別一段視訊中的使用者行為(諸如搖搖頭,眨眨眼,微笑)的資料很少,可能是技術沒有公開,所

程式--人臉採集與識別

 <view class="page" xmlns:wx="http://www.w3.org/1999/xhtml">  <form bindsubmit="formSubmit">        <view class="weui-cells__title"style="te

基於程式的社群電商平臺】需求分析心得——豆芽

一、專案內容   基於微信小程式,做一個社群電商平臺,抓住社群電商的特點,做出特色,與微信整合,實現商品的個性化釋出,以及個性化營銷。   個性化釋出:使用者可以在應用上直接釋出自己的商品,通過搜尋心願單可以檢視當前買家使用者以及他們對商品的預期價格,在此便可建議賣家合理定價,尋求市場;作為買家,可以在當

資料庫設計心得——基於程式的社群電商平臺

  資料庫,是一個專案的靈魂,資料庫設計得合理,接下來的開發工作也會變得簡捷有序。而說到資料庫的設計,說它難吧,可不就是設計一張張表嘛,可說它簡單吧,每一張表裡面放一些什麼東西?表與表之間的聯絡又該是怎麼樣?這些都是要考慮的東西,每一個改動都決定著後面工作的難易。於是,我們的第一個專案的資料庫,就是在這樣一種

程式語音識別開發過程筆記

由於業務需求,需要使用微信小程式語音識別的功能,查找了好多發難,也踩了好多坑,把過程記錄一下,或許會幫助到需要的朋友。 業務需求: 在小程式中識別使用者語音輸入的命令 業務環境和關鍵技術: 1.小程式: 關鍵流程流程: 錄音儲存-->上傳錄音檔案到伺服器後臺--&g

基於程式的社群電商平臺】Alpha迭代心得

專案團隊:小豆芽 開發週期:11.5-12.2(Alpha版本) 設想和目標 1. 我們的軟體要解決什麼問題?是否定義得很清楚?是否對典型使用者和典型場景有清晰的描述? 解決問題:當前電商平臺賣家買家角色固化,買家在沒有尋求到心儀商品時無法記錄並告知他人,賣家出售商品無法確認是否有市場有需求;

基於程式開發的demo

先上開源地址: 最近一直在研究微信小程式,跟隨網際網路新聞的熱潮 從9月29日開發到現在,也算是把大部分API和元件都用到了 這個專案之所以想到把它開源,是因為之前在一個2000人小程式交流群中,發現很多demo都很簡單 那麼既然他們做的很簡單,自然是引領很

程式--人臉檢測 (新增資訊)

1程式首頁2.頁面程式碼<view> <view>人臉採集與識別</view> <view class='title'>學生資訊(包括人像)採集,刷臉登入</view> <view class='con

基於程式的系統開發準備工作

騰訊推出微信小程式也有一段時間了,在各種行業裡面也都掀起一陣陣的熱潮,很多APP應用被簡化為小程式的功能迅速推出,同時也根據小程式的特性推出各種獨具匠心的應用,相對傳統的APP來說,微信小程式確實能夠大大降低開發成本和難度,但也意味著需要掌握整個微信小程式的各種介面功能、應

基於程式做直播的截圖(程式發起視訊直播)

第1部分:大至描述 用微信小程式來發起直播(推流);使用者即可以通過微信直接觀看,也可以通過PC端web瀏覽器觀看或通過手機瀏覽器觀看。 第2部分:提示說明 圖1,是小程式介面方面的截圖(P1圖中:截圖1為小程式入口、截圖2為直播登入介面、截圖3為直播豎屏/橫屏/超清/高清