Spaces:
Running
Running
breezedeus
commited on
Commit
β’
e1274bb
1
Parent(s):
fa2693b
add examples
Browse files
README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
emoji: π
π
π
‘
|
4 |
colorFrom: indigo
|
5 |
colorTo: yellow
|
@@ -10,7 +10,7 @@ pinned: false
|
|
10 |
license: apache-2.0
|
11 |
---
|
12 |
|
13 |
-
# CnOCR
|
14 |
|
15 |
[**CnOCR**](https://github.com/breezedeus/cnocr) is an **Optical Character Recognition (OCR)** toolkit for **Python 3**. It supports recognition of common characters in **English and numbers**, **Simplified Chinese**, **Traditional Chinese** (some models), and **vertical text** recognition. It comes with [**20+ well-trained models**](https://cnocr.readthedocs.io/zh/latest/models/) for different application scenarios and can be used directly after installation. Also, CnOCR provides simple training [commands](https://cnocr.readthedocs.io/zh/latest/train/) for users to train their own models. Welcome to join the WeChat contact group.
|
16 |
|
|
|
1 |
---
|
2 |
+
title: Cn/En OCR Demo
|
3 |
emoji: π
π
π
‘
|
4 |
colorFrom: indigo
|
5 |
colorTo: yellow
|
|
|
10 |
license: apache-2.0
|
11 |
---
|
12 |
|
13 |
+
# CnOCR
|
14 |
|
15 |
[**CnOCR**](https://github.com/breezedeus/cnocr) is an **Optical Character Recognition (OCR)** toolkit for **Python 3**. It supports recognition of common characters in **English and numbers**, **Simplified Chinese**, **Traditional Chinese** (some models), and **vertical text** recognition. It comes with [**20+ well-trained models**](https://cnocr.readthedocs.io/zh/latest/models/) for different application scenarios and can be used directly after installation. Also, CnOCR provides simple training [commands](https://cnocr.readthedocs.io/zh/latest/train/) for users to train their own models. Welcome to join the WeChat contact group.
|
16 |
|
app.py
CHANGED
@@ -16,8 +16,11 @@
|
|
16 |
# KIND, either express or implied. See the License for the
|
17 |
# specific language governing permissions and limitations
|
18 |
# under the License.
|
|
|
19 |
|
20 |
import os
|
|
|
|
|
21 |
|
22 |
import gradio as gr
|
23 |
import cv2
|
@@ -29,6 +32,7 @@ from cnocr.utils import set_logger, draw_ocr_results, download
|
|
29 |
|
30 |
|
31 |
logger = set_logger()
|
|
|
32 |
|
33 |
|
34 |
def plot_for_debugging(rotated_img, one_out, box_score_thresh, crop_ncols, prefix_fp):
|
@@ -64,15 +68,24 @@ def plot_for_debugging(rotated_img, one_out, box_score_thresh, crop_ncols, prefi
|
|
64 |
|
65 |
|
66 |
def get_ocr_model(det_model_name, rec_model_name, det_more_configs):
|
|
|
|
|
|
|
|
|
|
|
67 |
det_model_name, det_model_backend = det_model_name.split('::')
|
68 |
rec_model_name, rec_model_backend = rec_model_name.split('::')
|
69 |
-
|
70 |
det_model_name=det_model_name,
|
71 |
det_model_backend=det_model_backend,
|
72 |
rec_model_name=rec_model_name,
|
73 |
rec_model_backend=rec_model_backend,
|
74 |
det_more_configs=det_more_configs,
|
75 |
)
|
|
|
|
|
|
|
|
|
76 |
|
77 |
|
78 |
def visualize_naive_result(img, det_model_name, std_out, box_score_thresh):
|
@@ -186,6 +199,66 @@ def main():
|
|
186 |
'δ½θ
οΌ<a href="https://www.breezedeus.com" target="_blank">Breezedeus</a> οΌ'
|
187 |
'<a href="https://github.com/breezedeus" target="_blank">Github</a> γ</p>'
|
188 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
with gr.Blocks() as demo:
|
191 |
gr.Markdown(
|
@@ -220,8 +293,8 @@ def main():
|
|
220 |
)
|
221 |
|
222 |
with gr.Column(scale=3, variant='compact'):
|
223 |
-
gr.Markdown('###
|
224 |
-
image_file = gr.Image(label='', type="pil", image_mode='RGB')
|
225 |
sub_btn = gr.Button("Submit", variant="primary")
|
226 |
out_image = gr.Image(label='θ―ε«η»ζ', interactive=False, visible=False)
|
227 |
naive_warn = gr.Markdown(
|
@@ -246,6 +319,21 @@ def main():
|
|
246 |
outputs=[out_image, naive_warn, out_texts],
|
247 |
)
|
248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
demo.queue(concurrency_count=4)
|
250 |
demo.launch()
|
251 |
|
|
|
16 |
# KIND, either express or implied. See the License for the
|
17 |
# specific language governing permissions and limitations
|
18 |
# under the License.
|
19 |
+
# Ref: https://huggingface.co/spaces/hysts/Manga-OCR/blob/main/app.py
|
20 |
|
21 |
import os
|
22 |
+
import json
|
23 |
+
import functools
|
24 |
|
25 |
import gradio as gr
|
26 |
import cv2
|
|
|
32 |
|
33 |
|
34 |
logger = set_logger()
|
35 |
+
MODELS = {}
|
36 |
|
37 |
|
38 |
def plot_for_debugging(rotated_img, one_out, box_score_thresh, crop_ncols, prefix_fp):
|
|
|
68 |
|
69 |
|
70 |
def get_ocr_model(det_model_name, rec_model_name, det_more_configs):
|
71 |
+
global MODELS
|
72 |
+
config_str = json.dumps(det_more_configs)
|
73 |
+
if (det_model_name, rec_model_name, config_str) in MODELS:
|
74 |
+
return MODELS[(det_model_name, rec_model_name, config_str)]
|
75 |
+
|
76 |
det_model_name, det_model_backend = det_model_name.split('::')
|
77 |
rec_model_name, rec_model_backend = rec_model_name.split('::')
|
78 |
+
model = CnOcr(
|
79 |
det_model_name=det_model_name,
|
80 |
det_model_backend=det_model_backend,
|
81 |
rec_model_name=rec_model_name,
|
82 |
rec_model_backend=rec_model_backend,
|
83 |
det_more_configs=det_more_configs,
|
84 |
)
|
85 |
+
if len(MODELS) > 50:
|
86 |
+
MODELS = {}
|
87 |
+
MODELS[(det_model_name, rec_model_name, config_str)] = model
|
88 |
+
return model
|
89 |
|
90 |
|
91 |
def visualize_naive_result(img, det_model_name, std_out, box_score_thresh):
|
|
|
199 |
'δ½θ
οΌ<a href="https://www.breezedeus.com" target="_blank">Breezedeus</a> οΌ'
|
200 |
'<a href="https://github.com/breezedeus" target="_blank">Github</a> γ</p>'
|
201 |
)
|
202 |
+
example_func = functools.partial(
|
203 |
+
recognize,
|
204 |
+
# det_model_name='ch_PP-OCRv3_det::onnx',
|
205 |
+
rotated_bbox=True,
|
206 |
+
# use_angle_clf=False,
|
207 |
+
new_size=768,
|
208 |
+
box_score_thresh=0.3,
|
209 |
+
min_box_size=10,
|
210 |
+
)
|
211 |
+
examples = [
|
212 |
+
[
|
213 |
+
'ch_PP-OCRv3_det::onnx',
|
214 |
+
True,
|
215 |
+
'number-densenet_lite_136-fc::onnx',
|
216 |
+
False,
|
217 |
+
'docs/examples/card1-s.jpg',
|
218 |
+
],
|
219 |
+
[
|
220 |
+
'ch_PP-OCRv3_det::onnx',
|
221 |
+
True,
|
222 |
+
'number-densenet_lite_136-fc::onnx',
|
223 |
+
False,
|
224 |
+
'docs/examples/card2-s.jpg',
|
225 |
+
],
|
226 |
+
[
|
227 |
+
'ch_PP-OCRv3_det::onnx',
|
228 |
+
True,
|
229 |
+
'number-densenet_lite_136-fc::onnx',
|
230 |
+
False,
|
231 |
+
'docs/examples/cy1-s.jpg',
|
232 |
+
],
|
233 |
+
[
|
234 |
+
'ch_PP-OCRv3_det::onnx',
|
235 |
+
False,
|
236 |
+
'densenet_lite_136-gru::onnx',
|
237 |
+
False,
|
238 |
+
'docs/examples/huochepiao.jpeg',
|
239 |
+
],
|
240 |
+
[
|
241 |
+
'ch_PP-OCRv3_det::onnx',
|
242 |
+
False,
|
243 |
+
'densenet_lite_136-gru::onnx',
|
244 |
+
False,
|
245 |
+
'docs/examples/1_res.jpg',
|
246 |
+
],
|
247 |
+
[
|
248 |
+
'db_shufflenet_v2::pytorch',
|
249 |
+
False,
|
250 |
+
'en_number_mobile_v2.0::onnx',
|
251 |
+
False,
|
252 |
+
'docs/examples/en_book1.jpeg',
|
253 |
+
],
|
254 |
+
[
|
255 |
+
'db_shufflenet_v2::pytorch',
|
256 |
+
False,
|
257 |
+
'densenet_lite_136-gru::onnx',
|
258 |
+
True,
|
259 |
+
'docs/examples/beauty0.jpg',
|
260 |
+
],
|
261 |
+
]
|
262 |
|
263 |
with gr.Blocks() as demo:
|
264 |
gr.Markdown(
|
|
|
293 |
)
|
294 |
|
295 |
with gr.Column(scale=3, variant='compact'):
|
296 |
+
gr.Markdown('### ιζ©εΎ
θ―ε«εΎη')
|
297 |
+
image_file = gr.Image(label='εΎ
θ―ε«εΎη', type="pil", image_mode='RGB')
|
298 |
sub_btn = gr.Button("Submit", variant="primary")
|
299 |
out_image = gr.Image(label='θ―ε«η»ζ', interactive=False, visible=False)
|
300 |
naive_warn = gr.Markdown(
|
|
|
319 |
outputs=[out_image, naive_warn, out_texts],
|
320 |
)
|
321 |
|
322 |
+
gr.Examples(
|
323 |
+
label='η€ΊδΎ',
|
324 |
+
examples=examples,
|
325 |
+
inputs=[
|
326 |
+
det_model_name,
|
327 |
+
is_single_line,
|
328 |
+
rec_model_name,
|
329 |
+
use_angle_clf,
|
330 |
+
image_file,
|
331 |
+
],
|
332 |
+
outputs=[out_image, naive_warn, out_texts],
|
333 |
+
fn=example_func,
|
334 |
+
cache_examples=os.getenv('CACHE_EXAMPLES') == '1',
|
335 |
+
)
|
336 |
+
|
337 |
demo.queue(concurrency_count=4)
|
338 |
demo.launch()
|
339 |
|