-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain_img.py
94 lines (87 loc) · 3.47 KB
/
main_img.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import sys
import time
import cv2
from tensorflow.keras.models import load_model
from extract_digits import extract_digits
from grid_detector import grid_detector
from grid_solver import solve_grids
from new_img_generator import *
from settings import *
save_folder = "images_save/"
def main_img(im_path, model, save=False):
init = time.time()
frame = cv2.imread(im_path)
init0 = time.time()
if frame is None:
print("This path doesn't lead to a frame")
sys.exit(3)
imgGridsFinal, pointGrid, transform_matrix = grid_detector(
frame)
print("imgGridsFinal")
print(imgGridsFinal)
print(len(imgGridsFinal[0]))
print("pointGrid")
print(len(pointGrid[0]))
print("transform_matrix")
print(len(transform_matrix[0]))
found_grid_time = time.time()
if imgGridsFinal is None:
print("No grid found")
sys.exit(3)
print("Grid(s) found")
grids_matrix = extract_digits(imgGridsFinal, model
)
if all(elem is None for elem in grids_matrix):
print("Failed during digits extraction")
sys.exit(3)
print("Extraction done")
extract_time = time.time()
grids_solved = solve_grids(grids_matrix)
print("Solving done")
if grids_solved is None:
print("grids not solved ")
print(grids_matrix)
cv2.imshow('grid_extract', imgGridsFinal[0])
cv2.imwrite(save_folder + os.path.splitext(os.path.basename(im_path))
[0] + "_failed.jpg", imgGridsFinal[0])
cv2.waitKey()
sys.exit(3)
solve_time = time.time()
ims_filled_grid = write_solved_grids(
imgGridsFinal, grids_matrix, grids_solved)
im_final = recreate_img_filled(
frame, ims_filled_grid, pointGrid, transform_matrix)
final_time = time.time()
if save:
if not os.path.isdir(save_folder):
os.makedirs(save_folder)
cv2.imwrite(save_folder + os.path.splitext(os.path.basename(im_path))
[0] + "_solved.jpg", im_final)
total_time = final_time - init
load_time = init0 - init
print("Load Image\t\t\t{:03.1f}% - {:05.2f}ms".format(100 *
load_time / total_time, 1000 * load_time))
founding_time = found_grid_time - init0
print(
"Grid Research \t\t{:03.1f}% - {:05.2f}ms".format(100 * founding_time / total_time, 1000 * founding_time))
extraction_duration = extract_time - found_grid_time
print(
"Digits Extraction \t{:03.1f}% - {:05.2f}ms".format(100 * extraction_duration / total_time,
1000 * extraction_duration))
solving_duration = solve_time - extract_time
print(
"Grid Solving \t\t{:03.1f}% - {:05.2f}ms".format(100 * solving_duration / total_time, 1000 * solving_duration))
recreation_duration = final_time - solve_time
print(
"Image recreation \t{:03.1f}% - {:05.2f}ms".format(100 * recreation_duration / total_time,
1000 * recreation_duration))
print("PROCESS DURATION \t{:.2f}s".format(final_time - init0))
print("EVERYTHING DONE \t{:.2f}s".format(total_time))
# print(grid)
# print(grid_solved)
if len(ims_filled_grid) == 1:
cv2.imshow('imgabc', frame)
cv2.imshow('grid_extract123', imgGridsFinal[0])
cv2.imshow('grid_filled123', ims_filled_grid[0])
cv2.imshow('im_final123', im_final)
cv2.waitKey()