-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
73 lines (63 loc) · 2.04 KB
/
main.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from typing import Optional, List
from fastapi import FastAPI, Request
from pydantic import BaseModel
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi.responses import RedirectResponse, FileResponse, HTMLResponse
import base64
import io
import locale
locale.setlocale(locale.LC_ALL, 'C')
from PIL import Image
Image.MAX_IMAGE_PIXELS=1000000000
from tesserocr import PyTessBaseAPI, RIL, iterate_level, PSM, OEM
folder = 'static/'
app = FastAPI()
templates = Jinja2Templates(directory="templates")
app.mount("/static", StaticFiles(directory="static"), name="static")
class ImageModel(BaseModel):
base64: str
class ImageItemResp(BaseModel):
text: str
width: int
height: int
left: int
top: int
class ImageModalResp(BaseModel):
texts: List[ImageItemResp]
@app.get("/", response_class=HTMLResponse)
def read_root(request: Request):
return templates.TemplateResponse("home.html", {"request": request})
@app.get("/about/", response_class=HTMLResponse)
def about(request: Request):
return templates.TemplateResponse("about.html", {"request": request})
@app.post('/upload/')
def upload(request: ImageModel):
msg = base64.b64decode(request.base64)
buf = io.BytesIO(msg)
image = Image.open(buf)
with PyTessBaseAPI(oem=OEM.LSTM_ONLY) as api:
api.SetImage(image)
api.Recognize()
api.SetVariable("save_blob_choices","T")
ri=api.GetIterator()
level=RIL.TEXTLINE
boxes = api.GetComponentImages(RIL.TEXTLINE, True)
text_list = []
i = 0
for r in iterate_level(ri, level):
symbol = r.GetUTF8Text(level)
conf = r.Confidence(level)
bbox = r.BoundingBoxInternal(level)
im = {
"text": symbol,
"left": bbox[0],
"top": bbox[1],
"width": bbox[2] - bbox[0],
"height": bbox[3] - bbox[1],
}
text_list.append(im)
i += 1
return {
"texts": text_list,
}