uniapp -人脸识别 - 前端实现

1、APP开发一个人脸识别,实现刷脸功能

首先要考虑的是实现流程:

1、 打开摄像头——自动读取照片——传输给后端——后端交由第三发或自主开发来识别——返回结果(相识度比)

2、 打开摄像头——自动读取视频——传输给后端——后端通过解析视频,截取图片交由第三方或自主开发来识别——返回结果(相识度比)

我们只需要做两步骤:打开摄像头和自动读取视频或照片

2、打开摄像头

分步骤分析:打开摄像头,并展示视频效果在html上,目前有两种方式:

2.1、使用camera组件进行,借用.CREATECAMERACONTEXT()对象来打开摄像头

因为我开发的是app,camera组件不支持,在小程序上是支持的


2.2、创建 live-player 上下文 livePlayerContext 对象。注意是直播的播放而不是推流。(直播推流技术)实现视频预览和截屏

流程为  调用手机摄像头创建直播推流 → 自动截图 → 压缩图片为base64格式→ 上传图片到服务器 → 服务器调用阿里人脸api → 阿里api返回该图片与底图的相似度

下面上代码

<template>

    <view>

<div class="custom" :style="{height: CustomBar+'px'}">

<view class="navcontent" :style="[{top:statusBar + 'px'}]">

<text style="color: #FFFFFF;font-size: 16px;line-height: 45px;" class="iconfont icon-xiangzuo" @click="BackPage">返回</text>

<text style="color: #FFFFFF;font-size: 16px;line-height: 45px;">人脸识别</text>

<text></text>

</view>

</div>

        <div class="livefater">

<div style="width: 350px;height: 350px;border-radius: 350px;overflow: hidden;background-color: #CCCCCC;">

<live-pusher id='livePusher' ref="livePusher" class="livePusher" url=""

mode="SD" :muted="true" :enable-camera="true" :auto-focus="true" :beauty="1" whiteness="2"

aspect="1:1" @statechange="statechange" @netstatus="netstatus" @error = "error"

></live-pusher>

</div>

<cover-image src="../static/image/gai.png" class="gaiimg"></cover-image>

</div>

        <button class="btn" @click="startPreview">打开摄像头进行人脸识别</button>

<button type="default" @click="switchCamera">切换摄像头</button>

<button type="default" @click="stop">停止识别</button>

    </view>

</template>

//js代码部分

export default {

        data: {

            fil: true,

imgList:[""],

statusBar:'',

CustomBar: 0

        },

onLoad(){

// this.startPreview()

},

        onReady() {

            // 注意:需要在onReady中 或 onLoad 延时

            this.context = uni.createLivePusherContext("livePusher", this);

var that = this

uni.getSystemInfo({ 

success:function(e){ 

// 计算导航栏高度

that.statusBar = e.statusBarHeight 

// #ifndef MP 

if(e.platform == 'android') { 

that.CustomBar = e.statusBarHeight + 50 

}else { 

that.CustomBar = e.statusBarHeight + 45 

console.log(that.statusBar)

// #endif 

// #ifdef MP-WEIXIN 

let custom = wx.getMenuButtonBoundingClientRect() 

that.CustomBar = custom.bottom + custom.top - e.statusBarHeight 

// #endif 

// #ifdef MP-ALIPAY 

that.CustomBar = e.statusBarHeight + e.titleBarHeight 

// #endif 

}

}) 

        },

        methods: {

Timer(){},

            statechange(e) {

                console.log("statechange:" + JSON.stringify(e));

            },

            netstatus(e) {

                console.log("netstatus:" + JSON.stringify(e));

            },

            error(e) {

                console.log("error:" + JSON.stringify(e));

            },

            start: function() {

                this.context.start({

                    success: (a) => {

                        console.log("livePusher.start:" + JSON.stringify(a));

                    }

                });

            },

            close: function() {

                this.context.close({

                    success: (a) => {

                        console.log("livePusher.close:" + JSON.stringify(a));

                    }

                });

            },

//切换摄像头

switchCamera() {

this.context.switchCamera({

success: (e) => {

console.log("切换成功",e)

}

})

},

//停止推流

stop() {

this.context.stop({

success: (e) => {

console.log("停止",e)

}

})

},

// 拍照事件

            snapshot: function() {

var that = this

                this.context.snapshot({

                    success: (e) => {

                        console.log(JSON.stringify(e));

that.getMinImage(e.message.tempImagePath)

                    }

                });

            },

// 开启摄像头

            startPreview() {

console.log("1")

var that = this

                this.context.startPreview({

                    success: (a) => {

                        console.log("livePusher.startPreview:" + JSON.stringify(a));

that.Timer = setInterval(function(){

that.snapshot()

if(that.imgList.length>3){

console.log("3")

clearInterval(that.Timer)

}

},2000)

                    }

                });

            },

// 使用plus.zip.compressImage压缩图片并转换成base64

getMinImage(imgPath) {

plus.zip.compressImage(

{

src: imgPath,

dst: imgPath,

overwrite: true,

quality: 40

},

zipRes => {

setTimeout(() => {

var reader = new plus.io.FileReader();

reader.onloadend = res => {

var speech = res.target.result; //base64图片

console.log(speech);

this.imgList.push(speech);

};

//一定要使用plus.io.convertLocalFileSystemURL将target地址转换为本地文件地址,否则readAsDataURL会找不到文件

reader.readAsDataURL(plus.io.convertLocalFileSystemURL(zipRes.target));

}, 1000);

},

function(error) {

console.log('Compress error!', error);

}

);

},

BackPage() {

uni.navigateBack({

delta: 1

});

}

        }

    }

//css代码部分

.custom{

background-color: #2C65F7;

}

.navcontent{

height: 45px;

display: -ms-flex;

display: -webkit-flex;

display: flex;

justify-content:space-around;

flex-direction:row;

color:#FFFFFF;

}

.livePusher{

width: 350px;

height: 350px;

}

.livefater{

display: -ms-flex;

display: -webkit-flex;

display: flex;

justify-content:center;

flex-direction:column;

align-items:center;

margin-top: 50rpx;

margin-bottom: 50rpx;

height: 350px;

}

.gaiimg{

width: 350px;

height: 350px;

margin-top: -350px;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容