Added image classification

This commit is contained in:
Alex Tran 2022-02-16 11:02:20 -06:00
parent b7b86151e8
commit bdd48f80e0
7 changed files with 77 additions and 35 deletions

View file

@ -1,18 +1,17 @@
version: '3.8'
version: "3.8"
services:
immich_server:
image: immich-server-dev:1.0.0
build:
context: .
context: ../server
target: development
dockerfile: ./Dockerfile
dockerfile: ../server/Dockerfile
command: npm run start:dev
expose:
expose:
- "3000"
volumes:
- .:/usr/src/app
- ../server:/usr/src/app
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /usr/src/app/node_modules
env_file:
@ -27,7 +26,7 @@ services:
container_name: immich_redis
image: redis:6.2
networks:
- immich_network
- immich_network
database:
container_name: immich_postgres
@ -44,7 +43,7 @@ services:
ports:
- 5432:5432
networks:
- immich_network
- immich_network
nginx:
container_name: proxy_nginx
@ -61,7 +60,36 @@ services:
depends_on:
- immich_server
immich_tf_fastapi:
container_name: immich_tf_fastapi
image: tensor_flow_fastapi:1.0.0
restart: always
command: uvicorn app.main:app --proxy-headers --host 0.0.0.0 --port 8000 --reload
build:
context: ../machine_learning
target: gpu
dockerfile: ../machine_learning/Dockerfile
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
volumes:
- ../machine_learning/app:/code/app
- ${UPLOAD_LOCATION}:/code/app/upload
ports:
- 2285:8000
expose:
- "8000"
depends_on:
- database
networks:
- immich_network
networks:
immich_network:
volumes:
pgdata:
pgdata:

View file

@ -67,14 +67,8 @@ services:
command: uvicorn app.main:app --proxy-headers --host 0.0.0.0 --port 8000 --reload
build:
context: ../machine_learning
target: cpu
dockerfile: ../machine_learning/Dockerfile
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
volumes:
- ../machine_learning/app:/code/app
- ${UPLOAD_LOCATION}:/code/app/upload
@ -87,7 +81,6 @@ services:
networks:
- immich_network
networks:
immich_network:
volumes:

View file

@ -1 +1,2 @@
app/__pycache__
app/__pycache__
/devenv

View file

@ -1,4 +1,5 @@
FROM tensorflow/tensorflow:latest-gpu
## GPU Build
FROM tensorflow/tensorflow:latest-gpu as gpu
WORKDIR /code
@ -8,4 +9,14 @@ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8000", "--reload"]
## CPU BUILD
FROM python:3.8 as cpu
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app

View file

@ -1,31 +1,40 @@
from typing import Optional
from fastapi import FastAPI
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np
import os
from tensorflow.keras.applications import InceptionV3
from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
IMG_SIZE = 299
PREDICTION_MODEL = InceptionV3(weights='imagenet')
app = FastAPI()
@app.get("/")
def read_root():
return os.getcwd()
return "ok"
@app.get("/predict")
def predict():
model = VGG16(weights='imagenet', include_top=False)
@app.get("/predict/{image_name}")
def predict(image_name: str):
img_path = './app/upload/db6e94e1-ab1d-4ff0-a3b7-ba7d9e7b9d84/thumb/76f0308a9a53080e/zMGrPdjRoOU.jpeg'
img = image.load_img(img_path, target_size=(224, 224))
img_path = f'./app/upload/eb077301-2773-4ef1-aa2a-215ceb8a4383/thumb/C37F22E9-5F07-4DCA-A3EB-5BCCE93270C0/{image_name}'
img = image.load_img(img_path, target_size=(IMG_SIZE, IMG_SIZE))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
features = model.predict(x)
preds = PREDICTION_MODEL.predict(x)
result = decode_predictions(preds, top=3)[0]
payload = []
for _, value, _ in result:
payload.append(value)
return "ok"
return payload
def setup():
pass

View file

@ -1,6 +1,6 @@
fastapi>=0.68.0,<0.69.0
pydantic>=1.8.0,<2.0.0
uvicorn>=0.15.0,<0.16.0
# tensorflow==2.2.0
# numpy==1.22.2
tensorflow==2.8.0
numpy==1.22.2
pillow==9.0.1