Skip to content

Commit f833861

Browse files
committed
fixed paddleocr merge bug, improved search function
1 parent 3c61f1e commit f833861

File tree

12 files changed

+528
-505
lines changed

12 files changed

+528
-505
lines changed

aircraftDatabase.csv

Lines changed: 487 additions & 487 deletions
Large diffs are not rendered by default.

main.py

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,39 @@
1212
import requests
1313

1414
class number(object):
15-
def __init__(self, gpu=False, times=2, ua="ARNRS"):
15+
def __init__(self, gpu=False, times=1, filter=0.8, ua="ARNRS", debug=False):
1616
assert type(gpu) is bool
1717
assert type(times) is int and times >= 1
1818
self.gpu = gpu
1919
self.times = times
20-
self.similar = {"8": "B", "o": "0", "-": "—"}
20+
self.similar = {"8": "B", "O": "0", "-": "—", "1": "/", "l": "I", "2": "Z", "4": "A"}
2121
self.ua = ua
22+
self.filter = filter
23+
self.debug = debug
2224

2325
# Init detector and OCR
2426
self.__detector = Detector(device="gpu" if gpu else "cpu")
2527
self.__eocr = easyocr.Reader(['ch_sim', 'en'], gpu=self.gpu)
26-
self.__pocr = PaddleOCR(use_angle_cls=True, use_gpu=self.gpu, show_log=False)
28+
self.__pocr = PaddleOCR(use_angle_cls=True, use_gpu=self.gpu, show_log=debug)
2729

2830
# Init database
29-
self.__database = []
31+
self.__database = {}
3032
i = 0
3133
with open('aircraftDatabase.csv', "r", encoding='utf-8') as fb:
3234
for row in csv.reader(fb, skipinitialspace=True):
3335
if not i:
3436
keys = row
3537
else:
36-
self.__database.append(dict(zip(keys, row)))
38+
self.__database[row[1]] = dict(zip(keys, row))
39+
self.__database[row[1].replace("-", "")] = dict(zip(keys, row))
3740
i += 1
3841

3942
# Try to update database
43+
'''
4044
update_database_daemon_thread = threading.Thread(target=self.__update_database_daemon, name="Update Database Daemon Thread")
4145
update_database_daemon_thread.daemon = True
4246
update_database_daemon_thread.start()
47+
'''
4348

4449
def __update_database_daemon(self):
4550
while True:
@@ -78,9 +83,8 @@ def search(self, keyword):
7883
Search a plane by it registration number
7984
:keyword Registration number
8085
'''
81-
for i in self.__database:
82-
if i["registration"] == keyword:
83-
return i
86+
if keyword.upper() in self.__database.keys() and not keyword.isdigit():
87+
return self.__database[keyword.upper()]
8488

8589
# Similar characters replace
8690
self.similar = {**self.similar, **dict(zip(self.similar.values(), self.similar.keys()))}
@@ -91,10 +95,12 @@ def search(self, keyword):
9195
for c in condition:
9296
for c_i in c:
9397
keyword_temp = keyword.replace(c_i[0], c_i[1])
94-
for i in self.__database:
95-
if i["registration"] == keyword_temp:
96-
return i
98+
if keyword_temp.upper() in self.__database.keys():
99+
return self.__database[keyword_temp.upper()]
97100

101+
if keyword.upper() in self.__database.keys() and keyword.isdigit():
102+
return self.__database[keyword.upper()]
103+
98104
return None
99105

100106
def recognize(self, image):
@@ -124,27 +130,44 @@ def recognize(self, image):
124130
ocr_result = []
125131
ocr_filter = []
126132

127-
for _ in range(2):
133+
for _ in range(self.times):
128134
eocr_result = self.__eocr.readtext(img, detail=1)
135+
if self.debug:
136+
print(eocr_result)
137+
print("------------------------------")
129138
pocr_result = self.__pocr.ocr(img, cls=True)
130-
139+
if self.debug:
140+
print(pocr_result)
141+
print("------------------------------")
131142
for e in eocr_result:
132-
if e[2] > 0.6 and e[1] not in ocr_filter:
143+
if e[2] > self.filter and e[1] not in ocr_filter:
133144
ocr_result.append(
134145
(tuple([tuple(i) for i in e[0]]), e[1], e[2])
135146
)
136147
ocr_filter.append(e[1])
137148
for p in pocr_result[0]:
138-
if p[1][1] > 0.6 and e[1][0] not in ocr_filter:
149+
if p[1][1] > self.filter and p[1][0] not in ocr_filter:
139150
ocr_result.append(
140-
(tuple([tuple(i) for i in p[0]]), e[1][0], e[1][1])
151+
(tuple([tuple(i) for i in p[0]]), p[1][0], p[1][1])
141152
)
142-
ocr_filter.append(e[1][0])
153+
ocr_filter.append(p[1][0])
154+
155+
# OCR result tidy up
156+
157+
143158

144159
# Read database
145160
for i in ocr_result:
146161
r = self.search(i[1])
147162
if r:
148163
return r
149164

150-
return None
165+
if self.debug:
166+
print(ocr_result)
167+
return None
168+
169+
if __name__ == "__main__":
170+
num = number()
171+
for pic in os.listdir("test"):
172+
print(pic, ":")
173+
print(num.recognize(os.path.join("test", pic)))

demo.jpg renamed to test/1.jpg

File renamed without changes.

test/10.jpg

884 KB
Loading

test/2.jpg

91.3 KB
Loading

test/3.jpg

229 KB
Loading

test/4.jpg

104 KB
Loading

test/5.jpg

4.8 MB
Loading

test/6.jpg

600 KB
Loading

test/7.jpg

385 KB
Loading

test/8.jpg

589 KB
Loading

test/9.jpg

1010 KB
Loading

0 commit comments

Comments
 (0)