noahzhy commited on
Commit
df08103
1 Parent(s): b2972d7
app.py CHANGED
@@ -1,8 +1,7 @@
1
  import os
2
- import sys
3
- import time
4
  import glob
5
- import yaml
 
6
  import random
7
 
8
  import numpy as np
@@ -28,10 +27,10 @@ def resize_height(img, height, nearest=False):
28
  return img.resize((new_width, height), Image.NEAREST if nearest else Image.BICUBIC), new_width
29
 
30
 
31
- # load config yaml file
32
  def load_config(path):
33
  with open(path, "r") as f:
34
- config = yaml.load(f, Loader=yaml.FullLoader)
35
  return config
36
 
37
 
@@ -92,14 +91,16 @@ def get_mask(cfg):
92
 
93
  mask, _ = resize_height(mask, 512)
94
  mask_wo_border = mask.copy()
95
- mask_wo_border = mask_wo_border.filter(ImageFilter.MaxFilter(3)).filter(ImageFilter.GaussianBlur(1.5))
96
  mask = mask.filter(ImageFilter.MaxFilter(5)).filter(ImageFilter.GaussianBlur(1.5))
97
 
98
  ord_, _ = resize_height(ord_, 512, nearest=True)
99
 
100
- plate_bg = get_background(name).resize(mask.size)
 
 
101
  # make the mask as alpha channel
102
- bg = Image.new("RGBA", mask.size, (0, 0, 0, 0))
103
  bg.paste(plate_bg, (0, 0))
104
  # hex to rgb
105
  plateTextColor = tuple(int(plateTextColor[i:i + 2], 16) for i in (0, 2, 4))
@@ -114,7 +115,7 @@ plates = [f for f in os.listdir(config_path) if os.path.isdir(os.path.join(confi
114
 
115
 
116
  def generate(name):
117
- cfg = load_config(os.path.join(config_path, name, "config.yaml"))
118
  text, bg, mask, ord_ = get_mask(cfg)
119
  return text, bg, mask, ord_
120
 
@@ -126,10 +127,11 @@ demo = gr.Interface(
126
  ],
127
  [
128
  gr.Text(label="Plate Text"),
129
- gr.Image(label="Background"),
130
- gr.Image(label="Mask"),
131
- gr.Image(label="Ord"),
132
- ]
 
133
  )
134
 
135
 
 
1
  import os
 
 
2
  import glob
3
+ import time
4
+ import json
5
  import random
6
 
7
  import numpy as np
 
27
  return img.resize((new_width, height), Image.NEAREST if nearest else Image.BICUBIC), new_width
28
 
29
 
30
+ # load config json file
31
  def load_config(path):
32
  with open(path, "r") as f:
33
+ config = json.load(f)
34
  return config
35
 
36
 
 
91
 
92
  mask, _ = resize_height(mask, 512)
93
  mask_wo_border = mask.copy()
94
+ mask_wo_border = mask_wo_border.filter(ImageFilter.MaxFilter(3))
95
  mask = mask.filter(ImageFilter.MaxFilter(5)).filter(ImageFilter.GaussianBlur(1.5))
96
 
97
  ord_, _ = resize_height(ord_, 512, nearest=True)
98
 
99
+ plate_bg = get_background(name)
100
+ mask_wo_border = mask_wo_border.resize(plate_bg.size)
101
+
102
  # make the mask as alpha channel
103
+ bg = Image.new("RGBA", plate_bg.size, (0, 0, 0, 0))
104
  bg.paste(plate_bg, (0, 0))
105
  # hex to rgb
106
  plateTextColor = tuple(int(plateTextColor[i:i + 2], 16) for i in (0, 2, 4))
 
115
 
116
 
117
  def generate(name):
118
+ cfg = load_config(os.path.join(config_path, name, "config.json"))
119
  text, bg, mask, ord_ = get_mask(cfg)
120
  return text, bg, mask, ord_
121
 
 
127
  ],
128
  [
129
  gr.Text(label="Plate Text"),
130
+ gr.Image(label="Background", show_label=False, format="png"),
131
+ gr.Image(label="Mask", show_label=False, format="png"),
132
+ gr.Image(label="Ord", show_label=False, format="png"),
133
+ ],
134
+ allow_flagging=False,
135
  )
136
 
137
 
config/cn_car/config.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 4,
3
+ "name": "cn_car",
4
+ "plateNums": [
5
+ "0",
6
+ "1",
7
+ "2",
8
+ "3",
9
+ "4",
10
+ "5",
11
+ "6",
12
+ "7",
13
+ "8",
14
+ "9"
15
+ ],
16
+ "plateChars": [
17
+ "A",
18
+ "B",
19
+ "C",
20
+ "D",
21
+ "E",
22
+ "F",
23
+ "G",
24
+ "H",
25
+ "J",
26
+ "K",
27
+ "L",
28
+ "M",
29
+ "N",
30
+ "P",
31
+ "Q",
32
+ "R",
33
+ "S",
34
+ "T",
35
+ "U",
36
+ "V",
37
+ "W",
38
+ "X",
39
+ "Y"
40
+ ],
41
+ "plateCities": "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新",
42
+ "plateTextColor": "#FFFFFF",
43
+ "plateFormat": [
44
+ "@A·#####"
45
+ ]
46
+ }
config/cn_car/config.yaml CHANGED
@@ -1,4 +1,4 @@
1
- type: 0
2
  name: "cn_car"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"]
 
1
+ type: 4
2
  name: "cn_car"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"]
config/cn_truck/config.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 3,
3
+ "name": "cn_truck",
4
+ "multiLine": true,
5
+ "plateNums": "1234567890",
6
+ "plateChars": "ABCDEFGHJKLMNPQRSTUVWXYZ",
7
+ "plateCities": "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新",
8
+ "plateTextColor": "#111111",
9
+ "plateFormat": [
10
+ "@·A",
11
+ "#0000"
12
+ ]
13
+ }
config/cn_truck/config.yaml CHANGED
@@ -1,9 +1,10 @@
1
- type: 0
2
  name: "cn_truck"
3
  multiLine: true
4
  plateNums: "1234567890"
5
  plateChars: "ABCDEFGHJKLMNPQRSTUVWXYZ"
6
  plateCities: "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新"
 
7
  # format is a string including #, A, 0, 1 and @
8
  # # representing any number and letter
9
  # A representing any letter
 
1
+ type: 3
2
  name: "cn_truck"
3
  multiLine: true
4
  plateNums: "1234567890"
5
  plateChars: "ABCDEFGHJKLMNPQRSTUVWXYZ"
6
  plateCities: "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新"
7
+ plateTextColor: "#111111"
8
  # format is a string including #, A, 0, 1 and @
9
  # # representing any number and letter
10
  # A representing any letter
config/de_car/config.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 1,
3
+ "name": "de_car",
4
+ "plateNums": [
5
+ "1",
6
+ "2",
7
+ "3",
8
+ "4",
9
+ "5",
10
+ "6",
11
+ "7",
12
+ "8",
13
+ "9",
14
+ "0"
15
+ ],
16
+ "plateChars": [
17
+ "A",
18
+ "B",
19
+ "C",
20
+ "D",
21
+ "E",
22
+ "F",
23
+ "G",
24
+ "H",
25
+ "I",
26
+ "J",
27
+ "K",
28
+ "L",
29
+ "M",
30
+ "N",
31
+ "O",
32
+ "P",
33
+ "Q",
34
+ "R",
35
+ "S",
36
+ "T",
37
+ "U",
38
+ "V",
39
+ "W",
40
+ "X",
41
+ "Y",
42
+ "Z"
43
+ ],
44
+ "plateCities": "",
45
+ "plateFormat": [
46
+ "AAA0000"
47
+ ]
48
+ }
config/de_car/config.yaml CHANGED
@@ -1,4 +1,4 @@
1
- type: 0
2
  name: "de_car"
3
  plateNums: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
4
  plateChars: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
 
1
+ type: 1
2
  name: "de_car"
3
  plateNums: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
4
  plateChars: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
config/jp_car/background/jp.jpg CHANGED
config/jp_car/config.json ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 0,
3
+ "name": "jp_car",
4
+ "plateNums": [
5
+ "0",
6
+ "1",
7
+ "2",
8
+ "3",
9
+ "4",
10
+ "5",
11
+ "6",
12
+ "7",
13
+ "8",
14
+ "9"
15
+ ],
16
+ "plateChars": [
17
+ "は",
18
+ "ほ",
19
+ "ね",
20
+ "せ",
21
+ "さ",
22
+ "ひ",
23
+ "や",
24
+ "ろ",
25
+ "ま",
26
+ "ぬ"
27
+ ],
28
+ "plateCities": [
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
+ "plateFormat": [
54
+ "@000",
55
+ "A00-00"
56
+ ]
57
+ }
config/kr_car/config.json ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 1,
3
+ "name": "kr_car",
4
+ "plateNums": [
5
+ "0",
6
+ "1",
7
+ "2",
8
+ "3",
9
+ "4",
10
+ "5",
11
+ "6",
12
+ "7",
13
+ "8",
14
+ "9"
15
+ ],
16
+ "plateChars": [
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
+ "plateCities": "",
54
+ "plateTextColor": "#111111",
55
+ "plateFormat": [
56
+ "000A0000"
57
+ ]
58
+ }
config/kr_car/config.yaml CHANGED
@@ -1,8 +1,9 @@
1
- type: 0
2
  name: "kr_car"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["가", "나", "다", "라", "마", "거", "너", "더", "러", "머", "버", "서", "어", "저", "고", "노", "도", "로", "모", "보", "소", "오", "조", "구", "누", "두", "루", "무", "부", "수", "우", "주", "하", "허", "호",]
5
  plateCities: ""
 
6
  # format is a string including #, A, 0, and @
7
  # # representing any number and letter
8
  # A representing any letter
 
1
+ type: 1
2
  name: "kr_car"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["가", "나", "다", "라", "마", "거", "너", "더", "러", "머", "버", "서", "어", "저", "고", "노", "도", "로", "모", "보", "소", "오", "조", "구", "누", "두", "루", "무", "부", "수", "우", "주", "하", "허", "호",]
5
  plateCities: ""
6
+ plateTextColor: "#111111"
7
  # format is a string including #, A, 0, and @
8
  # # representing any number and letter
9
  # A representing any letter
config/kr_taxi/config.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 1,
3
+ "name": "kr_taxi",
4
+ "plateNums": [
5
+ "0",
6
+ "1",
7
+ "2",
8
+ "3",
9
+ "4",
10
+ "5",
11
+ "6",
12
+ "7",
13
+ "8",
14
+ "9"
15
+ ],
16
+ "plateChars": [
17
+ "바",
18
+ "사",
19
+ "아",
20
+ "자"
21
+ ],
22
+ "plateCities": [
23
+ "서울",
24
+ "부산",
25
+ "대구",
26
+ "인천",
27
+ "광주",
28
+ "대전",
29
+ "울산",
30
+ "경기",
31
+ "강원",
32
+ "충북",
33
+ "충남",
34
+ "전북",
35
+ "전남",
36
+ "경북",
37
+ "경남",
38
+ "제주"
39
+ ],
40
+ "plateTextColor": "#111111",
41
+ "plateFormat": [
42
+ "@00A0000"
43
+ ]
44
+ }
config/kr_taxi/config.yaml CHANGED
@@ -1,8 +1,9 @@
1
- type: 0
2
  name: "kr_taxi"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["바", "사", "아", "자"]
5
  plateCities: ["서울", "부산", "대구", "인천", "광주", "대전", "울산", "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남", "제주"]
 
6
  # format is a string including #, A, 0, and @
7
  # # representing any number and letter
8
  # A representing any letter
 
1
+ type: 1
2
  name: "kr_taxi"
3
  plateNums: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
4
  plateChars: ["바", "사", "아", "자"]
5
  plateCities: ["서울", "부산", "대구", "인천", "광주", "대전", "울산", "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남", "제주"]
6
+ plateTextColor: "#111111"
7
  # format is a string including #, A, 0, and @
8
  # # representing any number and letter
9
  # A representing any letter
config/kr_truck/config.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 0,
3
+ "name": "kr_truck",
4
+ "plateNums": [
5
+ "0",
6
+ "1",
7
+ "2",
8
+ "3",
9
+ "4",
10
+ "5",
11
+ "6",
12
+ "7",
13
+ "8",
14
+ "9"
15
+ ],
16
+ "plateChars": [
17
+ "바",
18
+ "사",
19
+ "아",
20
+ "자"
21
+ ],
22
+ "plateCities": [
23
+ "서울",
24
+ "부산",
25
+ "대구",
26
+ "인천",
27
+ "광주",
28
+ "대전",
29
+ "울산",
30
+ "경기",
31
+ "강원",
32
+ "충북",
33
+ "충남",
34
+ "전북",
35
+ "전남",
36
+ "경북",
37
+ "경남",
38
+ "제주"
39
+ ],
40
+ "plateTextColor": "#FFFFFF",
41
+ "plateFormat": [
42
+ "@00",
43
+ "A0000"
44
+ ]
45
+ }
config/us_cali/config.json ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": 0,
3
+ "name": "us_cali",
4
+ "plateNums": [
5
+ "1",
6
+ "2",
7
+ "3",
8
+ "4",
9
+ "5",
10
+ "6",
11
+ "7",
12
+ "8",
13
+ "9",
14
+ "0"
15
+ ],
16
+ "plateChars": [
17
+ "A",
18
+ "B",
19
+ "C",
20
+ "D",
21
+ "E",
22
+ "F",
23
+ "G",
24
+ "H",
25
+ "I",
26
+ "J",
27
+ "K",
28
+ "L",
29
+ "M",
30
+ "N",
31
+ "O",
32
+ "P",
33
+ "Q",
34
+ "R",
35
+ "S",
36
+ "T",
37
+ "U",
38
+ "V",
39
+ "W",
40
+ "X",
41
+ "Y",
42
+ "Z"
43
+ ],
44
+ "plateCities": "",
45
+ "plateTextColor": "#0E1947",
46
+ "plateFormat": [
47
+ "0AAA000"
48
+ ]
49
+ }
yaml2json.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import yaml
3
+ import glob
4
+
5
+ # convert yaml to json
6
+ def yaml_to_json(yaml_file):
7
+ with open(yaml_file) as f:
8
+ data = yaml.safe_load(f)
9
+ # return data
10
+ basename = yaml_file.split(".")[0]
11
+ # save json data to a file
12
+ with open(f"{basename}.json", "w") as f:
13
+ # utf-8 encoding
14
+ f.write(json.dumps(data, indent=4, ensure_ascii=False))
15
+
16
+ return data
17
+
18
+
19
+ if __name__ == "__main__":
20
+ # yaml_file = "test.yaml"
21
+ # yaml_to_json(yaml_file)
22
+
23
+ for f in glob.glob("config/*/*.yaml"):
24
+ yaml_to_json(f)