def _dump_processor(self): import inspect pymodule = inspect.getmodule(self.processor) pycode = inspect.getsource(pymodule) processor_path = self.helper.processor_path() processor_md5 = utils.md5(pycode) processor_md5 += str(time.time()) processor_name = utils.md5(processor_md5) output_file = os.path.join(processor_path, processor_name + ".py") utils.mkdir(processor_path) with open(output_file, "w") as file: file.write(pycode) utils.from_pyobj_to_module_attr( processor_name, self.desc.attr.map.data['processor_info'])
def get_hub_name(self): if self.hub_name is None: self.hub_name = md5(str(uuid.uuid1())[-12:]) + "-" + str( int(time.time())) with open(self.filepath, "w") as fp: fp.write(json.dumps(default_server_config)) return self.hub_name
def predict_image(module_name): if request.path.split("/")[-1] not in cv_module: return {"error": "Module {} is not available.".format(module_name)} req_id = request.data.get("id") global use_gpu, batch_size_dict img_base64 = request.form.getlist("image") extra_info = {} for item in list(request.form.keys()): extra_info.update({item: request.form.getlist(item)}) for key in extra_info.keys(): if isinstance(extra_info[key], list): extra_info[key] = utils.base64s_to_cvmats( eval(extra_info[key][0])["b64s"]) if isinstance( extra_info[key][0], str ) and "b64s" in extra_info[key][0] else extra_info[key] file_name_list = [] if img_base64 != []: for item in img_base64: ext = item.split(";")[0].split("/")[-1] if ext not in ["jpeg", "jpg", "png"]: return {"result": "Unrecognized file type"} filename = req_id + "_" \ + utils.md5(str(time.time()) + item[0:20]) \ + "." \ + ext img_data = base64.b64decode(item.split(',')[-1]) file_name_list.append(filename) with open(filename, "wb") as fp: fp.write(img_data) else: file = request.files.getlist("image") for item in file: file_name = req_id + "_" + item.filename item.save(file_name) file_name_list.append(file_name) module = default_module_manager.get_module(module_name) predict_func_name = cv_module_method.get(module_name, "") if predict_func_name != "": predict_func = eval(predict_func_name) else: module_type = module.type.split("/")[-1].replace("-", "_").lower() predict_func = eval("predict_" + module_type) batch_size = batch_size_dict.get(module_name, 1) if file_name_list == []: file_name_list = None if extra_info == {}: extra_info = None results = predict_func(module, file_name_list, req_id, batch_size, extra_info) r = {"results": str(results)} return r
def predict_iamge(module_name): global results_dict req_id = request.data.get("id") img_base64 = request.form.get("image", "") if img_base64 != "": img_base64 = request.form.get("image", "") ext = img_base64.split(";")[0].split("/")[-1] if ext not in ["jpeg", "jpg", "png"]: return {"result": "Unrecognized file type"} filename = utils.md5(str(time.time()) + str(img_base64)) + "." + ext base64_head = img_base64.split(',')[0] img_data = base64.b64decode(img_base64.split(',')[-1]) with open(filename, "wb") as fp: fp.write(img_data) else: file = request.files["image"] filename = file.filename ext = file.filename.split(".")[-1] if ext not in ["jpeg", "jpg", "png"]: return {"result": "Unrecognized file type"} base64_head = "data:image/" + ext + ";base64" filename = utils.md5(filename) + '.' + ext file.save(filename) score = time.time() file_list = [filename] if queues_dict[module_name].qsize( ) + 1 > queues_dict[module_name].get_attribute("maxsize"): return {"result": "Too many visitors now, please come back later."} data_2_item(file_list, req_id, score, module_name) data_num = len(file_list) results = [] result_len = 0 start_time = time.time() while result_len != data_num: result_len = len(results_dict.get(req_id, [])) if time.time() - start_time > time_out: results_dict.pop(req_id, None) return {"result": "Request time out."} results = results_dict.get(req_id) results_dict.pop(req_id, None) results = [i[1] for i in sorted(results, key=lambda k: k[0])] filename = results[0].get("path") ext = filename.split(".")[-1] if filename is not None: output_file = os.path.join("./output", filename) if output_file is not None and os.path.exists(output_file): with open(output_file, "rb") as fp: output_img_base64 = base64.b64encode(fp.read()) os.remove(filename) os.remove(output_file) results = { "desc": str(results[0]["data"]), "output_img": base64_head + "," + str(output_img_base64).replace("b'", "").replace("'", "") } return {"result": results} return {"result": str(results)}
def before_request(): request.data = { "id": utils.md5(request.remote_addr + str(time.time())) } print(request.remote_addr) pass
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License" # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import time import uuid from paddlehub.common.utils import md5 HUB_SERVERS = ["http://paddlepaddle.org.cn/paddlehub"] hub_name = md5(str(uuid.uuid1())[-12:]) + "-" + str(int(time.time())) default_server_config = { "server_url": HUB_SERVERS, "resource_storage_server_url": "https://bj.bcebos.com/paddlehub-data/", "debug": False, "log_level": "DEBUG", "hub_name": hub_name }
def predict_image(module_name): if request.path.split("/")[-1] not in cv_module_info.modules_info: return {"error": "Module {} is not available.".format(module_name)} module_info = cv_module_info.get_module_info(module_name) if module_info["code_version"] == "v2": results = {} # results = predict_v2(module_info, inputs) results.update({ "Warnning": "This usage is out of date, please " "use 'application/json' as " "content-type to post to " "/predict/%s. See " "'https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.6/docs/tutorial/serving.md' for more details." % (module_name) }) return gen_result("-1", results, "") req_id = request.data.get("id") img_base64 = request.form.getlist("image") extra_info = {} for item in list(request.form.keys()): extra_info.update({item: request.form.getlist(item)}) for key in extra_info.keys(): if isinstance(extra_info[key], list): extra_info[key] = utils.base64s_to_cvmats( eval(extra_info[key][0])["b64s"]) if isinstance( extra_info[key][0], str ) and "b64s" in extra_info[key][0] else extra_info[key] file_name_list = [] if img_base64 != []: for item in img_base64: ext = item.split(";")[0].split("/")[-1] if ext not in ["jpeg", "jpg", "png"]: return gen_result("-1", "Unrecognized file type", "") filename = req_id + "_" \ + utils.md5(str(time.time()) + item[0:20]) \ + "." \ + ext img_data = base64.b64decode(item.split(',')[-1]) file_name_list.append(filename) with open(filename, "wb") as fp: fp.write(img_data) else: file = request.files.getlist("image") for item in file: file_name = req_id + "_" + item.filename item.save(file_name) file_name_list.append(file_name) module = module_info["module"] predict_func_name = cv_module_info.cv_module_method.get(module_name, "") if predict_func_name != "": predict_func = eval(predict_func_name) else: module_type = module.type.split("/")[-1].replace("-", "_").lower() predict_func = eval("predict_" + module_type) if file_name_list == []: file_name_list = None if extra_info == {}: extra_info = None results = predict_func(module_info, file_name_list, req_id, extra_info) return results