def post(self, guide_id): args = self.parser.parse_args() try: guide = Guide.query.get(guide_id) order = args['order'] if args['order'] else guide.pages.count() page = Page(guide, order, args['comment'], save_base64_image(args['src']), args['region'] ) db.session.add(page) db.session.commit() return marshal(page, pages_fields), 201 except Exception as e: log.exception(e.message) traceback.print_exc() return { 'error': e.message }, 501
def put(self, guide_id, id): args = self.parser.parse_args() try: guide = Guide.query.get(guide_id) page = guide.pages.filter_by(id=id).first() if args['src']: page.image = save_base64_image(args['src']) if args['comment']: page.comment = args['comment'] if args['region']: page.comment = args['region'] db.session.commit() return marshal(page, page_fields), 201 except Exception as e: log.exception(e.message) traceback.print_exc() return { 'error': e.message }, 501
def create(self, guide_id, **args): page = args image = save_base64_image(page["src"]) del page["src"] with r.pipeline() as pipe: while True: # todo: change to counter try: pipe.watch(PAGE_SEQ_KEY) id = pipe.get(PAGE_SEQ_KEY) page["id"] = int(0 if not id else id) + 1 page["image"] = image pipe.multi() pipe.set(PAGE_SEQ_KEY, id) pipe.zadd(PAGE_SET_KEY % guide_id, args["order"], id) pipe.set(PAGE_OBJ_KEY % id, json.dumps(page)) # todo: add publish signal for es pipe.execute() break except redis.WatchError: continue return page
def predict(): res = data = {} error_code = 1 error_msg = "" global taskid taskid += 1 taskid_dir = "%06d" % taskid if not os.path.exists("tasks"): os.mkdir("tasks") full_taskid_dir = os.path.join("tasks", taskid_dir) if not os.path.exists(full_taskid_dir): os.mkdir(full_taskid_dir) log_dir = "log" log_file = "error.log" log_path = os.path.join(log_dir, log_file) mklogdir_writelog(log_file) log = Logger(log_path, level='error') image_data_value = "" s = time.time() if request.method == "POST": if is_request_data("image", request.data): req_data = request.get_json() # print(request.data) # req_data = json.loads(request.data.decode("utf-8"), strict=False) image_data = req_data["image"] image_data_value = "" if is_URL(image_data): image_name = get_name(image_data) image_data_value = image_data if not image_name.split(".")[-1] in IMG_EXT: error_code = 222102 error_msg = "Wrong image format, should be [.jpg, .jpeg, .png, .bmp]" log.logger.error("{}-{}-{}-{}".format( taskid_dir, image_data_value, error_code, error_msg)) try: image = url_cv2image(image_data) except Exception: error_code = 222103 error_msg = "Can't download image" res = {} log.logger.error("{}-{}-{}-{}".format( taskid_dir, image_data_value, error_code, error_msg)) else: result = detector.object_detector(net, image) res = convert_result(result) error_code = 0 download_image(image_data, full_taskid_dir, image_name) else: try: image = base64_cv2image(image_data) except Exception: error_code = 222104 error_msg = "Wrong string to an image" image_data_value = "wrong_str" res = {} log.logger.error("{}-{}-{}-{}".format( taskid_dir, image_data_value, error_code, error_msg)) else: result = detector.object_detector(net, image) res = convert_result(result) error_code = 0 image_data_value = "base64str" # convert base64str to image # save image to taskid_dir/image.ext save_base64_image( image_data, os.path.join(full_taskid_dir, taskid_dir + ".jpg")) else: error_code = 222101 error_msg = "Not a vaild key in requested data" log.logger.error("{}-{}-{}".format(taskid_dir, error_code, error_msg)) res.update({"taskid": taskid, "image": image_data_value}) data.update({"code": error_code, "message": error_msg, "data": res}) # data = {"image":image_data_value, "code": 0, "objects":result["names"], "rect":result["objects"]} print(" - API takes {:.3f} seconds!\n".format(time.time() - s)) return jsonify(data)