views.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. from django.shortcuts import render
  2. from django.shortcuts import HttpResponse
  3. from django.shortcuts import get_object_or_404
  4. from django.http import StreamingHttpResponse
  5. from django.core.paginator import Paginator
  6. from .models import Doc
  7. import os
  8. import numpy as np
  9. import urllib
  10. import json
  11. import cv2
  12. from django.views.decorators.csrf import csrf_exempt
  13. from django.http import JsonResponse
  14. import base64
  15. # Create your views here.
  16. def download(request):
  17. submenu = 'download'
  18. docList = Doc.objects.all().order_by('-publishDate')
  19. p = Paginator(docList, 5)
  20. if p.num_pages <= 1:
  21. pageData = ''
  22. else:
  23. page = int(request.GET.get('page', 1))
  24. newList = p.page(page)
  25. left = []
  26. right = []
  27. left_has_more = False
  28. right_has_more = False
  29. first = False
  30. last = False
  31. total_pages = p.num_pages
  32. page_range = p.page_range
  33. if page == 1:
  34. right = page_range[page:page + 2]
  35. print(total_pages)
  36. if right[-1] < total_pages - 1:
  37. right_has_more = True
  38. if right[-1] < total_pages:
  39. last = True
  40. elif page == total_pages:
  41. left = page_range[(page - 3) if (page - 3) > 0 else 0:page - 1]
  42. if left[0] > 2:
  43. left_has_more = True
  44. if left[0] > 1:
  45. first = True
  46. else:
  47. left = page_range[(page - 3) if (page - 3) > 0 else 0:page - 1]
  48. right = page_range[page:page + 2]
  49. if left[0] > 2:
  50. left_has_more = True
  51. if left[0] > 1:
  52. first = True
  53. if right[-1] < total_pages - 1:
  54. right_has_more = True
  55. if right[-1] < total_pages:
  56. last = True
  57. pageData = {
  58. 'left': left,
  59. 'right': right,
  60. 'left_has_more': left_has_more,
  61. 'right_has_more': right_has_more,
  62. 'first': first,
  63. 'last': last,
  64. 'total_pages': total_pages,
  65. 'page': page,
  66. }
  67. return render(
  68. request, 'docList.html', {
  69. 'active_menu': 'service',
  70. 'sub_menu': submenu,
  71. 'docList': docList,
  72. 'pageData': pageData,
  73. })
  74. def read_file(file_name, size):
  75. with open(file_name, mode='rb') as fp:
  76. while True:
  77. c = fp.read(size)
  78. if c:
  79. yield c
  80. else:
  81. break
  82. def getDoc(request, id):
  83. doc = get_object_or_404(Doc, id=id)
  84. update_to, filename = str(doc.file).split('/')
  85. filepath = '%s/media/%s/%s' % (os.getcwd(), update_to, filename)
  86. response = StreamingHttpResponse(read_file(filepath, 512))
  87. response['Content-Type'] = 'application/octet-stream'
  88. response['Content-Disposition'] = 'attachment;filename="{}"'.format(
  89. filename)
  90. return response
  91. def platform(request):
  92. submenu = 'platform'
  93. return render(request, 'platForm.html', {
  94. 'active_menu': 'service',
  95. 'sub_menu': submenu,
  96. })
  97. # html = '<html><body>人脸识别开放平台</body></html>'
  98. # return HttpResponse(html)
  99. def read_image(stream=None):
  100. if stream is not None:
  101. data_temp = stream.read()
  102. img = np.asarray(bytearray(data_temp), dtype="uint8")
  103. img = cv2.imdecode(img, cv2.IMREAD_COLOR)
  104. return img
  105. face_detector_path = "serviceApp\\haarcascade_frontalface_default.xml"
  106. face_detector = cv2.CascadeClassifier(face_detector_path)
  107. @csrf_exempt
  108. def facedetect(request):
  109. result = {}
  110. if request.method == "POST":
  111. if request.FILES.get("image", None) is not None:
  112. img = read_image(stream=request.FILES["image"])
  113. else:
  114. result.update({
  115. "#faceNum": -1,
  116. })
  117. return JsonResponse(result)
  118. if img.shape[2] == 3:
  119. img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  120. values = face_detector.detectMultiScale(img,
  121. scaleFactor=1.1,
  122. minNeighbors=5,
  123. minSize=(30, 30),
  124. flags=cv2.CASCADE_SCALE_IMAGE)
  125. values = [(int(a), int(b), int(a + c), int(b + d))
  126. for (a, b, c, d) in values]
  127. result.update({
  128. "#faceNum": len(values),
  129. "faces": values,
  130. })
  131. return JsonResponse(result)
  132. @csrf_exempt
  133. def facedetectDemo(request):
  134. result = {}
  135. if request.method == "POST":
  136. if request.FILES.get('image') is not None: #
  137. img = read_image(stream=request.FILES["image"])
  138. else:
  139. result["#faceNum"] = -1
  140. return JsonResponse(default)
  141. if img.shape[2] == 3:
  142. imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  143. else:
  144. imgGray = img
  145. values = face_detector.detectMultiScale(imgGray,
  146. scaleFactor=1.1,
  147. minNeighbors=5,
  148. minSize=(30, 30),
  149. flags=cv2.CASCADE_SCALE_IMAGE)
  150. values = [(int(a), int(b), int(a + c), int(b + d))
  151. for (a, b, c, d) in values]
  152. for (w, x, y, z) in values:
  153. cv2.rectangle(img, (w, x), (y, z), (0, 255, 0), 2)
  154. retval, buffer_img = cv2.imencode('.jpg', img)
  155. img64 = base64.b64encode(buffer_img)
  156. img64 = str(img64, encoding='utf-8')
  157. result["img64"] = img64
  158. return JsonResponse(result)