3
3
4
4
import argparse
5
5
import base64
6
- import importlib
7
6
import io
8
7
import os
9
8
import sys
14
13
import uvicorn
15
14
from fastapi import FastAPI , Form , UploadFile
16
15
from PIL import Image
17
-
18
- if importlib .util .find_spec ("rapidocr_onnxruntime" ):
19
- from rapidocr_onnxruntime import RapidOCR
20
- elif importlib .util .find_spec ("rapidocr_paddle" ):
21
- from rapidocr_paddle import RapidOCR
22
- elif importlib .util .find_spec ("rapidocr_openvino" ):
23
- from rapidocr_openvino import RapidOCR
24
- else :
25
- raise ImportError (
26
- "Please install one of [rapidocr_onnxruntime,rapidocr-paddle,rapidocr-openvino]"
27
- )
16
+ from rapidocr import RapidOCR
28
17
29
18
sys .path .append (str (Path (__file__ ).resolve ().parent .parent ))
30
19
@@ -39,36 +28,29 @@ def __init__(self) -> None:
39
28
self .ocr = RapidOCR ()
40
29
else :
41
30
self .ocr = RapidOCR (
42
- det_model_path = det_model_path ,
43
- cls_model_path = cls_model_path ,
44
- rec_model_path = rec_model_path ,
31
+ params = {
32
+ "Det.model_path" : det_model_path ,
33
+ "Cls.model_path" : cls_model_path ,
34
+ "Rec.model_path" : rec_model_path ,
35
+ }
45
36
)
46
37
47
38
def __call__ (
48
- self , img : Image .Image , use_det = None , use_cls = None , use_rec = None , ** kwargs
39
+ self , ori_img : Image .Image , use_det = None , use_cls = None , use_rec = None , ** kwargs
49
40
) -> Dict :
50
- img = np .array (img )
51
- ocr_res , _ = self .ocr (
41
+ img = np .array (ori_img )
42
+ ocr_res = self .ocr (
52
43
img , use_det = use_det , use_cls = use_cls , use_rec = use_rec , ** kwargs
53
44
)
54
45
55
- if not ocr_res :
46
+ if ocr_res . boxes is None or ocr_res . txts is None or ocr_res . scores is None :
56
47
return {}
57
48
58
49
out_dict = {}
59
- for i , dats in enumerate (ocr_res ):
60
- values = {}
61
- for dat in dats :
62
- if isinstance (dat , str ):
63
- values ["rec_txt" ] = dat
64
-
65
- if isinstance (dat , np .float32 ):
66
- values ["score" ] = f"{ dat :.4f} "
67
-
68
- if isinstance (dat , list ):
69
- values ["dt_boxes" ] = dat
70
- out_dict [str (i )] = values
71
-
50
+ for i , (boxes , txt , score ) in enumerate (
51
+ zip (ocr_res .boxes , ocr_res .txts , ocr_res .scores )
52
+ ):
53
+ out_dict [i ] = {"rec_txt" : txt , "dt_boxes" : boxes .tolist (), "score" : score }
72
54
return out_dict
73
55
74
56
@@ -100,6 +82,7 @@ def ocr(
100
82
"When sending a post request, data or files must have a value."
101
83
)
102
84
ocr_res = processor (img , use_det = use_det , use_cls = use_cls , use_rec = use_rec )
85
+
103
86
return ocr_res
104
87
105
88
0 commit comments