| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import base64
- import os
- import cv2
- import numpy as np
- from django.http import StreamingHttpResponse, JsonResponse
- from django.shortcuts import render, get_object_or_404
- from django.shortcuts import HttpResponse
- from django.views.decorators.csrf import csrf_exempt
- from .models import Doc
- face_detector_path = 'serviceApp/haarcascade_frontalface_default.xml'
- face_detector = cv2.CascadeClassifier(face_detector_path)
- # Create your views here.
- def download(request):
- return render(request,'docList.html',{'active_menu':'download'})
- def platform(request):
- return render(request,'platForm.html',{'active_menu':'platform'})
- def getDoc(request,id):
- doc = get_object_or_404(Doc,id=id)
- update_to,filename = str(doc.file.split('/'))
- filepath = '%s/media/%s/%s' % (os.getcwd(),update_to,filename)
- response = StreamingHttpResponse(read_file(filepath,512))
- response['Content-Type'] = 'application/octet-stream'
- response['Content-Disposition'] = 'attachment; filename=%s' % filename
- return response
- def read_file(file_name,size):
- with open(file_name,'rb') as f:
- while True:
- c = f.read(size)
- if c:
- yield c
- else:
- break
- @csrf_exempt
- def facedetect(request):
- result = {}
- if request.method == 'POST':
- if request.FILES['file'].get('image', None) is not None:
- img = read_image(stream = request.FILES['image'])
- else:
- result.update({
- "#faceNum":-1
- })
- return JsonResponse(result)
- if img.shape[2] == 3:
- img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
- values = face_detector.detectMultiScale(
- img,
- scaleFactor=1.1,
- minNeighbors=5,
- minSize=(30, 30),
- falgs = cv2.CASCADE_SCALE_IMAGE
- )
- values = [
- (int(a),int(b),int(a+c),int(b+d))
- for (a,b,c,d) in values
- ]
- result.update({
- "#faceNum":len(values),
- "face":values,
- })
- return JsonResponse(result)
- def read_image(stream = None):
- if stream is not None:
- data_temp = stream.read()
- img = np.asarray(bytearray(data_temp), dtype="uint8")
- img = cv2.imdecode(img,cv2.IMREAD_COLOR)
- return img
- @csrf_exempt
- def facedetectDemo(request):
- result = {}
- if request.method == 'POST':
- if request.FILES['file'].get('image', None) is not None:
- img = read_image(stream = request.FILES['file'])
- else:
- result.update({
- "#faceNum":-1
- })
- return JsonResponse(result)
- if img.shape[2] == 3:
- imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
- else:
- imgGray = img
- values = face_detector.detectMultiScale(
- imgGray,
- scaleFactor=1.1,
- minNeighbors=5,
- minSize=(30, 30),
- falgs = cv2.CASCADE_SCALE_IMAGE
- )
- values = [
- (int(a),int(b),int(a+c),int(b+d))
- for (a,b,c,d) in values
- ]
- retval,buffer_img = cv2.imencode('.jpg',img)
- img64 = base64.b64encode(buffer_img)
- img64 = str(img64, 'utf-8')
- result['img64'] = img64
- return JsonResponse(result)
|