Je suis en train de mettre en place une API python sur hugging face que je dois avoir finis pour ce soir mais j'ai constament un message d'erreur. J'ai passé des heures à essayer de le résoudre mais suis maintenant désespéré.
import gradio as gr
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import load_model
import pandas as pd
import numpy as np
dataCsv = pd.read_csv('birds.csv')
from tensorflow.keras.preprocessing import image
def display_image_and_prediction(Oiseau):
model = load_model('mon_modele')
generator = np.load('test_data.npy')
Oiseau = Oiseau.resize((224, 224))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array /= 255.0
prediction = model.predict(img_array)
predicted_class = np.argmax(prediction)
predicted_class_name = generator[predicted_class]
scientificName = dataCsv.loc[dataCsv["labels"]==predicted_class_name,"scientific name"].iloc[0]#récupération du nom scientifique de cette oiseau
return predicted_class, scientificName
iface = gr.Interface(fn=display_image_and_prediction, inputs="image", outputs=["text","text"])
iface.launch(share=True)
Ce code récupère une image, la redimensionne et la normalise et puis applique mon model d'IA dessu. A la fin il récupère le nom scientifique équivalent grâce à birds.csv. Le fichier test_data devrait en réalliter s'appeler index.
Voci le code d'une version précédente ou nous avions utiliser Flask.
from flask import Flask, render_template, request, jsonify
from tensorflow.keras.models import load_model
import pandas as pd
import base64
from io import BytesIO
from PIL import Image
import numpy as np
app = Flask(__name__)
with app.app_context():
model = load_model('mon_modele')
@app.route('/', methods=['GET'])
def index():
if request.method == "GET":
return render_template('index.html')
@app.route('/handleImage', methods=['POST'])
def handleImage():
if request.method == "POST":
data = request.get_json()
image_data = data.get('image')
jpeg_base64_data = image_data
jpeg_base64_data = jpeg_base64_data.replace("data:image/jpeg;base64,", "")
# Convertir la base64 en bytes
jpeg_bytes = base64.b64decode(jpeg_base64_data)
# Charger l'image depuis les bytes
image = Image.open(BytesIO(jpeg_bytes))
target_size = (224, 224)
image = image.resize(target_size)
img_array = np.array(image)
img_array = np.expand_dims(img_array, axis=0)
img_array = img_array / 255.0 # Normaliser l'image
dataCsv = pd.read_csv('birds.csv')
test_data = np.load('test_data.npy')
def display_image_and_prediction(model, img_array):
prediction = model.predict(img_array)
predicted_class = np.argmax(prediction)
predicted_class_name = test_data[predicted_class]; # Nom de l'oiseau
print("Nom de l'oiseau :", predicted_class_name)
scientificName = dataCsv.loc[dataCsv["labels"] == predicted_class_name, "scientific name"].iloc[0] # Récupération du nom scientifique de cet oiseau
print("Nom scientifique :", scientificName)
return predicted_class_name, scientificName
predicted_class_name, scientificName = display_image_and_prediction(model, img_array)
result = {'result': predicted_class_name, 'sname':scientificName}
return jsonify(result)
@app.route('/documentation')
def documentation():
return render_template('documentation.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=81)
Merci énormément pour vos retours, c'est la première API que je mets en place.
- Edité par altrastorique 31 janvier 2024 à 17:01:27
Je suis en train de mettre en place une API python sur hugging face que je dois avoir finis pour ce soir mais j'ai constament un message d'erreur.
C'est l'info là plus importante et vous ne là mettez pas !
Surtout que vos codes ne sont pas testables, nous avons pas de fichiers csv et npy à disposition.
- Edité par fred1599 31 janvier 2024 à 15:34:46
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Sans le message d'erreur, est-on supposé lire votre code pour deviner ce qui ne va pas? ou bien essayer de le faire tourner et risquer de rencontrer des erreurs sans rapport avec celle que vous cherchez à comprendre? On va juste perdre son temps (et vous ne serez pas plus avancé).
Pourtant tu as dit explicitement dans ton 1er post que tu as toujours le même message d'erreur, ce qui veut dire que tu en vois .... mais tu nous ne l'a pas donné. Donc tu as un message ou pas en vrai ?
Excusez moi pour la confusion. Hugging Face propose d'executer en ligne l'API dans l'onglet App, accessible dupuis le lien suivant:https://huggingface.co/spaces/altrastorique/BirdsAi_API. Mais le seul problème ai(je vous laisse essayer) que lorsque vous mettez une image il y a seulement écris ERROR sur les outputs sans plus d'indications. Et je n'ai rien trouvé sur comment réussir à obtenir ce message d'erreur plus précis qui nous aiderais, d'ou mes difficultés.
Merci beaucoup
- Edité par altrastorique 31 janvier 2024 à 16:36:16
bon, j'ai regardé un peu, quand on regarde les exemples qui ont une image en entrée, il est passé gr.Image(..) en input de gr.interface, en passant le mot clé "image" on utilise les paramètres par défaut, soit ici, l'image est récupéré par défaut via numpy, or ce n'est pas ce que ta fonction attend, me semble-t-il. => https://www.gradio.app/docs/image
bizarre qu'une erreur ne soit pas générée pour cela
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
et il charge maintenant plus longtemps avant de se cracher ce qui doit signifier que c'était bel et bien une erreur. En ce qui concerne l'entrée de gr.interface j'ai réctifié le code en mettant:
import gradio as gr
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import load_model
import pandas as pd
import numpy as np
from tensorflow.keras.preprocessing import image
def display_image_and_prediction(Oiseau):
model = load_model('mon_modele/mon_modele')
generator = np.load('test_data.npy')
dataCsv = pd.read_csv('birds.csv')
Oiseau_resized= np.resize(Oiseau,(224, 224))
#img_array = image.img_to_array(img)
#img_array = np.array(Oiseau_resized)
img_array = np.expand_dims(Oiseau_resized, axis=0)
img_array /= 255.0
prediction = model.predict(img_array)
predicted_class = np.argmax(prediction)
predicted_class_name = generator[predicted_class]
scientificName = dataCsv.loc[dataCsv["labels"]==predicted_class_name,"scientific name"].iloc[0]#récupération du nom scientifique de cette oiseau
return predicted_class, scientificName
iface = gr.Interface(fn=display_image_and_prediction, inputs="image", outputs=["text","text"])
iface.launch()
Mais celà ne marche toujours pas. J'essaye d'utiliser Docker pour l'executer localement afin d'avoir un message d'erreur.
Pour quelque chose d'urgent, vous lâchez vite le bébé !
ça ne marche pas ne définit pas ce qui se passe, pas de message d'erreur ?
si vous n'avez pas de message d'erreur, qu'attend t-on comme résultat ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
File "/home/user/app/app.py", line 19, in display_image_and_prediction
img_array /= 255.0
numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc 'divide' output from dtype('float64') to dtype('uint8')
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)