Flask API всегда прогнозирует один и тот же класс при вызове из PHP-скриптаPython

Программы на Python
Ответить
Anonymous
 Flask API всегда прогнозирует один и тот же класс при вызове из PHP-скрипта

Сообщение Anonymous »

У меня есть Flask API, предназначенный для прогнозирования принадлежности загруженного рентгеновского изображения грудной клетки к классу НОРМАЛЬНЫЙ или ПНЕВМОНИЯ. когда я вызываю API из PHP-скрипта, прогноз всегда ПНЕВМОНИЯ (100,00%), независимо от входного изображения.
Вот моя настройка:
Код API Flask

Код: Выделить всё

from flask import Flask, request, jsonify
from tensorflow.keras.models import load_model
from PIL import Image
import numpy as np
import os

app = Flask(__name__)

# Load the pre-trained model
model = load_model('../doctor/NU_detection_notverygood.keras')

# Class names for predictions
class_names = ['NORMAL', 'PNEUMONIA']

@app.route('/')
def home():
return "PNEUMONIA Detection API is running!"

@app.route('/predict', methods=['POST'])
def predict():
if 'image' not in request.files:
return jsonify({'error': 'No image file provided'}), 400

try:
image = request.files['image']
img = Image.open(image).convert('RGB')
img = img.resize((224, 224))

img_array = np.array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)

predictions = model.predict(img_array)
predicted_class = 1 if predictions[0] > 0.5 else 0
predicted_label = class_names[predicted_class]
probability = predictions[0][0]

return jsonify({
'prediction': predicted_label,
'probability': float(probability),
'confidence': float(probability)
})
except Exception as e:
return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)

PHP-код для отправки изображения

Код: Выделить всё

if (isset($_POST['submit'])) {
if (isset($_FILES['img']) && $_FILES['img']['error'] == 0) {
$image = $_FILES['img']['name'];
$image_tmp_name = $_FILES['img']['tmp_name'];
$folder = 'uploaded_img/';
$image_folder = $folder . $image;

if (!is_dir($folder)) {
mkdir($folder, 0777, true);
}

if (move_uploaded_file($image_tmp_name, $image_folder)) {
$url = 'http://localhost:5000/predict';
$cfile = new CURLFile($image_folder, 'image/jpeg', $image);
$data = array('image' => $cfile);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

if ($response === false) {
echo "Error in prediction!";
} else {
$result = json_decode($response, true);
$prediction = $result['prediction'] ?? 'No result';
$probability = $result['probability'] ?? 'No probability data';
echo "Prediction: $prediction, Probability: $probability";
}
} else {
echo "Failed to upload the file.";
}
}
}
Проблема:
  • Когда я использую Python в Colab и тестирую модель с теми же изображениями, прогнозы точны (НОРМАЛЬНАЯ или ПНЕВМОНИЯ).
  • Когда изображение отправляется с помощью PHP-скрипта, API всегда прогнозирует ПНЕВМОНИЮ (100,00 %). ) для каждого изображения, даже для изображений, которые правильно классифицируются как НОРМАЛЬНО при тестировании в совместной лаборатории.
Шаги, которые я пробовал:
  • Проверено, что Flask API корректно работает со сценариями Python.
  • Зарегистрирован объект request.files['image'] в Flask, чтобы подтвердить, что изображение передается полученный из PHP-скрипта. Кажется, файл получен правильно.
  • Подтверждено, что файл загружается и передается в CURLFile в PHP.
  • Убедился, что сценарий PHP использует правильная кодировка данных multipart/form для запроса.
  • Изменены размеры и нормализованы изображения в Flask API.
Что может пойти не так?
  • Повреждается ли файл во время загрузки или передачи в сценарии PHP?
  • Не удается ли CURLFile в PHP отправить файл в правильном формате ?
  • Существует ли несоответствие в обработке данных изображения при получении через PHP и Python?
API Flask должен возвращать точные прогнозы (НОРМАЛЬНЫЕ или ПНЕВМОНИЯ) независимо от того, того, загружено ли изображение через скрипт PHP или скрипт Python.
Почему Flask API всегда возвращает PNEUMONIA (100,00%), когда запрос поступает от PHP?
Как можно Я гарантирую, что сценарий PHP правильно отправляет файл изображения так же, как это делают сценарии Python?
Будем очень признательны за любые идеи и предложения. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... php-script
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»