philopater-mansour's picture
Upload 2 files
aaf1259 verified
import cv2
import numpy as np
from tensorflow.keras.models import load_model
from flask import Flask, request, jsonify
from PIL import Image
from transformers import AutoFeatureExtractor, AutoTokenizer, VisionEncoderDecoderModel
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
# Load the first model - Classfication -
loaded_model = load_model('C:/files/kolia/GP/ml/model.h5')
# Load the second model and tokenizer -- Genrate Report --
encoder_checkpoint = "google/vit-base-patch16-224-in21k"
decoder_checkpoint = "ahmedabdo/facebook-bart-base-finetuned"
feature_extractor = AutoFeatureExtractor.from_pretrained(encoder_checkpoint)
tokenizer = AutoTokenizer.from_pretrained(decoder_checkpoint)
model = VisionEncoderDecoderModel.from_pretrained(decoder_checkpoint).to('cpu')
def preprocess_image(image_path):
image = cv2.imread(image_path)
resized_image = cv2.resize(image, (224, 224))
input_image = np.expand_dims(resized_image, axis=0)
return input_image
def predict_image(image_path):
input_image = preprocess_image(image_path)
predictions = loaded_model.predict(input_image)
return predictions
def get_predicted_label(predictions):
int_to_label = {0: 'Arm', 1: 'Chest', 2: 'Knee', 3: 'Vertebrae'}
predicted_label = int_to_label[np.argmax(predictions)]
return predicted_label
def predict_second_model(image):
features = feature_extractor(image, return_tensors="pt").pixel_values.to("cpu")
caption = tokenizer.decode(model.generate(features, max_length=1024)[0], skip_special_tokens=True)
return caption
# Route to predict image label using the first model
@app.route('/predict', methods=['POST'])
def predict():
file = request.files['image']
if file.filename == '':
return jsonify({'error': 'No selected file. Please upload a chest X-ray image.'})
image_path = file.filename
file.save(image_path)
predictions = predict_image(image_path)
predicted_label = get_predicted_label(predictions)
if predicted_label == 'Chest':
img = Image.open(image_path).convert("RGB")
caption = predict_second_model(img)
return jsonify({'predicted_label': predicted_label,'caption': caption})
else:
return jsonify({'predicted_label': predicted_label, 'caption': 'Please upload a chest X-ray image.'})