| | 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)
|
| |
|
| | loaded_model = load_model('C:/files/kolia/GP/ml/model.h5')
|
| |
|
| |
|
| | 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
|
| |
|
| |
|
| | @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.'})
|
| |
|
| |
|