コード例 #1
0
ファイル: api.py プロジェクト: aldefalco/webguide
 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
コード例 #2
0
ファイル: api.py プロジェクト: aldefalco/webguide
 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
コード例 #3
0
ファイル: model.py プロジェクト: aldefalco/webguide
 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
コード例 #4
0
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)