| | |
| | | digits.append([cv2.imread(path + "/0-0.jpg", cv2.IMREAD_GRAYSCALE), 0]) |
| | | digits.append([cv2.imread(path + "/0-1.jpg", cv2.IMREAD_GRAYSCALE), 0]) |
| | | digits.append([cv2.imread(path + "/0-2.jpg", cv2.IMREAD_GRAYSCALE), 0]) |
| | | digits.append([cv2.imread(path + "/0-3.jpg", cv2.IMREAD_GRAYSCALE), 0]) |
| | | digits.append([cv2.imread(path + "/0-3.jpg", cv2.IMREAD_GRAYSCALE), 0]) |
| | | digits.append([cv2.imread(path + "/1-0.jpg", cv2.IMREAD_GRAYSCALE), 1]) |
| | | digits.append([cv2.imread(path + "/1-1.jpg", cv2.IMREAD_GRAYSCALE), 1]) |
| | | digits.append([cv2.imread(path + "/2-0.jpg", cv2.IMREAD_GRAYSCALE), 2]) |
| | |
| | | return "@" |
| | | |
| | | |
| | | |
| | | |
| | | def extrct_digits_from_frame(frame, col_start, col_end, rows_start, rows_end): |
| | | image = frame[col_start:col_end, rows_start:rows_end] |
| | | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | | kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (6, 6)) |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | contours, hierarchy = cv2.findContours(counter, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) |
| | | contours, hierarchy = cv2.findContours( |
| | | counter, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) |
| | | return_numbers = [] |
| | | contours_count = 0 |
| | | image_h = image.shape[0] |
| | |
| | | digit = -1 |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | if hierarchy[0][contours_count][3] ==0 and h > image_h * 0.3: |
| | | if w>w/4: |
| | | if hierarchy[0][contours_count][3] == 0 and h > image_h * 0.3: |
| | | if w > image_w/4: |
| | | half_width = int(w/2) |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |
| | | gray[y:y+h, x:x+half_width], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | gray[y:y+h, x:x+half_width], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | if one_number != '@': |
| | | return_numbers.append([x, one_number]) |
| | | else: |
| | | return digit, False |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |
| | | gray[y:y+h, x+half_width:x+w], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | gray[y:y+h, x+half_width:x+w], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | if one_number != '@': |
| | | return_numbers.append([x+half_width, one_number]) |
| | | else: |
| | | return digit, False |
| | | else: |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |
| | | gray[y:y+h, x:x+w], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | gray[y:y+h, x:x+w], (20, 30)), 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]) |
| | | if one_number != '@': |
| | | return_numbers.append([x, one_number]) |
| | | else: |
| | | return digit, False |
| | | contours_count +=1 |
| | | if len(return_numbers)==0: |
| | | return digit,False |
| | | contours_count += 1 |
| | | if len(return_numbers) == 0: |
| | | return digit, False |
| | | return_numbers = np.array(sorted(return_numbers)) |
| | | return_numbers = return_numbers[:, -1] |
| | | if len(return_numbers) < 3: |