| import cv2 | |
| import numpy as np | |
| import os | |
| import logging | |
| def read_image(image_path, is_uploaded=False): | |
| if is_uploaded: | |
| img_bytes = image_path.read() | |
| img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), cv2.IMREAD_COLOR) | |
| return img | |
| return cv2.imread(image_path) | |
| def extract_id_card(img): | |
| gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| blur = cv2.GaussianBlur(gray, (5,5), 0) | |
| thresh = cv2.adaptiveThreshold( | |
| blur, 255, | |
| cv2.ADAPTIVE_THRESH_MEAN_C, | |
| cv2.THRESH_BINARY, 11, 2 | |
| ) | |
| contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
| largest = max(contours, key=cv2.contourArea) | |
| x, y, w, h = cv2.boundingRect(largest) | |
| roi = img[y:y+h, x:x+w] | |
| path = "data/intermediate/id_roi.jpg" | |
| cv2.imwrite(path, roi) | |
| return roi, path | |
| def save_image(image, filename, path): | |
| full_path = os.path.join(path, filename) | |
| cv2.imwrite(full_path, image) | |
| return full_path | |