CV app docker fix
This commit is contained in:
@@ -18,11 +18,10 @@ RUN curl "https://drive.usercontent.google.com/download?id=1lHTrW1rmYoYnMSUlhLwq
|
|||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
RUN pip freeze
|
||||||
EXPOSE 5000
|
|
||||||
|
|
||||||
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "2", "app:app"]
|
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "2", "app:app"]
|
||||||
CMD ["uvicorn", "--port", "5000", "--workers", "2", "app:app"]
|
CMD ["uvicorn", "--host", "0.0.0.0", "--port", "5000", "--workers", "1", "--log-level", "info", "app:app"]
|
||||||
|
|
||||||
# docker build -t fetcher_cv .
|
# docker build -t fetcher_cv .
|
||||||
# docker run --rm -p 5000:5000 fetcher_cv
|
# docker run --rm -p 5000:5000 fetcher_cv
|
||||||
@@ -6,7 +6,7 @@ import numpy as np
|
|||||||
import cv2
|
import cv2
|
||||||
import traceback
|
import traceback
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[logging.StreamHandler()])
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[logging.StreamHandler()])
|
||||||
from cv_processor import process
|
from cv_processor import process
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@@ -16,6 +16,30 @@ class Item(BaseModel):
|
|||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
# Define the NiceGUI UI components
|
||||||
|
@ui.page("/")
|
||||||
|
def main_page():
|
||||||
|
async def handle_upload(e: events.UploadEventArguments) -> None:
|
||||||
|
ui.notify('Processing...')
|
||||||
|
# Read content -> image
|
||||||
|
nparr = np.frombuffer(e.content.read(), np.uint8)
|
||||||
|
img_np_bgr = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
|
||||||
|
# Async process
|
||||||
|
results = await run.io_bound(process, img_np_bgr)
|
||||||
|
|
||||||
|
# Display
|
||||||
|
with ui.dialog() as dialog:
|
||||||
|
# Encode
|
||||||
|
retval, buffer = cv2.imencode('.png', results.get("image"))
|
||||||
|
img_buffer_encoded = base64.b64encode(buffer).decode('utf-8')
|
||||||
|
img_encoded = "data:image/png;base64,{}".format(img_buffer_encoded)
|
||||||
|
content = ui.image(img_encoded).props('fit=scale-down')
|
||||||
|
dialog.open()
|
||||||
|
|
||||||
|
ui.upload(on_upload=handle_upload, auto_upload=True, on_rejected=lambda: ui.notify('Rejected!')).props('accept=image').classes('max-w-full')
|
||||||
|
|
||||||
|
ui.run_with(app, title="CV")
|
||||||
|
|
||||||
@app.post('/process')
|
@app.post('/process')
|
||||||
def process_image(item: Item):
|
def process_image(item: Item):
|
||||||
logging.info("POST /process")
|
logging.info("POST /process")
|
||||||
@@ -50,29 +74,3 @@ def process_image(item: Item):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.warning("Exception: {}".format(traceback.format_exc()))
|
logging.warning("Exception: {}".format(traceback.format_exc()))
|
||||||
return {"error": traceback.format_exc()}
|
return {"error": traceback.format_exc()}
|
||||||
|
|
||||||
# Define the NiceGUI UI components
|
|
||||||
@ui.page("/")
|
|
||||||
def main_page():
|
|
||||||
|
|
||||||
async def handle_upload(e: events.UploadEventArguments) -> None:
|
|
||||||
ui.notify('Processing...')
|
|
||||||
# Read content -> image
|
|
||||||
nparr = np.frombuffer(e.content.read(), np.uint8)
|
|
||||||
img_np_bgr = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
|
|
||||||
# Async process
|
|
||||||
results = await run.io_bound(process, img_np_bgr)
|
|
||||||
|
|
||||||
# Display
|
|
||||||
with ui.dialog() as dialog:
|
|
||||||
# Encode
|
|
||||||
retval, buffer = cv2.imencode('.png', results.get("image"))
|
|
||||||
img_buffer_encoded = base64.b64encode(buffer).decode('utf-8')
|
|
||||||
img_encoded = "data:image/png;base64,{}".format(img_buffer_encoded)
|
|
||||||
content = ui.image(img_encoded).props('fit=scale-down')
|
|
||||||
dialog.open()
|
|
||||||
|
|
||||||
ui.upload(on_upload=handle_upload, auto_upload=True, on_rejected=lambda: ui.notify('Rejected!')).props('accept=image').classes('max-w-full')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
ui.run_with(app, title="CV")
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[logging.StreamHandler()])
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[logging.StreamHandler()])
|
||||||
|
|
||||||
# Age
|
# Age
|
||||||
from mivolo.predictor import Predictor
|
from mivolo.predictor import Predictor
|
||||||
|
|||||||
Reference in New Issue
Block a user