[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N02SHHJVDPQJ9GSFRYGGR7":3,"skill-same:01M6N02SHHJVDPQJ9GSFRYGGR7":89},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":6,"ownerHtmlUrl":66,"ownerBlogUrl":6,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6N02SHHJVDPQJ9GSFRYGGR7","layout-analyzer",null,"Analyze document structure and layout using surya - detect text blocks, tables, and reading order","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Flayout-analyzer\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"layout","layout analyzer","analyzer","detect","file","surya","tables","office","opus","sonnet","document-analysis","reading","execution","code","structure","document","computer","text","analyze","analysis","2026-11-10 10:12:30",false,"---\nname: layout-analyzer\ndescription: Analyze document structure and layout using surya - detect text blocks, tables, and reading order\nauthor: claude-office-skills\nversion: \"1.0\"\ntags: [layout, surya, structure, document-analysis, detection]\nmodels: [claude-sonnet-4, claude-opus-4]\ntools: [computer, code_execution, file_operations]\nlibrary:\n  name: surya\n  url: https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya\n  stars: 19k\n---\n\n# Layout Analyzer Skill\n\n## Overview\n\nThis skill enables document layout analysis using **surya** - an advanced document understanding system. Detect text blocks, tables, figures, headings, and determine reading order in complex documents.\n\n## How to Use\n\n1. Provide the document image or PDF\n2. Specify what layout elements to detect\n3. I'll analyze the structure and return detected regions\n\n**Example prompts:**\n- \"Analyze the layout of this document page\"\n- \"Detect all tables and text blocks in this image\"\n- \"Determine the reading order for this PDF page\"\n- \"Find headings and paragraphs in this document\"\n\n## Domain Knowledge\n\n### surya Fundamentals\n\n```python\nfrom surya.detection import DetectionPredictor\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom PIL import Image\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Detect layout elements\nlayout_predictor = LayoutPredictor()\nlayout_result = layout_predictor([image])\n```\n\n### Layout Element Types\n\n| Element | Description |\n|---------|-------------|\n| Text | Regular paragraph text |\n| Title | Document\u002Fsection titles |\n| Section-header | Section headings |\n| List-item | Bulleted\u002Fnumbered items |\n| Table | Tabular data |\n| Figure | Images\u002Fdiagrams |\n| Caption | Figure\u002Ftable captions |\n| Footnote | Footnotes |\n| Formula | Mathematical equations |\n| Page-header | Headers |\n| Page-footer | Footers |\n\n### Text Detection\n\n```python\nfrom surya.detection import DetectionPredictor\nfrom PIL import Image\n\n# Initialize detector\ndetector = DetectionPredictor()\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Detect text regions\nresults = detector([image])\n\n# Access results\nfor page_result in results:\n    for bbox in page_result.bboxes:\n        print(f\"Text region: {bbox.bbox}\")\n        print(f\"Confidence: {bbox.confidence}\")\n```\n\n### Layout Analysis\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Initialize layout predictor\nlayout_predictor = LayoutPredictor()\n\n# Analyze layout\nimage = Image.open(\"document.png\")\nlayout_results = layout_predictor([image])\n\n# Process results\nfor page_result in layout_results:\n    for element in page_result.bboxes:\n        print(f\"Type: {element.label}\")\n        print(f\"Bbox: {element.bbox}\")\n        print(f\"Confidence: {element.confidence}\")\n```\n\n### Reading Order Detection\n\n```python\nfrom surya.reading_order import ReadingOrderPredictor\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Get layout first\nlayout_predictor = LayoutPredictor()\nimage = Image.open(\"document.png\")\nlayout_results = layout_predictor([image])\n\n# Determine reading order\nreading_order_predictor = ReadingOrderPredictor()\norder_results = reading_order_predictor([image], layout_results)\n\n# Access ordered elements\nfor page_result in order_results:\n    for i, element in enumerate(page_result.ordered_bboxes):\n        print(f\"{i+1}. {element.label}: {element.bbox}\")\n```\n\n### OCR with Layout\n\n```python\nfrom surya.ocr import OCRPredictor\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Initialize predictors\nocr_predictor = OCRPredictor()\nlayout_predictor = LayoutPredictor()\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Get layout\nlayout_results = layout_predictor([image])\n\n# Run OCR\nocr_results = ocr_predictor([image])\n\n# Combine results\nfor layout, ocr in zip(layout_results, ocr_results):\n    for layout_elem in layout.bboxes:\n        print(f\"Element: {layout_elem.label}\")\n        \n        # Find OCR text within this layout element\n        for text_line in ocr.text_lines:\n            if boxes_overlap(layout_elem.bbox, text_line.bbox):\n                print(f\"  Text: {text_line.text}\")\n```\n\n### Processing PDFs\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom pdf2image import convert_from_path\n\ndef analyze_pdf_layout(pdf_path):\n    \"\"\"Analyze layout of all pages in PDF.\"\"\"\n    \n    # Convert PDF to images\n    images = convert_from_path(pdf_path)\n    \n    # Initialize predictor\n    layout_predictor = LayoutPredictor()\n    \n    # Analyze all pages\n    results = layout_predictor(images)\n    \n    document_structure = []\n    \n    for page_num, page_result in enumerate(results):\n        page_elements = []\n        \n        for element in page_result.bboxes:\n            page_elements.append({\n                'type': element.label,\n                'bbox': element.bbox,\n                'confidence': element.confidence\n            })\n        \n        document_structure.append({\n            'page': page_num + 1,\n            'elements': page_elements\n        })\n    \n    return document_structure\n\nstructure = analyze_pdf_layout(\"document.pdf\")\n```\n\n### Visualization\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image, ImageDraw, ImageFont\n\ndef visualize_layout(image_path, output_path):\n    \"\"\"Visualize detected layout elements.\"\"\"\n    \n    image = Image.open(image_path)\n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    # Create drawing context\n    draw = ImageDraw.Draw(image)\n    \n    # Color mapping for element types\n    colors = {\n        'Text': 'blue',\n        'Title': 'red',\n        'Table': 'green',\n        'Figure': 'purple',\n        'Section-header': 'orange',\n        'List-item': 'cyan',\n    }\n    \n    for element in results[0].bboxes:\n        bbox = element.bbox\n        color = colors.get(element.label, 'gray')\n        \n        # Draw rectangle\n        draw.rectangle(bbox, outline=color, width=2)\n        \n        # Add label\n        draw.text((bbox[0], bbox[1] - 15), \n                  f\"{element.label} ({element.confidence:.2f})\",\n                  fill=color)\n    \n    image.save(output_path)\n    return output_path\n```\n\n## Best Practices\n\n1. **Use High-Quality Images**: 150+ DPI for best results\n2. **Preprocess if Needed**: Deskew rotated documents\n3. **Validate Results**: Check confidence scores\n4. **Handle Multi-page**: Process pages individually\n5. **Combine with OCR**: Get text within detected regions\n\n## Common Patterns\n\n### Document Structure Extraction\n```python\ndef extract_document_structure(image_path):\n    \"\"\"Extract hierarchical document structure.\"\"\"\n    \n    from surya.layout import LayoutPredictor\n    from surya.reading_order import ReadingOrderPredictor\n    \n    image = Image.open(image_path)\n    \n    # Get layout\n    layout_predictor = LayoutPredictor()\n    layout_results = layout_predictor([image])\n    \n    # Get reading order\n    order_predictor = ReadingOrderPredictor()\n    order_results = order_predictor([image], layout_results)\n    \n    structure = {\n        'title': None,\n        'sections': [],\n        'tables': [],\n        'figures': []\n    }\n    \n    current_section = None\n    \n    for element in order_results[0].ordered_bboxes:\n        if element.label == 'Title':\n            structure['title'] = element\n        elif element.label == 'Section-header':\n            current_section = {'header': element, 'content': []}\n            structure['sections'].append(current_section)\n        elif element.label == 'Table':\n            structure['tables'].append(element)\n        elif element.label == 'Figure':\n            structure['figures'].append(element)\n        elif current_section and element.label in ['Text', 'List-item']:\n            current_section['content'].append(element)\n    \n    return structure\n```\n\n### Table Region Extraction\n```python\ndef extract_table_regions(image_path):\n    \"\"\"Extract table regions from document.\"\"\"\n    \n    from surya.layout import LayoutPredictor\n    \n    image = Image.open(image_path)\n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    tables = []\n    \n    for element in results[0].bboxes:\n        if element.label == 'Table':\n            bbox = element.bbox\n            \n            # Crop table region\n            table_image = image.crop(bbox)\n            \n            tables.append({\n                'bbox': bbox,\n                'image': table_image,\n                'confidence': element.confidence\n            })\n    \n    return tables\n```\n\n## Examples\n\n### Example 1: Academic Paper Analysis\n```python\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom pdf2image import convert_from_path\n\ndef analyze_academic_paper(pdf_path):\n    \"\"\"Analyze structure of academic paper.\"\"\"\n    \n    images = convert_from_path(pdf_path)\n    \n    layout_predictor = LayoutPredictor()\n    order_predictor = ReadingOrderPredictor()\n    \n    paper_structure = {\n        'pages': [],\n        'element_counts': {\n            'Title': 0,\n            'Section-header': 0,\n            'Text': 0,\n            'Table': 0,\n            'Figure': 0,\n            'Formula': 0,\n            'Footnote': 0\n        }\n    }\n    \n    layout_results = layout_predictor(images)\n    order_results = order_predictor(images, layout_results)\n    \n    for page_num, (layout, order) in enumerate(zip(layout_results, order_results)):\n        page_structure = {\n            'page': page_num + 1,\n            'elements': []\n        }\n        \n        for element in order.ordered_bboxes:\n            page_structure['elements'].append({\n                'type': element.label,\n                'bbox': element.bbox,\n                'order': element.position\n            })\n            \n            # Count element types\n            if element.label in paper_structure['element_counts']:\n                paper_structure['element_counts'][element.label] += 1\n        \n        paper_structure['pages'].append(page_structure)\n    \n    return paper_structure\n\npaper = analyze_academic_paper('research_paper.pdf')\nprint(f\"Total tables: {paper['element_counts']['Table']}\")\nprint(f\"Total figures: {paper['element_counts']['Figure']}\")\n```\n\n### Example 2: Form Field Detection\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\ndef detect_form_fields(image_path):\n    \"\"\"Detect form fields and labels.\"\"\"\n    \n    image = Image.open(image_path)\n    \n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    form_fields = []\n    \n    for element in results[0].bboxes:\n        # Look for text elements that might be labels\n        if element.label == 'Text':\n            # Check if there's a box\u002Fline nearby (potential input field)\n            form_fields.append({\n                'type': 'potential_label',\n                'bbox': element.bbox,\n                'confidence': element.confidence\n            })\n    \n    return form_fields\n\nfields = detect_form_fields('form.png')\nprint(f\"Found {len(fields)} potential form elements\")\n```\n\n### Example 3: Multi-column Article\n```python\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom PIL import Image\n\ndef process_multicolumn_article(image_path):\n    \"\"\"Process multi-column article layout.\"\"\"\n    \n    image = Image.open(image_path)\n    \n    layout_predictor = LayoutPredictor()\n    order_predictor = ReadingOrderPredictor()\n    \n    layout_results = layout_predictor([image])\n    order_results = order_predictor([image], layout_results)\n    \n    # Group elements by column\n    image_width = image.width\n    column_threshold = image_width \u002F 2\n    \n    columns = {\n        'left': [],\n        'right': [],\n        'full_width': []\n    }\n    \n    for element in order_results[0].ordered_bboxes:\n        bbox = element.bbox\n        element_center = (bbox[0] + bbox[2]) \u002F 2\n        element_width = bbox[2] - bbox[0]\n        \n        # Determine column\n        if element_width > column_threshold * 1.5:\n            columns['full_width'].append(element)\n        elif element_center \u003C column_threshold:\n            columns['left'].append(element)\n        else:\n            columns['right'].append(element)\n    \n    return {\n        'layout': 'multi-column',\n        'columns': columns,\n        'reading_order': order_results[0].ordered_bboxes\n    }\n\narticle = process_multicolumn_article('newspaper_page.png')\nprint(f\"Left column: {len(article['columns']['left'])} elements\")\nprint(f\"Right column: {len(article['columns']['right'])} elements\")\n```\n\n## Limitations\n\n- Handwritten layouts may be inaccurate\n- Very small text regions may be missed\n- Complex nested layouts challenging\n- GPU recommended for batch processing\n- Multi-language support varies\n\n## Installation\n\n```bash\npip install surya-ocr\n\n# For PDF processing\npip install pdf2image\n```\n\n## Resources\n\n- [surya GitHub](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya)\n- [Model Documentation](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya#models)\n- [Examples](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya\u002Ftree\u002Fmaster\u002Fexamples)\n","# Layout Analyzer Skill\n\n## Overview\n\nThis skill enables document layout analysis using **surya** - an advanced document understanding system. Detect text blocks, tables, figures, headings, and determine reading order in complex documents.\n\n## How to Use\n\n1. Provide the document image or PDF\n2. Specify what layout elements to detect\n3. I'll analyze the structure and return detected regions\n\n**Example prompts:**\n- \"Analyze the layout of this document page\"\n- \"Detect all tables and text blocks in this image\"\n- \"Determine the reading order for this PDF page\"\n- \"Find headings and paragraphs in this document\"\n\n## Domain Knowledge\n\n### surya Fundamentals\n\n```python\nfrom surya.detection import DetectionPredictor\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom PIL import Image\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Detect layout elements\nlayout_predictor = LayoutPredictor()\nlayout_result = layout_predictor([image])\n```\n\n### Layout Element Types\n\n| Element | Description |\n|---------|-------------|\n| Text | Regular paragraph text |\n| Title | Document\u002Fsection titles |\n| Section-header | Section headings |\n| List-item | Bulleted\u002Fnumbered items |\n| Table | Tabular data |\n| Figure | Images\u002Fdiagrams |\n| Caption | Figure\u002Ftable captions |\n| Footnote | Footnotes |\n| Formula | Mathematical equations |\n| Page-header | Headers |\n| Page-footer | Footers |\n\n### Text Detection\n\n```python\nfrom surya.detection import DetectionPredictor\nfrom PIL import Image\n\n# Initialize detector\ndetector = DetectionPredictor()\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Detect text regions\nresults = detector([image])\n\n# Access results\nfor page_result in results:\n    for bbox in page_result.bboxes:\n        print(f\"Text region: {bbox.bbox}\")\n        print(f\"Confidence: {bbox.confidence}\")\n```\n\n### Layout Analysis\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Initialize layout predictor\nlayout_predictor = LayoutPredictor()\n\n# Analyze layout\nimage = Image.open(\"document.png\")\nlayout_results = layout_predictor([image])\n\n# Process results\nfor page_result in layout_results:\n    for element in page_result.bboxes:\n        print(f\"Type: {element.label}\")\n        print(f\"Bbox: {element.bbox}\")\n        print(f\"Confidence: {element.confidence}\")\n```\n\n### Reading Order Detection\n\n```python\nfrom surya.reading_order import ReadingOrderPredictor\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Get layout first\nlayout_predictor = LayoutPredictor()\nimage = Image.open(\"document.png\")\nlayout_results = layout_predictor([image])\n\n# Determine reading order\nreading_order_predictor = ReadingOrderPredictor()\norder_results = reading_order_predictor([image], layout_results)\n\n# Access ordered elements\nfor page_result in order_results:\n    for i, element in enumerate(page_result.ordered_bboxes):\n        print(f\"{i+1}. {element.label}: {element.bbox}\")\n```\n\n### OCR with Layout\n\n```python\nfrom surya.ocr import OCRPredictor\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\n# Initialize predictors\nocr_predictor = OCRPredictor()\nlayout_predictor = LayoutPredictor()\n\n# Load image\nimage = Image.open(\"document.png\")\n\n# Get layout\nlayout_results = layout_predictor([image])\n\n# Run OCR\nocr_results = ocr_predictor([image])\n\n# Combine results\nfor layout, ocr in zip(layout_results, ocr_results):\n    for layout_elem in layout.bboxes:\n        print(f\"Element: {layout_elem.label}\")\n        \n        # Find OCR text within this layout element\n        for text_line in ocr.text_lines:\n            if boxes_overlap(layout_elem.bbox, text_line.bbox):\n                print(f\"  Text: {text_line.text}\")\n```\n\n### Processing PDFs\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom pdf2image import convert_from_path\n\ndef analyze_pdf_layout(pdf_path):\n    \"\"\"Analyze layout of all pages in PDF.\"\"\"\n    \n    # Convert PDF to images\n    images = convert_from_path(pdf_path)\n    \n    # Initialize predictor\n    layout_predictor = LayoutPredictor()\n    \n    # Analyze all pages\n    results = layout_predictor(images)\n    \n    document_structure = []\n    \n    for page_num, page_result in enumerate(results):\n        page_elements = []\n        \n        for element in page_result.bboxes:\n            page_elements.append({\n                'type': element.label,\n                'bbox': element.bbox,\n                'confidence': element.confidence\n            })\n        \n        document_structure.append({\n            'page': page_num + 1,\n            'elements': page_elements\n        })\n    \n    return document_structure\n\nstructure = analyze_pdf_layout(\"document.pdf\")\n```\n\n### Visualization\n\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image, ImageDraw, ImageFont\n\ndef visualize_layout(image_path, output_path):\n    \"\"\"Visualize detected layout elements.\"\"\"\n    \n    image = Image.open(image_path)\n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    # Create drawing context\n    draw = ImageDraw.Draw(image)\n    \n    # Color mapping for element types\n    colors = {\n        'Text': 'blue',\n        'Title': 'red',\n        'Table': 'green',\n        'Figure': 'purple',\n        'Section-header': 'orange',\n        'List-item': 'cyan',\n    }\n    \n    for element in results[0].bboxes:\n        bbox = element.bbox\n        color = colors.get(element.label, 'gray')\n        \n        # Draw rectangle\n        draw.rectangle(bbox, outline=color, width=2)\n        \n        # Add label\n        draw.text((bbox[0], bbox[1] - 15), \n                  f\"{element.label} ({element.confidence:.2f})\",\n                  fill=color)\n    \n    image.save(output_path)\n    return output_path\n```\n\n## Best Practices\n\n1. **Use High-Quality Images**: 150+ DPI for best results\n2. **Preprocess if Needed**: Deskew rotated documents\n3. **Validate Results**: Check confidence scores\n4. **Handle Multi-page**: Process pages individually\n5. **Combine with OCR**: Get text within detected regions\n\n## Common Patterns\n\n### Document Structure Extraction\n```python\ndef extract_document_structure(image_path):\n    \"\"\"Extract hierarchical document structure.\"\"\"\n    \n    from surya.layout import LayoutPredictor\n    from surya.reading_order import ReadingOrderPredictor\n    \n    image = Image.open(image_path)\n    \n    # Get layout\n    layout_predictor = LayoutPredictor()\n    layout_results = layout_predictor([image])\n    \n    # Get reading order\n    order_predictor = ReadingOrderPredictor()\n    order_results = order_predictor([image], layout_results)\n    \n    structure = {\n        'title': None,\n        'sections': [],\n        'tables': [],\n        'figures': []\n    }\n    \n    current_section = None\n    \n    for element in order_results[0].ordered_bboxes:\n        if element.label == 'Title':\n            structure['title'] = element\n        elif element.label == 'Section-header':\n            current_section = {'header': element, 'content': []}\n            structure['sections'].append(current_section)\n        elif element.label == 'Table':\n            structure['tables'].append(element)\n        elif element.label == 'Figure':\n            structure['figures'].append(element)\n        elif current_section and element.label in ['Text', 'List-item']:\n            current_section['content'].append(element)\n    \n    return structure\n```\n\n### Table Region Extraction\n```python\ndef extract_table_regions(image_path):\n    \"\"\"Extract table regions from document.\"\"\"\n    \n    from surya.layout import LayoutPredictor\n    \n    image = Image.open(image_path)\n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    tables = []\n    \n    for element in results[0].bboxes:\n        if element.label == 'Table':\n            bbox = element.bbox\n            \n            # Crop table region\n            table_image = image.crop(bbox)\n            \n            tables.append({\n                'bbox': bbox,\n                'image': table_image,\n                'confidence': element.confidence\n            })\n    \n    return tables\n```\n\n## Examples\n\n### Example 1: Academic Paper Analysis\n```python\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom pdf2image import convert_from_path\n\ndef analyze_academic_paper(pdf_path):\n    \"\"\"Analyze structure of academic paper.\"\"\"\n    \n    images = convert_from_path(pdf_path)\n    \n    layout_predictor = LayoutPredictor()\n    order_predictor = ReadingOrderPredictor()\n    \n    paper_structure = {\n        'pages': [],\n        'element_counts': {\n            'Title': 0,\n            'Section-header': 0,\n            'Text': 0,\n            'Table': 0,\n            'Figure': 0,\n            'Formula': 0,\n            'Footnote': 0\n        }\n    }\n    \n    layout_results = layout_predictor(images)\n    order_results = order_predictor(images, layout_results)\n    \n    for page_num, (layout, order) in enumerate(zip(layout_results, order_results)):\n        page_structure = {\n            'page': page_num + 1,\n            'elements': []\n        }\n        \n        for element in order.ordered_bboxes:\n            page_structure['elements'].append({\n                'type': element.label,\n                'bbox': element.bbox,\n                'order': element.position\n            })\n            \n            # Count element types\n            if element.label in paper_structure['element_counts']:\n                paper_structure['element_counts'][element.label] += 1\n        \n        paper_structure['pages'].append(page_structure)\n    \n    return paper_structure\n\npaper = analyze_academic_paper('research_paper.pdf')\nprint(f\"Total tables: {paper['element_counts']['Table']}\")\nprint(f\"Total figures: {paper['element_counts']['Figure']}\")\n```\n\n### Example 2: Form Field Detection\n```python\nfrom surya.layout import LayoutPredictor\nfrom PIL import Image\n\ndef detect_form_fields(image_path):\n    \"\"\"Detect form fields and labels.\"\"\"\n    \n    image = Image.open(image_path)\n    \n    layout_predictor = LayoutPredictor()\n    results = layout_predictor([image])\n    \n    form_fields = []\n    \n    for element in results[0].bboxes:\n        # Look for text elements that might be labels\n        if element.label == 'Text':\n            # Check if there's a box\u002Fline nearby (potential input field)\n            form_fields.append({\n                'type': 'potential_label',\n                'bbox': element.bbox,\n                'confidence': element.confidence\n            })\n    \n    return form_fields\n\nfields = detect_form_fields('form.png')\nprint(f\"Found {len(fields)} potential form elements\")\n```\n\n### Example 3: Multi-column Article\n```python\nfrom surya.layout import LayoutPredictor\nfrom surya.reading_order import ReadingOrderPredictor\nfrom PIL import Image\n\ndef process_multicolumn_article(image_path):\n    \"\"\"Process multi-column article layout.\"\"\"\n    \n    image = Image.open(image_path)\n    \n    layout_predictor = LayoutPredictor()\n    order_predictor = ReadingOrderPredictor()\n    \n    layout_results = layout_predictor([image])\n    order_results = order_predictor([image], layout_results)\n    \n    # Group elements by column\n    image_width = image.width\n    column_threshold = image_width \u002F 2\n    \n    columns = {\n        'left': [],\n        'right': [],\n        'full_width': []\n    }\n    \n    for element in order_results[0].ordered_bboxes:\n        bbox = element.bbox\n        element_center = (bbox[0] + bbox[2]) \u002F 2\n        element_width = bbox[2] - bbox[0]\n        \n        # Determine column\n        if element_width > column_threshold * 1.5:\n            columns['full_width'].append(element)\n        elif element_center \u003C column_threshold:\n            columns['left'].append(element)\n        else:\n            columns['right'].append(element)\n    \n    return {\n        'layout': 'multi-column',\n        'columns': columns,\n        'reading_order': order_results[0].ordered_bboxes\n    }\n\narticle = process_multicolumn_article('newspaper_page.png')\nprint(f\"Left column: {len(article['columns']['left'])} elements\")\nprint(f\"Right column: {len(article['columns']['right'])} elements\")\n```\n\n## Limitations\n\n- Handwritten layouts may be inaccurate\n- Very small text regions may be missed\n- Complex nested layouts challenging\n- GPU recommended for batch processing\n- Multi-language support varies\n\n## Installation\n\n```bash\npip install surya-ocr\n\n# For PDF processing\npip install pdf2image\n```\n\n## Resources\n\n- [surya GitHub](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya)\n- [Model Documentation](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya#models)\n- [Examples](https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya\u002Ftree\u002Fmaster\u002Fexamples)\n",{"name":5,"tags":48,"tools":50,"author":53,"models":54,"library":57,"version":60,"description":7},[23,28,37,33,49],"detection",[39,51,52],"code_execution","file_operations","claude-office-skills",[55,56],"claude-sonnet-4","claude-opus-4",{"url":58,"name":28,"stars":59},"https:\u002F\u002Fgithub.com\u002FVikParuchuri\u002Fsurya","19k","1.0","main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","人工智能与大型语言模型\u002Flayout-analyzer",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill layout-analyzer",{"tool":75,"command":76},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill layout-analyzer",{"tool":78,"command":79},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill layout-analyzer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Flayout-analyzer\u002FSKILL.md",true,[83],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"_meta.json","REFERENCE","参考文档",290,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Flayout-analyzer\u002F_meta.json",[90,114,148,159,169,199],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":43},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[92,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":130,"publishedAt":43},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[119,122,125],{"categoryNo":120,"categoryName":121,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":123,"categoryName":124,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[131,132,133,134,135,136,137,99,138,103,139,140,141,142,143,144,145,146,147],"api","zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":149,"name":150,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":43},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[153,154,155],{"categoryNo":120,"categoryName":121,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":123,"categoryName":124,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},[131,157,158,132,133,134,135,136,137,99,138,103,140,141,142,143,144,145,146,147],"api skill","zerion api skill",{"skillNo":160,"name":161,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":167,"publishedAt":43},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[164,165,166],{"categoryNo":120,"categoryName":121,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":123,"categoryName":124,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},[134,131,168,132,133,135,136,99,138,103,139,140,141,142,143,144,145,146,147],"zerion api mcp",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":178,"publishedAt":43},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[175],{"categoryNo":176,"categoryName":177,"taxonomyType":128,"taxonomyTypeDesc":129},"01JBSEEDCAT000000000000040","财务",[179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],"finance","yahoo finance","forex","yahoo","yahoo finance forex","github","https","sentiment","real-time","python3","install","Market","usd","news","time","currency","gbp","pip","market data","for",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":206,"publishedAt":43},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[205],{"categoryNo":176,"categoryName":177,"taxonomyType":128,"taxonomyTypeDesc":129},[179,180,182,207,208,209,210,211,212,190,213,214,215,216,217,218,219,220,147,197],"cli","homebrew","find","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]