Spaces:
Sleeping
Sleeping
| from io import BytesIO | |
| from ...utils.azureOCR import analyze_image | |
| from ...utils.imageUtils import resize_if_needed, all_cropped_images_to_one_image | |
| from app.services.adhaarServices.adhaarDataExtractor import extract_details | |
| def process_results(results, img): | |
| precision_data = {label: {"correct": 0, "total": 0} for label in ["aadharNo", "name", "dob", "gender", "address"]} | |
| confidence_threshold = 0.3 | |
| input_image_format = img.format if img.format else "PNG" | |
| valid_formats = ["JPEG", "PNG", "BMP", "GIF", "TIFF"] | |
| input_image_format = input_image_format if input_image_format in valid_formats else "PNG" | |
| label_to_image = {} | |
| extracted_data = {"adhaarNo": "", "dob": "", "gender": "", "name": "", "address": ""} | |
| for result in results: | |
| for bbox, cls, conf in zip(result.boxes.xyxy, result.boxes.cls, result.boxes.conf): | |
| label = ["aadharNo", "dob", "gender", "name", "address"][int(cls)] | |
| print(label, conf) | |
| if conf < confidence_threshold or label == "address": | |
| continue | |
| x1, y1, x2, y2 = map(int, bbox.tolist()) | |
| crop_img = img.crop((x1, y1, x2, y2)) | |
| crop_img = resize_if_needed(crop_img) | |
| if label not in label_to_image or label_to_image[label][1] < conf: | |
| label_to_image[label] = (crop_img, conf) | |
| precision_data[label]["total"] += 1 | |
| precision_data[label]["correct"] += 1 # Replace with actual OCR validation check | |
| cropped_images = [img for label, (img, conf) in sorted(label_to_image.items()) if label != "address"] | |
| final_image = all_cropped_images_to_one_image(cropped_images, separator_image_path='app/utils/seprator3.png') | |
| buffer = BytesIO() | |
| final_image.save(buffer, format=input_image_format) | |
| buffer.seek(0) | |
| response = analyze_image(buffer.getvalue(), input_image_format) | |
| # print(response) | |
| lines = response['readResult']['blocks'][0]['lines'] | |
| texts = [line['text'] for line in lines] | |
| print(texts) | |
| extracted_data = extract_details(texts) | |
| return extracted_data |