Tidy
parent
50db745a97
commit
8d9322137c
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"python.pythonPath": "venv/bin/python3"
|
||||
}
|
|
@ -9,5 +9,10 @@ $ source venv/bin/activate
|
|||
$ pip install --upgrade -r requirements.txt
|
||||
```
|
||||
|
||||
Now run:
|
||||
```
|
||||
$ python3 app/server.py serve
|
||||
```
|
||||
|
||||
## References
|
||||
* This code is a fork of https://github.com/render-examples/fastai-v3
|
||||
|
|
|
@ -1,69 +1,41 @@
|
|||
### Original -> https://github.com/render-examples/fastai-v3/blob/master/app/server.py
|
||||
import aiohttp
|
||||
import asyncio
|
||||
import uvicorn
|
||||
from fastai import *
|
||||
from fastai.vision import *
|
||||
from pathlib import Path
|
||||
import sys
|
||||
from io import BytesIO
|
||||
from starlette.applications import Starlette
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
from starlette.responses import HTMLResponse, JSONResponse
|
||||
from starlette.staticfiles import StaticFiles
|
||||
|
||||
export_file_url = 'https://www.dropbox.com/s/6bgq8t6yextloqp/export.pkl?raw=1'
|
||||
export_file_name = 'export.pkl'
|
||||
|
||||
classes = ['black', 'grizzly', 'teddys']
|
||||
path = Path(__file__).parent
|
||||
|
||||
app = Starlette()
|
||||
app.add_middleware(CORSMiddleware, allow_origins=['*'], allow_headers=['X-Requested-With', 'Content-Type'])
|
||||
app.mount('/static', StaticFiles(directory='app/static'))
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_headers=["X-Requested-With", "Content-Type"],
|
||||
)
|
||||
app.mount("/static", StaticFiles(directory="app/static"))
|
||||
|
||||
|
||||
async def download_file(url, dest):
|
||||
if dest.exists(): return
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
data = await response.read()
|
||||
with open(dest, 'wb') as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
async def setup_learner():
|
||||
await download_file(export_file_url, path / export_file_name)
|
||||
try:
|
||||
learn = load_learner(path, export_file_name)
|
||||
return learn
|
||||
except RuntimeError as e:
|
||||
if len(e.args) > 0 and 'CPU-only machine' in e.args[0]:
|
||||
print(e)
|
||||
message = "\n\nThis model was trained with an old version of fastai and will not work in a CPU environment.\n\nPlease update the fastai library in your training environment and export your model again.\n\nSee instructions for 'Returning to work' at https://course.fast.ai."
|
||||
raise RuntimeError(message)
|
||||
else:
|
||||
raise
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
tasks = [asyncio.ensure_future(setup_learner())]
|
||||
learn = loop.run_until_complete(asyncio.gather(*tasks))[0]
|
||||
loop.close()
|
||||
|
||||
|
||||
@app.route('/')
|
||||
@app.route("/")
|
||||
async def homepage(request):
|
||||
html_file = path / 'view' / 'index.html'
|
||||
html_file = path / "view" / "index.html"
|
||||
return HTMLResponse(html_file.open().read())
|
||||
|
||||
|
||||
@app.route('/analyze', methods=['POST'])
|
||||
@app.route("/analyze", methods=["POST"])
|
||||
async def analyze(request):
|
||||
img_data = await request.form()
|
||||
img_bytes = await (img_data['file'].read())
|
||||
img_bytes = await (img_data["file"].read())
|
||||
img = open_image(BytesIO(img_bytes))
|
||||
prediction = learn.predict(img)[0]
|
||||
return JSONResponse({'result': str(prediction)})
|
||||
return JSONResponse({"result": str(prediction)})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if 'serve' in sys.argv:
|
||||
uvicorn.run(app=app, host='0.0.0.0', port=5000, log_level="info")
|
||||
if __name__ == "__main__":
|
||||
if "serve" in sys.argv:
|
||||
uvicorn.run(app=app, host="0.0.0.0", port=8000, log_level="info")
|
||||
|
|
|
@ -7,10 +7,9 @@
|
|||
<body>
|
||||
<div>
|
||||
<div class='center'>
|
||||
<div class='title'>Classify Bear Images 🐻</div>
|
||||
<div class='title'>Deepstack web UI</div>
|
||||
<p>
|
||||
Use images of <strong>teddy</strong> bears, <strong>black</strong> bears, <strong>grizzly</strong> bears, or
|
||||
all three!
|
||||
Repo: https://github.com/robmarkcole/deepstack-web-ui
|
||||
</p>
|
||||
<div class='content'>
|
||||
<div class='no-display'>
|
||||
|
|
Loading…
Reference in New Issue