penut85420 commited on
Commit
3b86270
·
1 Parent(s): 773423a

update char images

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
app.py CHANGED
@@ -1,30 +1,50 @@
 
 
 
1
  import gradio as gr
2
  import numpy as np
3
 
4
  from ocr import Recognizer
5
 
6
- with gr.Blocks() as app:
 
 
 
 
 
7
  recog = Recognizer("model/model.xml", "model/char_list.txt")
8
 
 
 
 
 
 
 
 
 
 
 
 
9
  with gr.Row():
10
- brush = gr.Brush(default_color="#FFF", default_size=15)
11
- sketch = gr.Sketchpad("bg.png", type="numpy", brush=brush, layers=False)
12
- result = gr.TextArea()
13
- check = gr.Button()
14
 
15
  def parse_item(item):
16
  prob = item["prob"]
17
  char = item["char"]
18
- return f"{char}: {prob}"
19
 
20
  def do_recog(img: dict[str, np.ndarray]):
21
- _, nbest = recog(img["composite"])
22
- return "\n".join(parse_item(i) for item in nbest for i in item)
 
 
 
23
 
24
- def clear():
25
- return "bg.png"
26
 
27
- check.click(do_recog, sketch, result)
28
- sketch.clear(clear, None, sketch)
29
 
30
  app.launch()
 
1
+ import os
2
+ import random
3
+
4
  import gradio as gr
5
  import numpy as np
6
 
7
  from ocr import Recognizer
8
 
9
+ chars = [os.path.join(dn, fn) for dn, _, ff in os.walk("chars") for fn in ff]
10
+
11
+ font = gr.themes.GoogleFont("Noto Sans")
12
+ theme = gr.themes.Soft(font=font)
13
+
14
+ with gr.Blocks(theme=theme, title="Kana Writer") as app:
15
  recog = Recognizer("model/model.xml", "model/char_list.txt")
16
 
17
+ brush = gr.Brush(default_color="#111", default_size=15)
18
+ sketch = gr.Sketchpad(
19
+ random.choice(chars),
20
+ type="numpy",
21
+ brush=brush,
22
+ layers=False,
23
+ image_mode="RGB",
24
+ label="寫字練習",
25
+ )
26
+ result = gr.TextArea(label="辨識結果", lines=1)
27
+
28
  with gr.Row():
29
+ check_btn = gr.Button("辨識")
30
+ rand_btn = gr.Button("隨機")
 
 
31
 
32
  def parse_item(item):
33
  prob = item["prob"]
34
  char = item["char"]
35
+ return f"{char}: {prob:.2%}"
36
 
37
  def do_recog(img: dict[str, np.ndarray]):
38
+ img: np.ndarray = img["layers"][0]
39
+ img[img == 0] = 255
40
+ img[img != 255] = 0
41
+ _, nbest = recog(img)
42
+ return "\n".join(parse_item(i) for item in nbest for i in item if i["prob"] > 1e-2)
43
 
44
+ def rand_char():
45
+ return random.choice(chars)
46
 
47
+ check_btn.click(do_recog, sketch, result)
48
+ rand_btn.click(rand_char, None, sketch)
49
 
50
  app.launch()
chars//343/201/202.png ADDED
chars//343/201/204.png ADDED
chars//343/201/206.png ADDED
chars//343/201/210.png ADDED
chars//343/201/212.png ADDED
chars//343/201/213.png ADDED
chars//343/201/215.png ADDED
chars//343/201/217.png ADDED
chars//343/201/221.png ADDED
chars//343/201/223.png ADDED
chars//343/201/225.png ADDED
chars//343/201/227.png ADDED
chars//343/201/231.png ADDED
chars//343/201/233.png ADDED
chars//343/201/235.png ADDED
chars//343/201/237.png ADDED
chars//343/201/241.png ADDED
chars//343/201/244.png ADDED
chars//343/201/246.png ADDED
chars//343/201/250.png ADDED
chars//343/201/252.png ADDED
chars//343/201/253.png ADDED
chars//343/201/254.png ADDED
chars//343/201/255.png ADDED
chars//343/201/256.png ADDED
chars//343/201/257.png ADDED
chars//343/201/262.png ADDED
chars//343/201/265.png ADDED
chars//343/201/270.png ADDED
chars//343/201/273.png ADDED
chars//343/201/276.png ADDED
chars//343/201/277.png ADDED
chars//343/202/200.png ADDED
chars//343/202/201.png ADDED
chars//343/202/202.png ADDED
chars//343/202/204.png ADDED
chars//343/202/206.png ADDED
chars//343/202/210.png ADDED
chars//343/202/211.png ADDED
chars//343/202/212.png ADDED
chars//343/202/213.png ADDED
chars//343/202/214.png ADDED
chars//343/202/215.png ADDED
chars//343/202/217.png ADDED
chars//343/202/222.png ADDED
chars//343/202/223.png ADDED
chars//343/202/242.png ADDED
chars//343/202/244.png ADDED
chars//343/202/246.png ADDED