参加一个比赛,指定用虹软的人脸识别功能,奈何虹软人脸识别要自己建人脸库,不然就只能离线用,总不能装个样子,简单看了下虹软Demo,下面决定用这种简单方法实现在线人脸识别:
Android端(虹软Demo)取出人脸信息和姓名,人脸信息写入.data文件,存入手机本地------>取出文件上传至Python Djano后台,后台把文件保存在工程下并把路径存入数据库------>Android端访问后台接口,遍历所有数据库中文件路径然后作为参数再次访问后台,得到所有人脸信息文件和姓名,使用识别功能时,就可以开始和所有人脸信息比对,得到效果
Django 后台代码:
在工程下新建一个文件夹uploads,用来存放人脸数据.data文件
为简单实现,在setting.py中注释
#'django.middleware.csrf.CsrfViewMiddleware',
不然post请求被拦截,认真做工程不建议这样做
app.urls:
from django.conf.urls import url, include from . import views urlpatterns = [ url(r'^posts',views.posttest), url(r'^getallface',views.getface), url(r'^filedown',views.file_download), ]
views.py
#coding:utf-8 import json from imp import reload import sys import os from django.http import HttpResponse, HttpResponseRedirect, StreamingHttpResponse from django.shortcuts import render, render_to_response from django.template import RequestContext from faceproject.settings import BASE_DIR, MEDIA_ROOT reload(sys) from faceapp.models import face, Faceinfos, FaceinfoForm def getface(request): if request.method=='GET': WbAgreementModel = Faceinfos.objects.all() cflist = [] cfdata = {} cfdata["coding"] = 1 cfdata['message'] = 'success' for wam in WbAgreementModel: wlist = {} wlist['name'] = wam.username wlist['faceinfo']=wam.fileinfo cflist.append(wlist) cfdata['data'] = cflist return HttpResponse(json.dumps(cfdata, ensure_ascii=False), content_type="application/json") def posttest(request): if request.method=='POST': files=request.FILES['fileinfo'] if not files: return HttpResponse("no files for upload!") Faceinfos( username=request.POST['username'], fileinfo=MEDIA_ROOT+'/'+files.name ).save() f = open(os.path.join('uploads', files.name), 'wb') for line in files.chunks(): f.write(line) f.close() return HttpResponseRedirect('/face/') def file_download(request): global dirs if request.method=='GET': dirs=request.GET['dirs'