File size: 1,511 Bytes
6bde7ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import tempfile
import requests
from src.bioclip.predict import TreeOfLifeClassifier, Rank
import logging

class PredictService:

    def __init__(self):
        self.classifier = TreeOfLifeClassifier()
        log_format = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
        logging.basicConfig(level=logging.INFO, format=log_format)
        self.logger = logging.getLogger()

    def download_image(self, url):
        self.logger.info(f'download_image({url})')
        response = requests.get(url)

        # Vérifier si la requête a réussi
        if response.status_code == 200:
            # Créer un fichier temporaire
            temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.jpg')

            # Écrire le contenu de l'image dans le fichier temporaire
            temp_file.write(response.content)
            temp_file.close()

            # Retourner le chemin du fichier temporaire
            return temp_file.name
        else:
            raise Exception("Error while downloading image. Status: {}".format(response.status_code))

    def predict(self, image_url=None):
        if image_url is None:
            raise Exception("expect image url")
        image_path = self.download_image(image_url)
        predictions = self.classifier.predict(image_path, Rank.SPECIES)
        for prediction in predictions:
            if 'file_name' in prediction:
                del prediction['file_name']
        return predictions