Bitirme commited on
Commit
7b52e04
1 Parent(s): 5a415f0

update file

Browse files
Files changed (2) hide show
  1. Dockerfile +9 -6
  2. app.py → api.py +24 -20
Dockerfile CHANGED
@@ -1,15 +1,18 @@
1
- # Temel imaj olarak Python 3.10 kullanıyoruz
2
- FROM python:3.10-slim
3
 
4
  # Çalışma dizinini oluştur
5
  WORKDIR /app
6
 
7
- # Gerekli paketlerin kurulumunu yap
8
  COPY requirements.txt requirements.txt
9
  RUN pip install --no-cache-dir -r requirements.txt
10
 
11
- # Uygulama dosyalarını kopyala
12
  COPY . .
13
 
14
- # Streamlit ve FastAPI uygulamalarını çalıştır
15
- CMD ["streamlit", "run", "app.py", "--server.port=8501"]
 
 
 
 
1
+ # Resmi Python görüntüsünü kullanıyoruz, versiyon 3.9
2
+ FROM python:3.9-slim
3
 
4
  # Çalışma dizinini oluştur
5
  WORKDIR /app
6
 
7
+ # Gereksinimler dosyasını kopyala ve gerekli paketleri yükle
8
  COPY requirements.txt requirements.txt
9
  RUN pip install --no-cache-dir -r requirements.txt
10
 
11
+ # Uygulama dosyasını kopyala
12
  COPY . .
13
 
14
+ # Model dosyasını kopyala (Eğer model dosyası bu dizinde ise)
15
+ # COPY path/to/CLAHE_ODIR-ORJ-512_inception_v3.h5 .
16
+
17
+ # Uygulama başlatma komutu
18
+ CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "7860"]
app.py → api.py RENAMED
@@ -1,14 +1,12 @@
1
  from fastapi import FastAPI, File, UploadFile
2
- from fastapi.responses import JSONResponse
3
- import tensorflow as tf
4
  import numpy as np
5
- from PIL import Image
6
  from io import BytesIO
7
- import uvicorn
 
8
 
9
  app = FastAPI()
10
 
11
- # Model yükleniyor
12
  MODEL = tf.keras.models.load_model("CLAHE_ODIR-ORJ-512_inception_v3.h5")
13
 
14
  # Sınıf isimleri
@@ -17,29 +15,35 @@ class_names = [
17
  'Hypertension', 'Normal', 'Others', 'Pathological Myopia'
18
  ]
19
 
20
- def predict(image):
21
- image = np.array(image)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  image = tf.image.resize(image, (229, 229))
 
23
  image = tf.cast(image, tf.float32) / 255.0
 
24
  img_batch = np.expand_dims(image, 0)
 
 
25
  predictions = MODEL.predict(img_batch)
26
  predicted_class = class_names[np.argmax(predictions[0])]
27
  confidence = np.max(predictions[0])
28
- return predicted_class, confidence
29
 
30
- @app.post("/predict")
31
- async def predict_api(file: UploadFile = File(...)):
32
- image_data = await file.read()
33
- try:
34
- image = Image.open(BytesIO(image_data))
35
- except IOError:
36
- return JSONResponse(content={"error": "Invalid image format"}, status_code=400)
37
-
38
- predicted_class, confidence = predict(image)
39
  return {
40
  'class': predicted_class,
41
  'confidence': float(confidence)
42
  }
43
-
44
- if __name__ == "__main__":
45
- uvicorn.run(app, host="0.0.0.0", port=8000)
 
1
  from fastapi import FastAPI, File, UploadFile
 
 
2
  import numpy as np
 
3
  from io import BytesIO
4
+ from PIL import Image
5
+ import tensorflow as tf
6
 
7
  app = FastAPI()
8
 
9
+ # Model yükleniyor, yüklenen modelin yolunu kontrol ediniz.
10
  MODEL = tf.keras.models.load_model("CLAHE_ODIR-ORJ-512_inception_v3.h5")
11
 
12
  # Sınıf isimleri
 
15
  'Hypertension', 'Normal', 'Others', 'Pathological Myopia'
16
  ]
17
 
18
+ @app.get("/ping")
19
+ async def ping():
20
+ return "Hello, I am alive"
21
+
22
+ def read_file_as_image(data) -> np.ndarray:
23
+ image = np.array(Image.open(BytesIO(data)))
24
+ return image
25
+
26
+ @app.post("/predict")
27
+ async def predict(file: UploadFile = File(...)):
28
+ image_data = await file.read()
29
+ try:
30
+ image = read_file_as_image(image_data)
31
+ except IOError:
32
+ return {"error": "Invalid image format"}
33
+
34
+ # Görüntüyü modelin beklediği boyuta getirme
35
  image = tf.image.resize(image, (229, 229))
36
+ # Görüntüyü normalize etme
37
  image = tf.cast(image, tf.float32) / 255.0
38
+ # Batch haline getirme
39
  img_batch = np.expand_dims(image, 0)
40
+
41
+ # Model üzerinde tahmin yapma
42
  predictions = MODEL.predict(img_batch)
43
  predicted_class = class_names[np.argmax(predictions[0])]
44
  confidence = np.max(predictions[0])
 
45
 
 
 
 
 
 
 
 
 
 
46
  return {
47
  'class': predicted_class,
48
  'confidence': float(confidence)
49
  }