async def predict_scene(image: UploadFile = File(...)): try: contents = await image.read() image = Image.open(io.BytesIO(contents)) resized_image = image.resize((scene_input_width, scene_input_height), Image.ANTIALIAS) results = classify_image(scene_interpreter, image=resized_image) label_id, prob = results[0] data = {} data["label"] = scene_labels[label_id] data["confidence"] = prob data["success"] = True return data except: e = sys.exc_info()[1] raise HTTPException(status_code=500, detail=str(e))
async def predict_face(image: UploadFile = File(...)): try: contents = await image.read() image = Image.open(io.BytesIO(contents)) image_width = image.size[0] image_height = image.size[1] # Format data and send to interpreter resized_image = image.resize((face_input_width, face_input_height), Image.ANTIALIAS) input_data = np.expand_dims(resized_image, axis=0) face_interpreter.set_tensor(face_input_details[0]["index"], input_data) # Process image and get predictions face_interpreter.invoke() boxes = face_interpreter.get_tensor(face_output_details[0]["index"])[0] classes = face_interpreter.get_tensor( face_output_details[1]["index"])[0] scores = face_interpreter.get_tensor( face_output_details[2]["index"])[0] data = {} faces = [] for i in range(len(scores)): if not classes[i] == 0: # Face continue single_face = {} single_face["userid"] = "unknown" single_face["confidence"] = float(scores[i]) single_face["y_min"] = int(float(boxes[i][0]) * image_height) single_face["x_min"] = int(float(boxes[i][1]) * image_width) single_face["y_max"] = int(float(boxes[i][2]) * image_height) single_face["x_max"] = int(float(boxes[i][3]) * image_width) if single_face["confidence"] < MIN_CONFIDENCE: continue faces.append(single_face) data["predictions"] = faces data["success"] = True return data except: e = sys.exc_info()[1] raise HTTPException(status_code=500, detail=str(e))