Keep only mohit tabiyar pages remove all
python3 -c " import pdfplumber from pypdf import PdfReader pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' reader = PdfReader(pdf_path) print(f'Total pages: {len(reader.pages)}') with pdfplumber.open(pdf_path) as pdf: for i, page in enumerate(pdf.pages): text = page.extract_text() or '' print(f'--- Page {i+1} ---') print(text[:300]) print() "
python3 -c " from pypdf import PdfReader import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' print('File size:', os.path.getsize(pdf_path), 'bytes') reader = PdfReader(pdf_path) print('Pages:', len(reader.pages)) print('Metadata:', reader.metadata) for i, page in enumerate(reader.pages): print(f'Page {i+1} - mediabox: {page.mediabox}') # Try to get any annotations or form fields if '/Annots' in page: print(f' Annotations found') text = page.extract_text() print(f' Text length: {len(text) if text else 0}') print(f' Text: {repr(text[:500] if text else \"\")}') "
python3 -c " from pypdf import PdfReader import fitz # pymupdf pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' doc = fitz.open(pdf_path) print('Pages:', len(doc)) page = doc[0] print('Page size:', page.rect) # Render at low resolution to inspect mat = fitz.Matrix(0.5, 0.5) pix = page.get_pixmap(matrix=mat) pix.save('/tmp/workspace/page_preview.png') print('Saved preview') doc.close() "
pip install --user pymupdf --quiet && python3 -c "import fitz; print('ok')"
python3 -c " import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id', exist_ok=True) doc = fitz.open(pdf_path) print('Pages:', len(doc)) page = doc[0] print('Page rect:', page.rect) # Render at 100 DPI to see content mat = fitz.Matrix(100/72, 100/72) pix = page.get_pixmap(matrix=mat) pix.save('/tmp/workspace/mohit_id/page_preview.png') print('Saved. Size:', pix.width, 'x', pix.height) doc.close() "
python3 -c " import fitz pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' doc = fitz.open(pdf_path) page = doc[0] # Extract all text blocks with their positions blocks = page.get_text('blocks') print(f'Text blocks: {len(blocks)}') for b in blocks[:30]: print(b) # Also try dict mode for detailed info print() print('--- Dict mode ---') d = page.get_text('dict') print('Blocks count:', len(d['blocks'])) for blk in d['blocks'][:5]: print(blk.get('type'), blk.get('bbox')) if blk.get('type') == 0: # text block for line in blk.get('lines', []): for span in line.get('spans', []): print(' TEXT:', repr(span['text']), 'at', span['bbox']) doc.close() "
python3 -c " import fitz pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' doc = fitz.open(pdf_path) page = doc[0] print('Page size:', page.rect) # width x height d = page.get_text('dict') print('All blocks (type, bbox):') for i, blk in enumerate(d['blocks']): print(f' Block {i}: type={blk.get(\"type\")} bbox={blk.get(\"bbox\")}') doc.close() "
python3 << 'EOF' import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id', exist_ok=True) doc = fitz.open(pdf_path) page = doc[0] # Page is 595 x 842 pts # Render at 150 DPI for readable text mat = fitz.Matrix(150/72, 150/72) pix = page.get_pixmap(matrix=mat) # Save full page pix.save('/tmp/workspace/mohit_id/full_page.png') print(f'Full page: {pix.width}x{pix.height}') # Now crop each of the 6 cards # Each card occupies roughly half the width and 1/3 of the height # From the block bboxes: 3 rows at approx y=0-290, 290-530, 530-770 # 2 cols: left x=0-297, right x=297-595 card_regions = [ ('card_1_top_left', fitz.Rect(0, 0, 297.5, 300)), ('card_2_top_right', fitz.Rect(297.5, 0, 595, 300)), ('card_3_mid_left', fitz.Rect(0, 300, 297.5, 540)), ('card_4_mid_right', fitz.Rect(297.5, 300, 595, 540)), ('card_5_bot_left', fitz.Rect(0, 540, 297.5, 780)), ('card_6_bot_right', fitz.Rect(297.5, 540, 595, 780)), ] scale = 150/72 for name, rect in card_regions: clip = fitz.Rect(rect.x0*scale, rect.y0*scale, rect.x1*scale, rect.y1*scale) # Use get_pixmap with clip on the already scaled pixmap # Instead, render the page clipped to this rect pix2 = page.get_pixmap(matrix=mat, clip=rect) pix2.save(f'/tmp/workspace/mohit_id/{name}.png') print(f'Saved {name}: {pix2.width}x{pix2.height}') doc.close() EOF
python3 -c " import fitz pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' doc = fitz.open(pdf_path) page = doc[0] # Try to get text using different extraction modes for method in ['text', 'blocks', 'words', 'html', 'xml']: result = page.get_text(method) if result and result.strip(): print(f'=== {method} ===') print(result[:500]) print() doc.close() "
python3 -c "import pytesseract; print('tesseract ok')" 2>&1; python3 -c "import easyocr; print('easyocr ok')" 2>&1
python3 << 'EOF' # Extract the JPEG images embedded in the PDF and analyze them import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id/images', exist_ok=True) doc = fitz.open(pdf_path) page = doc[0] # Get all images from the page img_list = page.get_images(full=True) print(f'Images found: {len(img_list)}') for i, img in enumerate(img_list): xref = img[0] base_image = doc.extract_image(xref) img_bytes = base_image['image'] ext = base_image['ext'] width = base_image['width'] height = base_image['height'] print(f'Image {i}: xref={xref}, {width}x{height}, {ext}, size={len(img_bytes)}') # Save the large images (likely the ID card backgrounds) if width > 200 or height > 200: path = f'/tmp/workspace/mohit_id/images/img_{i}_{width}x{height}.{ext}' with open(path, 'wb') as f: f.write(img_bytes) doc.close() EOF
python3 << 'EOF' import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' doc = fitz.open(pdf_path) page = doc[0] # Get all images with their positions on the page d = page.get_text('rawdict') # Get image positions from page img_list = page.get_image_rects(full=True) # This won't work directly, let's use get_images with their transform matrices # Let's look at the HTML output to find image positions html = page.get_text('html') # Find all img tags import re imgs = re.findall(r'<img[^>]+>', html) print(f'Found {len(imgs)} img tags in HTML') for i, img in enumerate(imgs[:3]): print(f' img {i}: {img[:200]}') # Let's get image positions properly print('\n--- Image xrefs and positions ---') for img_info in page.get_images(): xref = img_info[0] # Get the rect for this image on the page rects = page.get_image_rects(xref) base = doc.extract_image(xref) print(f'xref={xref}, {base["width"]}x{base["height"]}, rects={rects}') doc.close() EOF
python3 << 'EOF' import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id/cards', exist_ok=True) doc = fitz.open(pdf_path) page = doc[0] # Get image positions on the page for img_info in page.get_images(): xref = img_info[0] rects = page.get_image_rects(xref) base = doc.extract_image(xref) w, h = base["width"], base["height"] print(f'xref={xref}, {w}x{h}, rects={rects}') doc.close() EOF
python3 << 'EOF' import fitz import os pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id/cards', exist_ok=True) os.makedirs('/tmp/workspace/mohit_id/names', exist_ok=True) doc = fitz.open(pdf_path) page = doc[0] # Name label positions (xref, rect, position label) name_labels = [ (272, fitz.Rect(10.32, 272.16, 61.56, 284.28), 'row1_left'), (277, fitz.Rect(306.0, 273.24, 349.44, 285.36), 'row1_right'), (282, fitz.Rect(13.08, 509.16, 60.84, 522.36), 'row2_left'), (287, fitz.Rect(309.72, 506.04, 353.16, 525.12), 'row2_right'), (292, fitz.Rect(14.16, 744.60, 58.08, 761.04), 'row3_left'), (297, fitz.Rect(309.72, 747.60, 341.52, 761.40), 'row3_right'), ] # Save each name label as image (extracted directly) for xref, rect, label in name_labels: base = doc.extract_image(xref) with open(f'/tmp/workspace/mohit_id/names/{label}_xref{xref}.{base["ext"]}', 'wb') as f: f.write(base['image']) # Also render each full card at high res (300 DPI) for visual inspection card_bounds = [ ('row1_left', fitz.Rect(0, 54, 297.5, 296)), ('row1_right', fitz.Rect(297.5, 54, 595, 296)), ('row2_left', fitz.Rect(0, 292, 297.5, 534)), ('row2_right', fitz.Rect(297.5, 292, 595, 534)), ('row3_left', fitz.Rect(0, 530, 297.5, 772)), ('row3_right', fitz.Rect(297.5, 530, 595, 772)), ] mat = fitz.Matrix(3, 3) # 3x scale = ~216 DPI for label, rect in card_bounds: pix = page.get_pixmap(matrix=mat, clip=rect) pix.save(f'/tmp/workspace/mohit_id/cards/{label}.png') print(f'Saved card {label}: {pix.width}x{pix.height}') doc.close() print('Done!') EOF
python3 << 'EOF' import fitz import os from PIL import Image import io pdf_path = '/tmp/workspace/attachments/ef038fe8-d6f5-4bbf-b3b9-9d3bd3474734/Medical ID mohit Tabiyar.pdf' os.makedirs('/tmp/workspace/mohit_id/output', exist_ok=True) doc = fitz.open(pdf_path) page = doc[0] # Page dimensions: 595.32 x 841.92 pts # The PDF has 6 ID cards in 2 columns x 3 rows # Cards appear to span these y-ranges (from image analysis): # Row 1: y=0 to ~296 (name labels at y~272-285) # Row 2: y~296 to ~534 (name labels at y~509-522) # Row 3: y~534 to ~772 (name labels at y~744-761) # Left col: x=0 to ~297.5, Right col: x~297.5 to 595 # Since we can't do OCR, we need to extract name label images and check them. # Let me extract the 6 name labels as high-res crops from the rendered page mat = fitz.Matrix(5, 5) # 5x for very high res to read names name_rects = { 'row1_left': fitz.Rect(0, 262, 100, 295), 'row1_right': fitz.Rect(295, 263, 395, 295), 'row2_left': fitz.Rect(0, 499, 100, 532), 'row2_right': fitz.Rect(295, 496, 400, 534), 'row3_left': fitz.Rect(0, 734, 100, 770), 'row3_right': fitz.Rect(295, 737, 395, 770), } for label, rect in name_rects.items(): pix = page.get_pixmap(matrix=mat, clip=rect) pix.save(f'/tmp/workspace/mohit_id/names/name_{label}.png') print(f'Saved name crop {label}: {pix.width}x{pix.height}') doc.close() # Now let's try to read the name images using PIL to look at pixel data # and see if any have "MOHIT" or "Tabiyar" text pattern # Since we can't do OCR let's check pixel brightness patterns print('\nChecking name image files:') for f in sorted(os.listdir('/tmp/workspace/mohit_id/names/')): path = f'/tmp/workspace/mohit_id/names/{f}' size = os.path.getsize(path) print(f' {f}: {size} bytes') EOF
| Position | Column | Row |
|---|---|---|
| Row 1 Left | x: 0–297 | y: 0–296 |
| Row 1 Right | x: 297–595 | y: 0–296 |
| Row 2 Left | x: 0–297 | y: 296–534 |
| Row 2 Right | x: 297–595 | y: 296–534 |
| Row 3 Left | x: 0–297 | y: 534–772 |
| Row 3 Right | x: 297–595 | y: 534–772 |
Continue
python3 << 'EOF' # Try to use PIL to analyze the name label images and detect text # Also, let's look at the raw JPEG name labels extracted from the PDF import os from PIL import Image import io names_dir = '/tmp/workspace/mohit_id/names/' # Read each extracted JPEG name label jpegs = sorted([f for f in os.listdir(names_dir) if f.endswith('.jpeg')]) print("JPEG name labels:") for f in jpegs: img = Image.open(os.path.join(names_dir, f)) print(f" {f}: {img.size}, mode={img.mode}") # Convert to grayscale and check pixel distribution gray = img.convert('L') pixels = list(gray.getdata()) avg = sum(pixels)/len(pixels) dark = sum(1 for p in pixels if p < 100) print(f" avg brightness={avg:.1f}, dark pixels={dark}/{len(pixels)}") EOF
python3 << 'EOF' # Create a composite image showing all 6 name labels side by side for comparison # and save as a single PNG that we can convert to base64 for analysis from PIL import Image, ImageDraw, ImageFont import os, base64 names_dir = '/tmp/workspace/mohit_id/names/' jpegs = [ ('row1_left', 'row1_left_xref272.jpeg'), ('row1_right', 'row1_right_xref277.jpeg'), ('row2_left', 'row2_left_xref282.jpeg'), ('row2_right', 'row2_right_xref287.jpeg'), ('row3_left', 'row3_left_xref292.jpeg'), ('row3_right', 'row3_right_xref297.jpeg'), ] # Create composite at 4x scale composite = Image.new('RGB', (800, 500), (200, 200, 200)) y_off = 10 for label, fname in jpegs: img = Image.open(os.path.join(names_dir, fname)) # Scale up 4x for visibility w, h = img.size img_big = img.resize((w*4, h*4), Image.LANCZOS) # Add label draw = ImageDraw.Draw(composite) draw.rectangle([5, y_off-2, 795, y_off + img_big.height + 15], fill=(240,240,240)) draw.text((5, y_off), label, fill=(0,0,0)) composite.paste(img_big, (5, y_off + 15)) y_off += img_big.height + 25 composite.save('/tmp/workspace/mohit_id/all_names_composite.png') print(f'Saved composite: {composite.size}') # Also save as base64 snippet to check with open('/tmp/workspace/mohit_id/all_names_composite.png', 'rb') as f: b64 = base64.b64encode(f.read()).decode() print(f'Base64 length: {len(b64)}') EOF
python3 << 'EOF' # Try a completely different approach: use the full page card images # and create a labeled composite showing all 6 cards with position labels # Then use the card PNG files from /tmp/workspace/mohit_id/cards/ # to build a reference sheet from PIL import Image, ImageDraw import os cards_dir = '/tmp/workspace/mohit_id/cards/' cards = [ 'row1_left.png', 'row1_right.png', 'row2_left.png', 'row2_right.png', 'row3_left.png', 'row3_right.png', ] # Thumbnail each card and put them in a grid with labels thumb_w, thumb_h = 300, 240 cols, rows = 2, 3 pad = 40 composite = Image.new('RGB', (cols*(thumb_w+pad)+pad, rows*(thumb_h+pad)+pad), (50,50,50)) draw = ImageDraw.Draw(composite) for i, fname in enumerate(cards): col = i % 2 row = i // 2 x = pad + col * (thumb_w + pad) y = pad + row * (thumb_h + pad) img = Image.open(os.path.join(cards_dir, fname)) thumb = img.resize((thumb_w, thumb_h), Image.LANCZOS) composite.paste(thumb, (x, y)) # Draw label box label = fname.replace('.png', '') draw.rectangle([x, y+thumb_h-25, x+thumb_w, y+thumb_h], fill=(0,0,0,180)) draw.text((x+5, y+thumb_h-22), label, fill=(255,255,0)) composite.save('/tmp/workspace/mohit_id/cards_overview.png') print(f'Saved overview: {composite.size}') print(f'File size: {os.path.getsize("/tmp/workspace/mohit_id/cards_overview.png")} bytes') EOF