File size: 3,102 Bytes
75a02d0
 
 
 
 
fb12fe1
75a02d0
 
 
 
 
 
fb12fe1
75a02d0
6368900
75a02d0
fb12fe1
75a02d0
 
 
 
 
 
6368900
75a02d0
 
 
 
6368900
75a02d0
 
 
 
6368900
75a02d0
 
 
 
 
 
6368900
75a02d0
 
fb12fe1
75a02d0
 
 
6368900
75a02d0
 
6368900
75a02d0
 
fb12fe1
75a02d0
 
 
 
fb12fe1
75a02d0
 
 
 
 
 
 
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
# from io import BytesIO
# from ...utils.azureOCR import analyze_image
# from ...utils.imageUtils import resize_if_needed, all_cropped_images_to_one_image
# from .panDataExtractor import extract_panData
# # from collections import defaultdict

# def process_results(results, img):
#     label_indices = {"pan_num": 0, "name": 1, "father": 2, "dob": 3}
#     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"
    
#     best_crops = {label: (None, -1) for label in label_indices.keys()}  # Store best (image, confidence) pairs

#     precision_data = {label: {"correct": 0, "total": 0} for label in label_indices.keys()}
    
#     for result in results:
#         for bbox, cls, conf in zip(result.boxes.xyxy, result.boxes.cls, result.boxes.conf):
#             # Ensure the class index is within the bounds of the label list
#             if int(cls) >= len(label_indices):
#                 print(f"Warning: Class index {cls} is out of range. Skipping this bbox.")
#                 continue
            
#             label = list(label_indices.keys())[int(cls)]
#             print(label, conf)
#             if conf < confidence_threshold:
#                 continue

#             x1, y1, x2, y2 = map(int, bbox.tolist())
#             crop_img = img.crop((x1, y1, x2, y2))
#             crop_img = resize_if_needed(crop_img)
#             crop_img.save(f"temp_{label}.png")

#             # Replace old crop if new one has higher confidence
#             _, best_conf = best_crops[label]
#             if conf > best_conf:
#                 best_crops[label] = (crop_img, conf)
#                 precision_data[label]["total"] += 1
#                 precision_data[label]["correct"] += 1  # Replace with actual OCR validation check

#     # Extract the images for final processing
#     cropped_images_with_labels = [(img, label_indices[label], conf) for label, (img, conf) in best_crops.items() if img is not None]
    
#     # Sort the images by their label indices in ascending order
#     cropped_images_with_labels.sort(key=lambda x: x[1])
#     print(cropped_images_with_labels, "cropped images with labels")
    
#     if not cropped_images_with_labels:
#         raise ValueError("No images were cropped.")

#     # Extract only the images for concatenation
#     cropped_images = [img for img, _, _ in cropped_images_with_labels]
    
#     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, "response")
#     lines = response['readResult']['blocks'][0]['lines']
#     texts = [line['text'] for line in lines]
#     print(texts, "text after microsoft ocr")
#     extracted_data = extract_panData(texts)
#     return extracted_data