forked from PaddlePaddle/PaddleOCR
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
617 additions
and
92 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
{ | ||
"modules_info": { | ||
"ocr_cls": { | ||
"init_args": { | ||
"version": "1.0.0", | ||
"use_gpu": true | ||
}, | ||
"predict_args": { | ||
} | ||
} | ||
}, | ||
"port": 8866, | ||
"use_multiprocess": false, | ||
"workers": 2 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
# -*- coding:utf-8 -*- | ||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
|
||
import os | ||
import sys | ||
sys.path.insert(0, ".") | ||
|
||
from paddlehub.common.logger import logger | ||
from paddlehub.module.module import moduleinfo, runnable, serving | ||
import cv2 | ||
import paddlehub as hub | ||
|
||
from tools.infer.utility import base64_to_cv2 | ||
from tools.infer.predict_cls import TextClassifier | ||
|
||
|
||
@moduleinfo( | ||
name="ocr_cls", | ||
version="1.0.0", | ||
summary="ocr recognition service", | ||
author="paddle-dev", | ||
author_email="[email protected]", | ||
type="cv/text_recognition") | ||
class OCRCls(hub.Module): | ||
def _initialize(self, use_gpu=False, enable_mkldnn=False): | ||
""" | ||
initialize with the necessary elements | ||
""" | ||
from ocr_cls.params import read_params | ||
cfg = read_params() | ||
|
||
cfg.use_gpu = use_gpu | ||
if use_gpu: | ||
try: | ||
_places = os.environ["CUDA_VISIBLE_DEVICES"] | ||
int(_places[0]) | ||
print("use gpu: ", use_gpu) | ||
print("CUDA_VISIBLE_DEVICES: ", _places) | ||
cfg.gpu_mem = 8000 | ||
except: | ||
raise RuntimeError( | ||
"Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES via export CUDA_VISIBLE_DEVICES=cuda_device_id." | ||
) | ||
cfg.ir_optim = True | ||
cfg.enable_mkldnn = enable_mkldnn | ||
|
||
self.text_classifier = TextClassifier(cfg) | ||
|
||
def read_images(self, paths=[]): | ||
images = [] | ||
for img_path in paths: | ||
assert os.path.isfile( | ||
img_path), "The {} isn't a valid file.".format(img_path) | ||
img = cv2.imread(img_path) | ||
if img is None: | ||
logger.info("error in loading image:{}".format(img_path)) | ||
continue | ||
images.append(img) | ||
return images | ||
|
||
def predict(self, images=[], paths=[]): | ||
""" | ||
Get the text angle in the predicted images. | ||
Args: | ||
images (list(numpy.ndarray)): images data, shape of each is [H, W, C]. If images not paths | ||
paths (list[str]): The paths of images. If paths not images | ||
Returns: | ||
res (list): The result of text detection box and save path of images. | ||
""" | ||
|
||
if images != [] and isinstance(images, list) and paths == []: | ||
predicted_data = images | ||
elif images == [] and isinstance(paths, list) and paths != []: | ||
predicted_data = self.read_images(paths) | ||
else: | ||
raise TypeError("The input data is inconsistent with expectations.") | ||
|
||
assert predicted_data != [], "There is not any image to be predicted. Please check the input data." | ||
|
||
img_list = [] | ||
for img in predicted_data: | ||
if img is None: | ||
continue | ||
img_list.append(img) | ||
|
||
rec_res_final = [] | ||
try: | ||
img_list, cls_res, predict_time = self.text_classifier(img_list) | ||
for dno in range(len(cls_res)): | ||
angle, score = cls_res[dno] | ||
rec_res_final.append({ | ||
'angle': angle, | ||
'confidence': float(score), | ||
}) | ||
except Exception as e: | ||
print(e) | ||
return [[]] | ||
|
||
return [rec_res_final] | ||
|
||
@serving | ||
def serving_method(self, images, **kwargs): | ||
""" | ||
Run as a service. | ||
""" | ||
images_decode = [base64_to_cv2(image) for image in images] | ||
results = self.predict(images_decode, **kwargs) | ||
return results | ||
|
||
|
||
if __name__ == '__main__': | ||
ocr = OCRCls() | ||
image_path = [ | ||
'./doc/imgs_words/ch/word_1.jpg', | ||
'./doc/imgs_words/ch/word_2.jpg', | ||
'./doc/imgs_words/ch/word_3.jpg', | ||
] | ||
res = ocr.predict(paths=image_path) | ||
print(res) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# -*- coding:utf-8 -*- | ||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
|
||
|
||
class Config(object): | ||
pass | ||
|
||
|
||
def read_params(): | ||
cfg = Config() | ||
|
||
#params for text classifier | ||
cfg.cls_model_dir = "./inference/ch_ppocr_mobile_v1.1_cls_infer/" | ||
cfg.cls_image_shape = "3, 48, 192" | ||
cfg.label_list = ['0', '180'] | ||
cfg.cls_batch_num = 30 | ||
cfg.cls_thresh = 0.9 | ||
|
||
cfg.use_zero_copy_run = False | ||
cfg.use_pdserving = False | ||
|
||
return cfg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ | |
} | ||
} | ||
}, | ||
"port": 8866, | ||
"port": 8865, | ||
"use_multiprocess": false, | ||
"workers": 2 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.