analyze.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import uuid, json
  2. from service.video_analyzer import BaseVideoAnalyzer
  3. # from service.video.Video3DAnalyzer import Video3DAnalyzer
  4. from db import db
  5. from flask import request
  6. from db.task import Task
  7. from worker.thread_pool import pool
  8. from route.util import make_response
  9. from flask import Blueprint
  10. from service.StandingPhotoAnalyzer import StandingPhotoAnalyzer
  11. import logging
  12. logging.basicConfig(format='%(asctime)s - %(name)s[line:%(lineno)d] - %(levelname)s: %(message)s',
  13. level=logging.DEBUG)
  14. bp = Blueprint("analyze", __name__, url_prefix='/')
  15. def callback_generator(task_uuid):
  16. def callback(status, **kwargs):
  17. try:
  18. from app import app
  19. with app.app_context():
  20. task = Task.query.get(task_uuid)
  21. task.status = status
  22. if status == 'FINISHED':
  23. task.result = json.dumps(kwargs['result'])
  24. if status == 'ERROR':
  25. logging.error("error analyzing: ", exc_info=kwargs['error'])
  26. db.session.commit()
  27. logging.debug("calling to" + status)
  28. except Exception as e:
  29. logging.debug("nmsl", exc_info=e)
  30. return callback
  31. @bp.route("photos/analysis", methods=['POST'])
  32. def photo_analysis():
  33. req = request.get_json()
  34. ana = StandingPhotoAnalyzer(req['front'], req['right'], req['height'])
  35. task_uuid = str(uuid.uuid4())
  36. new_task = Task(task_uuid, 'PHOTO_STANDINGPOSE')
  37. db.session.add(new_task)
  38. db.session.commit()
  39. # ana.analyze(callback_generator(task_uuid))
  40. pool.submit(ana.analyze, callback_generator(task_uuid))
  41. return make_response(201, "success", {'task_uuid' : task_uuid})
  42. @bp.route("videos/analysis", methods=['POST'])
  43. def video_analysis():
  44. req = request.get_json()
  45. # ana_3d = Video3DAnalyzer()
  46. ana = BaseVideoAnalyzer(video_uuid=req['video_uuid'])
  47. task_uuid = str(uuid.uuid4())
  48. new_task = Task(task_uuid, "VIDEO_CRUNCH")
  49. db.session.add(new_task)
  50. db.session.commit()
  51. pool.submit(ana.analyze, callback_generator(task_uuid))
  52. return make_response(201, "success", {'task_uuid' : task_uuid})