<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)"> <meta name="author" content="PaddleOCR PMC"> <link rel="canonical" href="https://paddlepaddle.github.io/PaddleOCR/v2.9/en/algorithm/add_new_algorithm.html"> <link rel="prev" href="kie/algorithm_kie_sdmgr.html"> <link rel="next" href="../applications/overview.html"> <link rel="icon" href="../../static/images/logo.jpg"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.48"> <title>Add new algorithms - PaddleOCR Documentation</title> <link rel="stylesheet" href="../../assets/stylesheets/main.6f8fc17f.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <style>:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2"/></svg>');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M2.5 1.75v11.5c0 .138.112.25.25.25h3.17a.75.75 0 0 1 0 1.5H2.75A1.75 1.75 0 0 1 1 13.25V1.75C1 .784 1.784 0 2.75 0h8.5C12.216 0 13 .784 13 1.75v7.736a.75.75 0 0 1-1.5 0V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25m13.274 9.537zl-4.557 4.45a.75.75 0 0 1-1.055-.008l-1.943-1.95a.75.75 0 0 1 1.062-1.058l1.419 1.425 4.026-3.932a.75.75 0 1 1 1.048 1.074M4.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5M4 7.75A.75.75 0 0 1 4.75 7h2a.75.75 0 0 1 0 1.5h-2A.75.75 0 0 1 4 7.75"/></svg>');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8m8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13M6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75M8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/></svg>');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M3.499.75a.75.75 0 0 1 1.5 0v.996C5.9 2.903 6.793 3.65 7.662 4.376l.24.202c-.036-.694.055-1.422.426-2.163C9.1.873 10.794-.045 12.622.26 14.408.558 16 1.94 16 4.25c0 1.278-.954 2.575-2.44 2.734l.146.508.065.22c.203.701.412 1.455.476 2.226.142 1.707-.4 3.03-1.487 3.898C11.714 14.671 10.27 15 8.75 15h-6a.75.75 0 0 1 0-1.5h1.376a4.5 4.5 0 0 1-.563-1.191 3.84 3.84 0 0 1-.05-2.063 4.65 4.65 0 0 1-2.025-.293.75.75 0 0 1 .525-1.406c1.357.507 2.376-.006 2.698-.318l.009-.01a.747.747 0 0 1 1.06 0 .75.75 0 0 1-.012 1.074c-.912.92-.992 1.835-.768 2.586.221.74.745 1.337 1.196 1.621H8.75c1.343 0 2.398-.296 3.074-.836.635-.507 1.036-1.31.928-2.602-.05-.603-.216-1.224-.422-1.93l-.064-.221c-.12-.407-.246-.84-.353-1.29a2.4 2.4 0 0 1-.507-.441 3.1 3.1 0 0 1-.633-1.248.75.75 0 0 1 1.455-.364c.046.185.144.436.31.627.146.168.353.305.712.305.738 0 1.25-.615 1.25-1.25 0-1.47-.95-2.315-2.123-2.51-1.172-.196-2.227.387-2.706 1.345-.46.92-.27 1.774.019 3.062l.042.19.01.05c.348.443.666.949.94 1.553a.75.75 0 1 1-1.365.62c-.553-1.217-1.32-1.94-2.3-2.768L6.7 5.527c-.814-.68-1.75-1.462-2.692-2.619a3.7 3.7 0 0 0-1.023.88c-.406.495-.663 1.036-.722 1.508.116.122.306.21.591.239.388.038.797-.06 1.032-.19a.75.75 0 0 1 .728 1.31c-.515.287-1.23.439-1.906.373-.682-.067-1.473-.38-1.879-1.193L.75 5.677V5.5c0-.984.48-1.94 1.077-2.664.46-.559 1.05-1.055 1.673-1.353z"/></svg>');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0"/></svg>');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8m8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13M6.92 6.085h.001a.749.749 0 1 1-1.342-.67c.169-.339.436-.701.849-.977C6.845 4.16 7.369 4 8 4a2.76 2.76 0 0 1 1.637.525c.503.377.863.965.863 1.725 0 .448-.115.83-.329 1.15-.205.307-.47.513-.692.662-.109.072-.22.138-.313.195l-.006.004a6 6 0 0 0-.26.16 1 1 0 0 0-.276.245.75.75 0 0 1-1.248-.832c.184-.264.42-.489.692-.661q.154-.1.313-.195l.007-.004c.1-.061.182-.11.258-.161a1 1 0 0 0 .277-.245C8.96 6.514 9 6.427 9 6.25a.61.61 0 0 0-.262-.525A1.27 1.27 0 0 0 8 5.5c-.369 0-.595.09-.74.187a1 1 0 0 0-.34.398M9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/></svg>');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0M9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/></svg>');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M2.344 2.343za8 8 0 0 1 11.314 11.314A8.002 8.002 0 0 1 .234 10.089a8 8 0 0 1 2.11-7.746m1.06 10.253a6.5 6.5 0 1 0 9.108-9.275 6.5 6.5 0 0 0-9.108 9.275M6.03 4.97 8 6.94l1.97-1.97a.749.749 0 0 1 1.275.326.75.75 0 0 1-.215.734L9.06 8l1.97 1.97a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215L8 9.06l-1.97 1.97a.749.749 0 0 1-1.275-.326.75.75 0 0 1 .215-.734L6.94 8 4.97 6.03a.75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018"/></svg>');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.25 1.25 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006-.004-.009-.006-.006-.008-.001q-.005 0-.009.004"/></svg>');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4.72.22a.75.75 0 0 1 1.06 0l1 .999a3.5 3.5 0 0 1 2.441 0l.999-1a.748.748 0 0 1 1.265.332.75.75 0 0 1-.205.729l-.775.776c.616.63.995 1.493.995 2.444v.327q0 .15-.025.292c.408.14.764.392 1.029.722l1.968-.787a.75.75 0 0 1 .556 1.392L13 7.258V9h2.25a.75.75 0 0 1 0 1.5H13v.5q-.002.615-.141 1.186l2.17.868a.75.75 0 0 1-.557 1.392l-2.184-.873A5 5 0 0 1 8 16a5 5 0 0 1-4.288-2.427l-2.183.873a.75.75 0 0 1-.558-1.392l2.17-.868A5 5 0 0 1 3 11v-.5H.75a.75.75 0 0 1 0-1.5H3V7.258L.971 6.446a.75.75 0 0 1 .558-1.392l1.967.787c.265-.33.62-.583 1.03-.722a1.7 1.7 0 0 1-.026-.292V4.5c0-.951.38-1.814.995-2.444L4.72 1.28a.75.75 0 0 1 0-1.06m.53 6.28a.75.75 0 0 0-.75.75V11a3.5 3.5 0 1 0 7 0V7.25a.75.75 0 0 0-.75-.75ZM6.173 5h3.654A.17.17 0 0 0 10 4.827V4.5a2 2 0 1 0-4 0v.327c0 .096.077.173.173.173"/></svg>');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M5 5.782V2.5h-.25a.75.75 0 0 1 0-1.5h6.5a.75.75 0 0 1 0 1.5H11v3.282l3.666 5.76C15.619 13.04 14.543 15 12.767 15H3.233c-1.776 0-2.852-1.96-1.899-3.458Zm-2.4 6.565a.75.75 0 0 0 .633 1.153h9.534a.75.75 0 0 0 .633-1.153L12.225 10.5h-8.45ZM9.5 2.5h-3V6c0 .143-.04.283-.117.403L4.73 9h6.54L9.617 6.403A.75.75 0 0 1 9.5 6Z"/></svg>');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1.75 2.5h10.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5m4 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5m0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5M2.5 7.75v6a.75.75 0 0 1-1.5 0v-6a.75.75 0 0 1 1.5 0"/></svg>');}</style> <style>.md-tag.md-tag--default-tag{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 80v149.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0l133.5-133.5c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80m112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64"/></svg>');}.md-tag.md-tag--hardware-tag{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c-35.3 0-64 28.7-64 64H24c-13.3 0-24 10.7-24 24s10.7 24 24 24h40v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24h40v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24h40c0 35.3 28.7 64 64 64v40c0 13.3 10.7 24 24 24s24-10.7 24-24v-40h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24v-40h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24v-40c35.3 0 64-28.7 64-64h40c13.3 0 24-10.7 24-24s-10.7-24-24-24h-40v-56h40c13.3 0 24-10.7 24-24s-10.7-24-24-24h-40v-56h40c13.3 0 24-10.7 24-24s-10.7-24-24-24h-40c0-35.3-28.7-64-64-64V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40h-56V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40h-56zm-16 104h192c17.7 0 32 14.3 32 32v192c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32m192 32H160v192h192z"/></svg>');}.md-tag.md-tag--software-tag{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M64 96c0-35.3 28.7-64 64-64h384c35.3 0 64 28.7 64 64v256h-64V96H128v256H64zM0 403.2C0 392.6 8.6 384 19.2 384h601.6c10.6 0 19.2 8.6 19.2 19.2 0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2M281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zm112-34 48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z"/></svg>');}</style> <script src="https://unpkg.com/iframe-worker/shim"></script> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> <link rel="stylesheet" href="https://unpkg.com/katex@0/dist/katex.min.css"> <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> </head> <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#add-new-algorithm" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> You're not viewing the latest version. <a href="../../.."> <strong>Click here to go to latest.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../index.html" title="PaddleOCR Documentation" class="md-header__button md-logo" aria-label="PaddleOCR Documentation" data-md-component="logo"> <img src="../../static/images/logo.jpg" alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> PaddleOCR Documentation </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Add new algorithms </span> </div> </div> </div> <form class="md-header__option" data-md-component="palette"> <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0"> <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_1"> <label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class="md-header__option"> <div class="md-select"> <button class="md-header__button md-icon" aria-label="Select language"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg> </button> <div class="md-select__inner"> <ul class="md-select__list"> <li class="md-select__item"> <a href="../../algorithm/add_new_algorithm.html" hreflang="zh" class="md-select__link"> 简体中文 </a> </li> <li class="md-select__item"> <a href="add_new_algorithm.html" hreflang="en" class="md-select__link"> English </a> </li> <li class="md-select__item"> <a href="https://github.com/PaddlePaddle/PaddleOCR/discussions/13374" hreflang="null" class="md-select__link"> Help translating </a> </li> </ul> </div> </div> </div> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256l137.3-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class="md-search__suggest" data-md-component="search-suggest"></div> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> <div class="md-header__source"> <a href="https://github.com/PaddlePaddle/PaddleOCR" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> PaddlePaddle/PaddleOCR </div> </a> </div> </nav> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href="../index.html" class="md-tabs__link"> Home </a> </li> <li class="md-tabs__item"> <a href="../quick_start.html" class="md-tabs__link"> Quick Start </a> </li> <li class="md-tabs__item"> <a href="../update.html" class="md-tabs__link"> Recently Update </a> </li> <li class="md-tabs__item"> <a href="../paddlex/overview.html" class="md-tabs__link"> All-in-One Development </a> </li> <li class="md-tabs__item"> <a href="../model/index.html" class="md-tabs__link"> Model </a> </li> <li class="md-tabs__item"> <a href="../ppocr/overview.html" class="md-tabs__link"> PP-OCR </a> </li> <li class="md-tabs__item"> <a href="../ppstructure/overview.html" class="md-tabs__link"> PP-Structure </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="overview.html" class="md-tabs__link"> Academic Algorithms </a> </li> <li class="md-tabs__item"> <a href="../applications/overview.html" class="md-tabs__link"> Applications </a> </li> <li class="md-tabs__item"> <a href="../data_anno_synth/overview.html" class="md-tabs__link"> Data Annotation and Synthesis </a> </li> <li class="md-tabs__item"> <a href="../datasets/datasets.html" class="md-tabs__link"> Datasets </a> </li> <li class="md-tabs__item"> <a href="../FAQ.html" class="md-tabs__link"> FAQ </a> </li> <li class="md-tabs__item"> <a href="../community/community_contribution.html" class="md-tabs__link"> Community </a> </li> </ul> </div> </nav> </header> <div class="md-container" data-md-component="container"> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../index.html" title="PaddleOCR Documentation" class="md-nav__button md-logo" aria-label="PaddleOCR Documentation" data-md-component="logo"> <img src="../../static/images/logo.jpg" alt="logo"> </a> PaddleOCR Documentation </label> <div class="md-nav__source"> <a href="https://github.com/PaddlePaddle/PaddleOCR" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> PaddlePaddle/PaddleOCR </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../index.html" class="md-nav__link"> <span class="md-ellipsis"> Home </span> </a> </li> <li class="md-nav__item"> <a href="../quick_start.html" class="md-nav__link"> <span class="md-ellipsis"> Quick Start </span> </a> </li> <li class="md-nav__item"> <a href="../update.html" class="md-nav__link"> <span class="md-ellipsis"> Recently Update </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> All-in-One Development </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> All-in-One Development </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../paddlex/overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../paddlex/quick_start.html" class="md-nav__link"> <span class="md-ellipsis"> Quick Start </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" > <div class="md-nav__link md-nav__container"> <a href="../model/index.html" class="md-nav__link "> <span class="md-ellipsis"> Model </span> </a> <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Model </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_2" > <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0"> <span class="md-ellipsis"> 多硬件安装飞桨 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_2"> <span class="md-nav__icon md-icon"></span> 多硬件安装飞桨 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../model/hardware/install_other_devices.html" class="md-nav__link"> <span class="md-ellipsis"> 多硬件安装飞桨 </span> </a> </li> <li class="md-nav__item"> <a href="../model/hardware/supported_models.html" class="md-nav__link"> <span class="md-ellipsis"> 支持硬件列表 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" > <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> <span class="md-ellipsis"> PP-OCR </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> PP-OCR </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppocr/overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/quick_start.html" class="md-nav__link"> <span class="md-ellipsis"> Quick Start </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/installation.html" class="md-nav__link"> <span class="md-ellipsis"> Quick Installation </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/visualization.html" class="md-nav__link"> <span class="md-ellipsis"> Visualization </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/environment.html" class="md-nav__link"> <span class="md-ellipsis"> Environment Preparation </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_list.html" class="md-nav__link"> <span class="md-ellipsis"> Model </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_7" > <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0"> <span class="md-ellipsis"> Model Training </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_7"> <span class="md-nav__icon md-icon"></span> Model Training </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppocr/model_train/training.html" class="md-nav__link"> <span class="md-ellipsis"> Basic concepts </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_train/detection.html" class="md-nav__link"> <span class="md-ellipsis"> Text Detection </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_train/recognition.html" class="md-nav__link"> <span class="md-ellipsis"> Text Recognition </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_train/angle_class.html" class="md-nav__link"> <span class="md-ellipsis"> Text Angle Classification </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_train/kie.html" class="md-nav__link"> <span class="md-ellipsis"> Key Information Extraction </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_train/finetune.html" class="md-nav__link"> <span class="md-ellipsis"> Fine-tune </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_8" > <label class="md-nav__link" for="__nav_6_8" id="__nav_6_8_label" tabindex="0"> <span class="md-ellipsis"> Model Compression </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_8"> <span class="md-nav__icon md-icon"></span> Model Compression </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppocr/model_compress/quantization.html" class="md-nav__link"> <span class="md-ellipsis"> Model Quantization </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_compress/prune.html" class="md-nav__link"> <span class="md-ellipsis"> Model Prune </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/model_compress/knowledge_distillation.html" class="md-nav__link"> <span class="md-ellipsis"> Knowledge Distillation </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_9" > <div class="md-nav__link md-nav__container"> <a href="../ppocr/infer_deploy/index.html" class="md-nav__link "> <span class="md-ellipsis"> Deploy </span> </a> <label class="md-nav__link " for="__nav_6_9" id="__nav_6_9_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_9"> <span class="md-nav__icon md-icon"></span> Deploy </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/python_infer.html" class="md-nav__link"> <span class="md-ellipsis"> Python Inference </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/cpp_infer.html" class="md-nav__link"> <span class="md-ellipsis"> CPP Inference </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/windows_vs2019_build.html" class="md-nav__link"> <span class="md-ellipsis"> Visual Studio 2019 Community CMake Compilation Guide </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/paddle_server.html" class="md-nav__link"> <span class="md-ellipsis"> Sever Deployment </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/android_demo.html" class="md-nav__link"> <span class="md-ellipsis"> Android部署 </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/Jetson_infer.html" class="md-nav__link"> <span class="md-ellipsis"> Jetson Deployment </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/lite.html" class="md-nav__link"> <span class="md-ellipsis"> Device-side Deployment </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/paddle_js.html" class="md-nav__link"> <span class="md-ellipsis"> Paddle.js Web Deployment </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/paddle2onnx.html" class="md-nav__link"> <span class="md-ellipsis"> Paddle2ONNX </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/paddle_cloud.html" class="md-nav__link"> <span class="md-ellipsis"> Paddle Cloud </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/infer_deploy/benchmark.html" class="md-nav__link"> <span class="md-ellipsis"> Benchmark </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_10" > <label class="md-nav__link" for="__nav_6_10" id="__nav_6_10_label" tabindex="0"> <span class="md-ellipsis"> Blog </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_10_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_10"> <span class="md-nav__icon md-icon"></span> Blog </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppocr/blog/PP-OCRv3_introduction.html" class="md-nav__link"> <span class="md-ellipsis"> PP-OCRv3技术报告 </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/PP-OCRv4_introduction.html" class="md-nav__link"> <span class="md-ellipsis"> PP-OCRv4技术报告 </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/whl.html" class="md-nav__link"> <span class="md-ellipsis"> Paddleocr Package Instructions </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/multi_languages.html" class="md-nav__link"> <span class="md-ellipsis"> Multi-language model </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/ocr_book.html" class="md-nav__link"> <span class="md-ellipsis"> Dive into OCR </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/enhanced_ctc_loss.html" class="md-nav__link"> <span class="md-ellipsis"> Enhanced CTC Loss </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/slice.html" class="md-nav__link"> <span class="md-ellipsis"> Slice </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/inference_args.html" class="md-nav__link"> <span class="md-ellipsis"> PaddleOCR Model Inference Parameter Explanation </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/distributed_training.html" class="md-nav__link"> <span class="md-ellipsis"> Distributed training </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/clone.html" class="md-nav__link"> <span class="md-ellipsis"> Project Clone </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/config.html" class="md-nav__link"> <span class="md-ellipsis"> Configuration </span> </a> </li> <li class="md-nav__item"> <a href="../ppocr/blog/customize.html" class="md-nav__link"> <span class="md-ellipsis"> How To Make Your own lightweight OCR model? </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" > <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> <span class="md-ellipsis"> PP-Structure </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> PP-Structure </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppstructure/overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/quick_start.html" class="md-nav__link"> <span class="md-ellipsis"> Quick Start </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/models_list.html" class="md-nav__link"> <span class="md-ellipsis"> Model </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7_4" > <label class="md-nav__link" for="__nav_7_4" id="__nav_7_4_label" tabindex="0"> <span class="md-ellipsis"> Model Training </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_4"> <span class="md-nav__icon md-icon"></span> Model Training </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppstructure/model_train/training.html" class="md-nav__link"> <span class="md-ellipsis"> Basic concepts </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/model_train/train_layout.html" class="md-nav__link"> <span class="md-ellipsis"> Layout Analysis </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/model_train/train_table.html" class="md-nav__link"> <span class="md-ellipsis"> Table Recognition </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/model_train/recovery_to_doc.html" class="md-nav__link"> <span class="md-ellipsis"> Recovery To Doc </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/model_train/train_kie.html" class="md-nav__link"> <span class="md-ellipsis"> Key Information Extraction </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7_5" > <div class="md-nav__link md-nav__container"> <a href="../ppstructure/infer_deploy/index.html" class="md-nav__link "> <span class="md-ellipsis"> Deploy </span> </a> <label class="md-nav__link " for="__nav_7_5" id="__nav_7_5_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_5"> <span class="md-nav__icon md-icon"></span> Deploy </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppstructure/infer_deploy/python_infer.html" class="md-nav__link"> <span class="md-ellipsis"> Python Inference </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/infer_deploy/cpp_infer.html" class="md-nav__link"> <span class="md-ellipsis"> CPP Inference </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/infer_deploy/paddle_server.html" class="md-nav__link"> <span class="md-ellipsis"> Sever Deployment </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7_6" > <label class="md-nav__link" for="__nav_7_6" id="__nav_7_6_label" tabindex="0"> <span class="md-ellipsis"> Blog </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_6"> <span class="md-nav__icon md-icon"></span> Blog </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ppstructure/blog/return_word_pos.html" class="md-nav__link"> <span class="md-ellipsis"> Return Recognition Location </span> </a> </li> <li class="md-nav__item"> <a href="../ppstructure/blog/how_to_do_kie.html" class="md-nav__link"> <span class="md-ellipsis"> Key Information Extraction Pipeline </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked> <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex=""> <span class="md-ellipsis"> Academic Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_8"> <span class="md-nav__icon md-icon"></span> Academic Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_2" > <label class="md-nav__link" for="__nav_8_2" id="__nav_8_2_label" tabindex="0"> <span class="md-ellipsis"> Text Detection Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_2"> <span class="md-nav__icon md-icon"></span> Text Detection Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="text_detection/algorithm_det_db.html" class="md-nav__link"> <span class="md-ellipsis"> DB and DB++ </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_east.html" class="md-nav__link"> <span class="md-ellipsis"> EAST </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_sast.html" class="md-nav__link"> <span class="md-ellipsis"> SAST </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_psenet.html" class="md-nav__link"> <span class="md-ellipsis"> PSENet </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_fcenet.html" class="md-nav__link"> <span class="md-ellipsis"> FCENet </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_drrg.html" class="md-nav__link"> <span class="md-ellipsis"> DRRG </span> </a> </li> <li class="md-nav__item"> <a href="text_detection/algorithm_det_ct.html" class="md-nav__link"> <span class="md-ellipsis"> CT </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_3" > <label class="md-nav__link" for="__nav_8_3" id="__nav_8_3_label" tabindex="0"> <span class="md-ellipsis"> Text Recognition Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_3"> <span class="md-nav__icon md-icon"></span> Text Recognition Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_crnn.html" class="md-nav__link"> <span class="md-ellipsis"> CRNN </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_rosetta.html" class="md-nav__link"> <span class="md-ellipsis"> Rosetta </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_starnet.html" class="md-nav__link"> <span class="md-ellipsis"> STAR-Net </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_rare.html" class="md-nav__link"> <span class="md-ellipsis"> RARE </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_srn.html" class="md-nav__link"> <span class="md-ellipsis"> SRN </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_nrtr.html" class="md-nav__link"> <span class="md-ellipsis"> NRTR </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_sar.html" class="md-nav__link"> <span class="md-ellipsis"> SAR </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_seed.html" class="md-nav__link"> <span class="md-ellipsis"> SEED </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_svtr.html" class="md-nav__link"> <span class="md-ellipsis"> SVTR </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_svtrv2.html" class="md-nav__link"> <span class="md-ellipsis"> SVTRv2 </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_vitstr.html" class="md-nav__link"> <span class="md-ellipsis"> ViTSTR </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_abinet.html" class="md-nav__link"> <span class="md-ellipsis"> ABINet </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_visionlan.html" class="md-nav__link"> <span class="md-ellipsis"> VisionLAN </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_spin.html" class="md-nav__link"> <span class="md-ellipsis"> SPIN </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_robustscanner.html" class="md-nav__link"> <span class="md-ellipsis"> RobustScanner </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_rfl.html" class="md-nav__link"> <span class="md-ellipsis"> RFL </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_parseq.html" class="md-nav__link"> <span class="md-ellipsis"> ParseQ </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_cppd.html" class="md-nav__link"> <span class="md-ellipsis"> CPPD </span> </a> </li> <li class="md-nav__item"> <a href="text_recognition/algorithm_rec_satrn.html" class="md-nav__link"> <span class="md-ellipsis"> SATRN </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_4" > <label class="md-nav__link" for="__nav_8_4" id="__nav_8_4_label" tabindex="0"> <span class="md-ellipsis"> Text Super-Resolution Algorithm </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_4"> <span class="md-nav__icon md-icon"></span> Text Super-Resolution Algorithm </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="super_resolution/algorithm_sr_gestalt.html" class="md-nav__link"> <span class="md-ellipsis"> Text Gestalt </span> </a> </li> <li class="md-nav__item"> <a href="super_resolution/algorithm_sr_telescope.html" class="md-nav__link"> <span class="md-ellipsis"> Text Telescope </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_5" > <label class="md-nav__link" for="__nav_8_5" id="__nav_8_5_label" tabindex="0"> <span class="md-ellipsis"> Formulat Recognition </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_5"> <span class="md-nav__icon md-icon"></span> Formulat Recognition </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="formula_recognition/algorithm_rec_can.html" class="md-nav__link"> <span class="md-ellipsis"> CAN </span> </a> </li> <li class="md-nav__item"> <a href="formula_recognition/algorithm_rec_latex_ocr.html" class="md-nav__link"> <span class="md-ellipsis"> LaTeX-OCR </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_6" > <label class="md-nav__link" for="__nav_8_6" id="__nav_8_6_label" tabindex="0"> <span class="md-ellipsis"> End-to-End OCR Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_6"> <span class="md-nav__icon md-icon"></span> End-to-End OCR Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="end_to_end/algorithm_e2e_pgnet.html" class="md-nav__link"> <span class="md-ellipsis"> PGNet </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_7" > <label class="md-nav__link" for="__nav_8_7" id="__nav_8_7_label" tabindex="0"> <span class="md-ellipsis"> Table Recognition Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_7"> <span class="md-nav__icon md-icon"></span> Table Recognition Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="table_recognition/algorithm_table_master.html" class="md-nav__link"> <span class="md-ellipsis"> TableMaster </span> </a> </li> <li class="md-nav__item"> <a href="table_recognition/algorithm_table_slanet.html" class="md-nav__link"> <span class="md-ellipsis"> TableSLANet </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8_8" > <label class="md-nav__link" for="__nav_8_8" id="__nav_8_8_label" tabindex="0"> <span class="md-ellipsis"> Key Information Extraction Algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8"> <span class="md-nav__icon md-icon"></span> Key Information Extraction Algorithms </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="kie/algorithm_kie_vi_layoutxlm.html" class="md-nav__link"> <span class="md-ellipsis"> VI-LayoutXLM </span> </a> </li> <li class="md-nav__item"> <a href="kie/algorithm_kie_layoutxlm.html" class="md-nav__link"> <span class="md-ellipsis"> LayoutLM </span> </a> </li> <li class="md-nav__item"> <a href="kie/algorithm_kie_sdmgr.html" class="md-nav__link"> <span class="md-ellipsis"> SDMGR </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Add new algorithms </span> <span class="md-nav__icon md-icon"></span> </label> <a href="add_new_algorithm.html" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Add new algorithms </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#data-loading-and-processing" class="md-nav__link"> <span class="md-ellipsis"> Data loading and processing </span> </a> </li> <li class="md-nav__item"> <a href="#network" class="md-nav__link"> <span class="md-ellipsis"> Network </span> </a> </li> <li class="md-nav__item"> <a href="#post-processing" class="md-nav__link"> <span class="md-ellipsis"> Post-processing </span> </a> </li> <li class="md-nav__item"> <a href="#loss" class="md-nav__link"> <span class="md-ellipsis"> Loss </span> </a> </li> <li class="md-nav__item"> <a href="#metric" class="md-nav__link"> <span class="md-ellipsis"> Metric </span> </a> </li> <li class="md-nav__item"> <a href="#optimizer" class="md-nav__link"> <span class="md-ellipsis"> Optimizer </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9" > <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> <span class="md-ellipsis"> Applications </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9"> <span class="md-nav__icon md-icon"></span> Applications </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../applications/overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9_2" > <label class="md-nav__link" for="__nav_9_2" id="__nav_9_2_label" tabindex="0"> <span class="md-ellipsis"> 通用 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9_2"> <span class="md-nav__icon md-icon"></span> 通用 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../applications/%E9%AB%98%E7%B2%BE%E5%BA%A6%E4%B8%AD%E6%96%87%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9E%8B.html" class="md-nav__link"> <span class="md-ellipsis"> 高精度中文场景文本识别模型SVTR </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E6%89%8B%E5%86%99%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 手写体识别 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9_3" > <label class="md-nav__link" for="__nav_9_3" id="__nav_9_3_label" tabindex="0"> <span class="md-ellipsis"> 制造 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9_3"> <span class="md-nav__icon md-icon"></span> 制造 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../applications/%E5%85%89%E5%8A%9F%E7%8E%87%E8%AE%A1%E6%95%B0%E7%A0%81%E7%AE%A1%E5%AD%97%E7%AC%A6%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 数码管识别 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E6%B6%B2%E6%99%B6%E5%B1%8F%E8%AF%BB%E6%95%B0%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 液晶屏读数识别 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E5%8C%85%E8%A3%85%E7%94%9F%E4%BA%A7%E6%97%A5%E6%9C%9F%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 包装生产日期 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/PCB%E5%AD%97%E7%AC%A6%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> PCB文字识别 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9_4" > <label class="md-nav__link" for="__nav_9_4" id="__nav_9_4_label" tabindex="0"> <span class="md-ellipsis"> 金融 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9_4"> <span class="md-nav__icon md-icon"></span> 金融 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../applications/%E5%A4%9A%E6%A8%A1%E6%80%81%E8%A1%A8%E5%8D%95%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 表单VQA </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E5%8F%91%E7%A5%A8%E5%85%B3%E9%94%AE%E4%BF%A1%E6%81%AF%E6%8A%BD%E5%8F%96.html" class="md-nav__link"> <span class="md-ellipsis"> 增值税发票 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E5%8D%B0%E7%AB%A0%E5%BC%AF%E6%9B%B2%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 印章检测与识别 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E5%BF%AB%E9%80%9F%E6%9E%84%E5%BB%BA%E5%8D%A1%E8%AF%81%E7%B1%BBOCR.html" class="md-nav__link"> <span class="md-ellipsis"> 通用卡证识别 </span> </a> </li> <li class="md-nav__item"> <a href="../applications/%E6%89%AB%E6%8F%8F%E5%90%88%E5%90%8C%E5%85%B3%E9%94%AE%E4%BF%A1%E6%81%AF%E6%8F%90%E5%8F%96.html" class="md-nav__link"> <span class="md-ellipsis"> 合同比对 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9_5" > <label class="md-nav__link" for="__nav_9_5" id="__nav_9_5_label" tabindex="0"> <span class="md-ellipsis"> 交通 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9_5"> <span class="md-nav__icon md-icon"></span> 交通 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../applications/%E8%BD%BB%E9%87%8F%E7%BA%A7%E8%BD%A6%E7%89%8C%E8%AF%86%E5%88%AB.html" class="md-nav__link"> <span class="md-ellipsis"> 车牌识别 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_10" > <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0"> <span class="md-ellipsis"> Data Annotation and Synthesis </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_10"> <span class="md-nav__icon md-icon"></span> Data Annotation and Synthesis </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../data_anno_synth/overview.html" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../data_anno_synth/data_annotation.html" class="md-nav__link"> <span class="md-ellipsis"> Other data annotation tools </span> </a> </li> <li class="md-nav__item"> <a href="../data_anno_synth/data_synthesis.html" class="md-nav__link"> <span class="md-ellipsis"> Others data synthesis tools </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_11" > <label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0"> <span class="md-ellipsis"> Datasets </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_11"> <span class="md-nav__icon md-icon"></span> Datasets </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../datasets/datasets.html" class="md-nav__link"> <span class="md-ellipsis"> General Chinese and English OCR dataset </span> </a> </li> <li class="md-nav__item"> <a href="../datasets/handwritten_datasets.html" class="md-nav__link"> <span class="md-ellipsis"> Handwritten Chinese OCR Dataset </span> </a> </li> <li class="md-nav__item"> <a href="../datasets/vertical_and_multilingual_datasets.html" class="md-nav__link"> <span class="md-ellipsis"> Vertical multi-language OCR dataset </span> </a> </li> <li class="md-nav__item"> <a href="../datasets/layout_datasets.html" class="md-nav__link"> <span class="md-ellipsis"> Layout Analysis Dataset </span> </a> </li> <li class="md-nav__item"> <a href="../datasets/table_datasets.html" class="md-nav__link"> <span class="md-ellipsis"> Table recognition dataset </span> </a> </li> <li class="md-nav__item"> <a href="../datasets/kie_datasets.html" class="md-nav__link"> <span class="md-ellipsis"> Key Information Extraction Dataset </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../FAQ.html" class="md-nav__link"> <span class="md-ellipsis"> FAQ </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_13" > <label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0"> <span class="md-ellipsis"> Community </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_13"> <span class="md-nav__icon md-icon"></span> Community </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../community/community_contribution.html" class="md-nav__link"> <span class="md-ellipsis"> Community Contribution </span> </a> </li> <li class="md-nav__item"> <a href="../community/code_and_doc.html" class="md-nav__link"> <span class="md-ellipsis"> Appendix </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#data-loading-and-processing" class="md-nav__link"> <span class="md-ellipsis"> Data loading and processing </span> </a> </li> <li class="md-nav__item"> <a href="#network" class="md-nav__link"> <span class="md-ellipsis"> Network </span> </a> </li> <li class="md-nav__item"> <a href="#post-processing" class="md-nav__link"> <span class="md-ellipsis"> Post-processing </span> </a> </li> <li class="md-nav__item"> <a href="#loss" class="md-nav__link"> <span class="md-ellipsis"> Loss </span> </a> </li> <li class="md-nav__item"> <a href="#metric" class="md-nav__link"> <span class="md-ellipsis"> Metric </span> </a> </li> <li class="md-nav__item"> <a href="#optimizer" class="md-nav__link"> <span class="md-ellipsis"> Optimizer </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <a href="https://github.com/PaddlePaddle/PaddleOCR/edit/main/docs/algorithm/add_new_algorithm.en.md" title="Edit this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75z"/></svg> </a> <a href="https://github.com/PaddlePaddle/PaddleOCR/raw/main/docs/algorithm/add_new_algorithm.en.md" title="View source of this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0 8a5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5 5 5 0 0 1-5 5m0-12.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5"/></svg> </a> <h1 id="add-new-algorithm">Add New Algorithm<a class="headerlink" href="#add-new-algorithm" title="Permanent link">¶</a></h1> <p>PaddleOCR decomposes an algorithm into the following parts, and modularizes each part to make it more convenient to develop new algorithms.</p> <ul> <li>Data loading and processing</li> <li>Network</li> <li>Post-processing</li> <li>Loss</li> <li>Metric</li> <li>Optimizer</li> </ul> <p>The following will introduce each part separately, and introduce how to add the modules required for the new algorithm.</p> <h2 id="data-loading-and-processing">Data loading and processing<a class="headerlink" href="#data-loading-and-processing" title="Permanent link">¶</a></h2> <p>Data loading and processing are composed of different modules, which complete the image reading, data augment and label production. This part is under <a href="../../ppocr/data">ppocr/data</a>. The explanation of each file and folder are as follows:</p> <div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span> <span class="normal"><a href="#__codelineno-0-2">2</a></span> <span class="normal"><a href="#__codelineno-0-3">3</a></span> <span class="normal"><a href="#__codelineno-0-4">4</a></span> <span class="normal"><a href="#__codelineno-0-5">5</a></span> <span class="normal"><a href="#__codelineno-0-6">6</a></span> <span class="normal"><a href="#__codelineno-0-7">7</a></span> <span class="normal"><a href="#__codelineno-0-8">8</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a>ppocr/data/ </span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a>├──<span class="w"> </span>imaug<span class="w"> </span><span class="c1"># Scripts for image reading, data augment and label production</span> </span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a>│<span class="w"> </span>├──<span class="w"> </span>label_ops.py<span class="w"> </span><span class="c1"># Modules that transform the label</span> </span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a>│<span class="w"> </span>├──<span class="w"> </span>operators.py<span class="w"> </span><span class="c1"># Modules that transform the image</span> </span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a>│<span class="w"> </span>├──..... </span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a>├──<span class="w"> </span>__init__.py </span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a>├──<span class="w"> </span>lmdb_dataset.py<span class="w"> </span><span class="c1"># The dataset that reads the lmdb</span> </span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a>└──<span class="w"> </span>simple_dataset.py<span class="w"> </span><span class="c1"># Read the dataset saved in the form of `image_path\tgt`</span> </span></code></pre></div></td></tr></table></div> <p>PaddleOCR has a large number of built-in image operation related modules. For modules that are not built-in, you can add them through the following steps:</p> <ol> <li>Create a new file under the <a href="../../ppocr/data/imaug">ppocr/data/imaug</a> folder, such as my_module.py.</li> <li> <p>Add code in the my_module.py file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1"> 1</a></span> <span class="normal"><a href="#__codelineno-1-2"> 2</a></span> <span class="normal"><a href="#__codelineno-1-3"> 3</a></span> <span class="normal"><a href="#__codelineno-1-4"> 4</a></span> <span class="normal"><a href="#__codelineno-1-5"> 5</a></span> <span class="normal"><a href="#__codelineno-1-6"> 6</a></span> <span class="normal"><a href="#__codelineno-1-7"> 7</a></span> <span class="normal"><a href="#__codelineno-1-8"> 8</a></span> <span class="normal"><a href="#__codelineno-1-9"> 9</a></span> <span class="normal"><a href="#__codelineno-1-10">10</a></span> <span class="normal"><a href="#__codelineno-1-11">11</a></span> <span class="normal"><a href="#__codelineno-1-12">12</a></span> <span class="normal"><a href="#__codelineno-1-13">13</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="k">class</span> <span class="nc">MyModule</span><span class="p">:</span> </span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3"></a> <span class="c1"># your init code</span> </span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4"></a> <span class="k">pass</span> </span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5"></a> </span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> </span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7"></a> <span class="n">img</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s1">'image'</span><span class="p">]</span> </span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8"></a> <span class="n">label</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span> </span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9"></a> <span class="c1"># your process code</span> </span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10"></a> </span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11"></a> <span class="n">data</span><span class="p">[</span><span class="s1">'image'</span><span class="p">]</span> <span class="o">=</span> <span class="n">img</span> </span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12"></a> <span class="n">data</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span> </span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13"></a> <span class="k">return</span> <span class="n">data</span> </span></code></pre></div></td></tr></table></div> </li> <li> <p>Import the added module in the <a href="../../ppocr/data/imaug/__init__.py">ppocr/data/imaug/_<em>init_</em>.py</a> file.</p> </li> </ol> <p>All different modules of data processing are executed by sequence, combined and executed in the form of a list in the config file. Such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-2-1"> 1</a></span> <span class="normal"><a href="#__codelineno-2-2"> 2</a></span> <span class="normal"><a href="#__codelineno-2-3"> 3</a></span> <span class="normal"><a href="#__codelineno-2-4"> 4</a></span> <span class="normal"><a href="#__codelineno-2-5"> 5</a></span> <span class="normal"><a href="#__codelineno-2-6"> 6</a></span> <span class="normal"><a href="#__codelineno-2-7"> 7</a></span> <span class="normal"><a href="#__codelineno-2-8"> 8</a></span> <span class="normal"><a href="#__codelineno-2-9"> 9</a></span> <span class="normal"><a href="#__codelineno-2-10">10</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="c1"># angle class data process</span> </span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2"></a><span class="nt">transforms</span><span class="p">:</span> </span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">DecodeImage</span><span class="p">:</span><span class="w"> </span><span class="c1"># load image</span> </span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4"></a><span class="w"> </span><span class="nt">img_mode</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">BGR</span> </span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5"></a><span class="w"> </span><span class="nt">channel_first</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">False</span> </span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">MyModule</span><span class="p">:</span> </span><span id="__span-2-7"><a id="__codelineno-2-7" name="__codelineno-2-7"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-2-8"><a id="__codelineno-2-8" name="__codelineno-2-8"></a><span class="w"> </span><span class="nt">args2</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args2</span> </span><span id="__span-2-9"><a id="__codelineno-2-9" name="__codelineno-2-9"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">KeepKeys</span><span class="p">:</span> </span><span id="__span-2-10"><a id="__codelineno-2-10" name="__codelineno-2-10"></a><span class="w"> </span><span class="nt">keep_keys</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="s">'image'</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">'label'</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"> </span><span class="c1"># dataloader will return list in this order</span> </span></code></pre></div></td></tr></table></div> <h2 id="network">Network<a class="headerlink" href="#network" title="Permanent link">¶</a></h2> <p>The network part completes the construction of the network, and PaddleOCR divides the network into four parts, which are under <a href="../../ppocr/modeling">ppocr/modeling</a>. The data entering the network will pass through these four parts in sequence(transforms->backbones-> necks->heads).</p> <div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-3-1">1</a></span> <span class="normal"><a href="#__codelineno-3-2">2</a></span> <span class="normal"><a href="#__codelineno-3-3">3</a></span> <span class="normal"><a href="#__codelineno-3-4">4</a></span> <span class="normal"><a href="#__codelineno-3-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1"></a>├──<span class="w"> </span>architectures<span class="w"> </span><span class="c1"># Code for building network</span> </span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2"></a>├──<span class="w"> </span>transforms<span class="w"> </span><span class="c1"># Image Transformation Module</span> </span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3"></a>├──<span class="w"> </span>backbones<span class="w"> </span><span class="c1"># Feature extraction module</span> </span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4"></a>├──<span class="w"> </span>necks<span class="w"> </span><span class="c1"># Feature enhancement module</span> </span><span id="__span-3-5"><a id="__codelineno-3-5" name="__codelineno-3-5"></a>└──<span class="w"> </span>heads<span class="w"> </span><span class="c1"># Output module</span> </span></code></pre></div></td></tr></table></div> <p>PaddleOCR has built-in commonly used modules related to algorithms such as DB, EAST, SAST, CRNN and Attention. For modules that do not have built-in, you can add them through the following steps, the four parts are added in the same steps, take backbones as an example:</p> <ol> <li>Create a new file under the <a href="../../ppocr/modeling/backbones">ppocr/modeling/backbones</a> folder, such as my_backbone.py.</li> <li> <p>Add code in the my_backbone.py file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-4-1"> 1</a></span> <span class="normal"><a href="#__codelineno-4-2"> 2</a></span> <span class="normal"><a href="#__codelineno-4-3"> 3</a></span> <span class="normal"><a href="#__codelineno-4-4"> 4</a></span> <span class="normal"><a href="#__codelineno-4-5"> 5</a></span> <span class="normal"><a href="#__codelineno-4-6"> 6</a></span> <span class="normal"><a href="#__codelineno-4-7"> 7</a></span> <span class="normal"><a href="#__codelineno-4-8"> 8</a></span> <span class="normal"><a href="#__codelineno-4-9"> 9</a></span> <span class="normal"><a href="#__codelineno-4-10">10</a></span> <span class="normal"><a href="#__codelineno-4-11">11</a></span> <span class="normal"><a href="#__codelineno-4-12">12</a></span> <span class="normal"><a href="#__codelineno-4-13">13</a></span> <span class="normal"><a href="#__codelineno-4-14">14</a></span> <span class="normal"><a href="#__codelineno-4-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="kn">import</span> <span class="nn">paddle</span> </span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2"></a><span class="kn">import</span> <span class="nn">paddle.nn</span> <span class="k">as</span> <span class="nn">nn</span> </span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3"></a><span class="kn">import</span> <span class="nn">paddle.nn.functional</span> <span class="k">as</span> <span class="nn">F</span> </span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4"></a> </span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5"></a> </span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6"></a><span class="k">class</span> <span class="nc">MyBackbone</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Layer</span><span class="p">):</span> </span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8"></a> <span class="nb">super</span><span class="p">(</span><span class="n">MyBackbone</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> </span><span id="__span-4-9"><a id="__codelineno-4-9" name="__codelineno-4-9"></a> <span class="c1"># your init code</span> </span><span id="__span-4-10"><a id="__codelineno-4-10" name="__codelineno-4-10"></a> <span class="bp">self</span><span class="o">.</span><span class="n">conv</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">xxxx</span> </span><span id="__span-4-11"><a id="__codelineno-4-11" name="__codelineno-4-11"></a> </span><span id="__span-4-12"><a id="__codelineno-4-12" name="__codelineno-4-12"></a> <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputs</span><span class="p">):</span> </span><span id="__span-4-13"><a id="__codelineno-4-13" name="__codelineno-4-13"></a> <span class="c1"># your network forward</span> </span><span id="__span-4-14"><a id="__codelineno-4-14" name="__codelineno-4-14"></a> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv</span><span class="p">(</span><span class="n">inputs</span><span class="p">)</span> </span><span id="__span-4-15"><a id="__codelineno-4-15" name="__codelineno-4-15"></a> <span class="k">return</span> <span class="n">y</span> </span></code></pre></div></td></tr></table></div> </li> <li> <p>Import the added module in the <a href="../../ppocr/modeling/backbones/__init__.py">ppocr/modeling/backbones/_<em>init_</em>.py</a> file.</p> </li> </ol> <p>After adding the four-part modules of the network, you only need to configure them in the configuration file to use, such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-5-1"> 1</a></span> <span class="normal"><a href="#__codelineno-5-2"> 2</a></span> <span class="normal"><a href="#__codelineno-5-3"> 3</a></span> <span class="normal"><a href="#__codelineno-5-4"> 4</a></span> <span class="normal"><a href="#__codelineno-5-5"> 5</a></span> <span class="normal"><a href="#__codelineno-5-6"> 6</a></span> <span class="normal"><a href="#__codelineno-5-7"> 7</a></span> <span class="normal"><a href="#__codelineno-5-8"> 8</a></span> <span class="normal"><a href="#__codelineno-5-9"> 9</a></span> <span class="normal"><a href="#__codelineno-5-10">10</a></span> <span class="normal"><a href="#__codelineno-5-11">11</a></span> <span class="normal"><a href="#__codelineno-5-12">12</a></span> <span class="normal"><a href="#__codelineno-5-13">13</a></span> <span class="normal"><a href="#__codelineno-5-14">14</a></span> <span class="normal"><a href="#__codelineno-5-15">15</a></span> <span class="normal"><a href="#__codelineno-5-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="nt">Architecture</span><span class="p">:</span> </span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2"></a><span class="nt">model_type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rec</span> </span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="nt">algorithm</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CRNN</span> </span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4"></a><span class="nt">Transform</span><span class="p">:</span> </span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyTransform</span> </span><span id="__span-5-6"><a id="__codelineno-5-6" name="__codelineno-5-6"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-5-7"><a id="__codelineno-5-7" name="__codelineno-5-7"></a><span class="w"> </span><span class="nt">args2</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args2</span> </span><span id="__span-5-8"><a id="__codelineno-5-8" name="__codelineno-5-8"></a><span class="nt">Backbone</span><span class="p">:</span> </span><span id="__span-5-9"><a id="__codelineno-5-9" name="__codelineno-5-9"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyBackbone</span> </span><span id="__span-5-10"><a id="__codelineno-5-10" name="__codelineno-5-10"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-5-11"><a id="__codelineno-5-11" name="__codelineno-5-11"></a><span class="nt">Neck</span><span class="p">:</span> </span><span id="__span-5-12"><a id="__codelineno-5-12" name="__codelineno-5-12"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyNeck</span> </span><span id="__span-5-13"><a id="__codelineno-5-13" name="__codelineno-5-13"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-5-14"><a id="__codelineno-5-14" name="__codelineno-5-14"></a><span class="nt">Head</span><span class="p">:</span> </span><span id="__span-5-15"><a id="__codelineno-5-15" name="__codelineno-5-15"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyHead</span> </span><span id="__span-5-16"><a id="__codelineno-5-16" name="__codelineno-5-16"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span></code></pre></div></td></tr></table></div> <h2 id="post-processing">Post-processing<a class="headerlink" href="#post-processing" title="Permanent link">¶</a></h2> <p>Post-processing realizes decoding network output to obtain text box or recognized text. This part is under <a href="../../ppocr/postprocess">ppocr/postprocess</a>. PaddleOCR has built-in post-processing modules related to algorithms such as DB, EAST, SAST, CRNN and Attention. For components that are not built-in, they can be added through the following steps:</p> <ol> <li>Create a new file under the <a href="../../ppocr/postprocess">ppocr/postprocess</a> folder, such as my_postprocess.py.</li> <li> <p>Add code in the my_postprocess.py file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-6-1"> 1</a></span> <span class="normal"><a href="#__codelineno-6-2"> 2</a></span> <span class="normal"><a href="#__codelineno-6-3"> 3</a></span> <span class="normal"><a href="#__codelineno-6-4"> 4</a></span> <span class="normal"><a href="#__codelineno-6-5"> 5</a></span> <span class="normal"><a href="#__codelineno-6-6"> 6</a></span> <span class="normal"><a href="#__codelineno-6-7"> 7</a></span> <span class="normal"><a href="#__codelineno-6-8"> 8</a></span> <span class="normal"><a href="#__codelineno-6-9"> 9</a></span> <span class="normal"><a href="#__codelineno-6-10">10</a></span> <span class="normal"><a href="#__codelineno-6-11">11</a></span> <span class="normal"><a href="#__codelineno-6-12">12</a></span> <span class="normal"><a href="#__codelineno-6-13">13</a></span> <span class="normal"><a href="#__codelineno-6-14">14</a></span> <span class="normal"><a href="#__codelineno-6-15">15</a></span> <span class="normal"><a href="#__codelineno-6-16">16</a></span> <span class="normal"><a href="#__codelineno-6-17">17</a></span> <span class="normal"><a href="#__codelineno-6-18">18</a></span> <span class="normal"><a href="#__codelineno-6-19">19</a></span> <span class="normal"><a href="#__codelineno-6-20">20</a></span> <span class="normal"><a href="#__codelineno-6-21">21</a></span> <span class="normal"><a href="#__codelineno-6-22">22</a></span> <span class="normal"><a href="#__codelineno-6-23">23</a></span> <span class="normal"><a href="#__codelineno-6-24">24</a></span> <span class="normal"><a href="#__codelineno-6-25">25</a></span> <span class="normal"><a href="#__codelineno-6-26">26</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="kn">import</span> <span class="nn">paddle</span> </span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2"></a> </span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3"></a> </span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4"></a><span class="k">class</span> <span class="nc">MyPostProcess</span><span class="p">:</span> </span><span id="__span-6-5"><a id="__codelineno-6-5" name="__codelineno-6-5"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-6-6"><a id="__codelineno-6-6" name="__codelineno-6-6"></a> <span class="c1"># your init code</span> </span><span id="__span-6-7"><a id="__codelineno-6-7" name="__codelineno-6-7"></a> <span class="k">pass</span> </span><span id="__span-6-8"><a id="__codelineno-6-8" name="__codelineno-6-8"></a> </span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preds</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">paddle</span><span class="o">.</span><span class="n">Tensor</span><span class="p">):</span> </span><span id="__span-6-11"><a id="__codelineno-6-11" name="__codelineno-6-11"></a> <span class="n">preds</span> <span class="o">=</span> <span class="n">preds</span><span class="o">.</span><span class="n">numpy</span><span class="p">()</span> </span><span id="__span-6-12"><a id="__codelineno-6-12" name="__codelineno-6-12"></a> <span class="c1"># you preds decode code</span> </span><span id="__span-6-13"><a id="__codelineno-6-13" name="__codelineno-6-13"></a> <span class="n">preds</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decode_preds</span><span class="p">(</span><span class="n">preds</span><span class="p">)</span> </span><span id="__span-6-14"><a id="__codelineno-6-14" name="__codelineno-6-14"></a> <span class="k">if</span> <span class="n">label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="__span-6-15"><a id="__codelineno-6-15" name="__codelineno-6-15"></a> <span class="k">return</span> <span class="n">preds</span> </span><span id="__span-6-16"><a id="__codelineno-6-16" name="__codelineno-6-16"></a> <span class="c1"># you label decode code</span> </span><span id="__span-6-17"><a id="__codelineno-6-17" name="__codelineno-6-17"></a> <span class="n">label</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decode_label</span><span class="p">(</span><span class="n">label</span><span class="p">)</span> </span><span id="__span-6-18"><a id="__codelineno-6-18" name="__codelineno-6-18"></a> <span class="k">return</span> <span class="n">preds</span><span class="p">,</span> <span class="n">label</span> </span><span id="__span-6-19"><a id="__codelineno-6-19" name="__codelineno-6-19"></a> </span><span id="__span-6-20"><a id="__codelineno-6-20" name="__codelineno-6-20"></a> <span class="k">def</span> <span class="nf">decode_preds</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preds</span><span class="p">):</span> </span><span id="__span-6-21"><a id="__codelineno-6-21" name="__codelineno-6-21"></a> <span class="c1"># you preds decode code</span> </span><span id="__span-6-22"><a id="__codelineno-6-22" name="__codelineno-6-22"></a> <span class="k">pass</span> </span><span id="__span-6-23"><a id="__codelineno-6-23" name="__codelineno-6-23"></a> </span><span id="__span-6-24"><a id="__codelineno-6-24" name="__codelineno-6-24"></a> <span class="k">def</span> <span class="nf">decode_label</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preds</span><span class="p">):</span> </span><span id="__span-6-25"><a id="__codelineno-6-25" name="__codelineno-6-25"></a> <span class="c1"># you label decode code</span> </span><span id="__span-6-26"><a id="__codelineno-6-26" name="__codelineno-6-26"></a> <span class="k">pass</span> </span></code></pre></div></td></tr></table></div> </li> <li> <p>Import the added module in the <a href="../../ppocr/postprocess/__init__.py">ppocr/postprocess/_<em>init_</em>.py</a> file.</p> </li> </ol> <p>After the post-processing module is added, you only need to configure it in the configuration file to use, such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-7-1">1</a></span> <span class="normal"><a href="#__codelineno-7-2">2</a></span> <span class="normal"><a href="#__codelineno-7-3">3</a></span> <span class="normal"><a href="#__codelineno-7-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1"></a><span class="nt">PostProcess</span><span class="p">:</span> </span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2"></a><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyPostProcess</span> </span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3"></a><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4"></a><span class="nt">args2</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args2</span> </span></code></pre></div></td></tr></table></div> <h2 id="loss">Loss<a class="headerlink" href="#loss" title="Permanent link">¶</a></h2> <p>The loss function is used to calculate the distance between the network output and the label. This part is under <a href="../../ppocr/losses">ppocr/losses</a>. PaddleOCR has built-in loss function modules related to algorithms such as DB, EAST, SAST, CRNN and Attention. For modules that do not have built-in modules, you can add them through the following steps:</p> <ol> <li>Create a new file in the <a href="../../ppocr/losses">ppocr/losses</a> folder, such as my_loss.py.</li> <li> <p>Add code in the my_loss.py file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-8-1"> 1</a></span> <span class="normal"><a href="#__codelineno-8-2"> 2</a></span> <span class="normal"><a href="#__codelineno-8-3"> 3</a></span> <span class="normal"><a href="#__codelineno-8-4"> 4</a></span> <span class="normal"><a href="#__codelineno-8-5"> 5</a></span> <span class="normal"><a href="#__codelineno-8-6"> 6</a></span> <span class="normal"><a href="#__codelineno-8-7"> 7</a></span> <span class="normal"><a href="#__codelineno-8-8"> 8</a></span> <span class="normal"><a href="#__codelineno-8-9"> 9</a></span> <span class="normal"><a href="#__codelineno-8-10">10</a></span> <span class="normal"><a href="#__codelineno-8-11">11</a></span> <span class="normal"><a href="#__codelineno-8-12">12</a></span> <span class="normal"><a href="#__codelineno-8-13">13</a></span> <span class="normal"><a href="#__codelineno-8-14">14</a></span> <span class="normal"><a href="#__codelineno-8-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="kn">import</span> <span class="nn">paddle</span> </span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="kn">from</span> <span class="nn">paddle</span> <span class="kn">import</span> <span class="n">nn</span> </span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3"></a> </span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4"></a> </span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5"></a><span class="k">class</span> <span class="nc">MyLoss</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Layer</span><span class="p">):</span> </span><span id="__span-8-6"><a id="__codelineno-8-6" name="__codelineno-8-6"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-8-7"><a id="__codelineno-8-7" name="__codelineno-8-7"></a> <span class="nb">super</span><span class="p">(</span><span class="n">MyLoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> </span><span id="__span-8-8"><a id="__codelineno-8-8" name="__codelineno-8-8"></a> <span class="c1"># you init code</span> </span><span id="__span-8-9"><a id="__codelineno-8-9" name="__codelineno-8-9"></a> <span class="k">pass</span> </span><span id="__span-8-10"><a id="__codelineno-8-10" name="__codelineno-8-10"></a> </span><span id="__span-8-11"><a id="__codelineno-8-11" name="__codelineno-8-11"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicts</span><span class="p">,</span> <span class="n">batch</span><span class="p">):</span> </span><span id="__span-8-12"><a id="__codelineno-8-12" name="__codelineno-8-12"></a> <span class="n">label</span> <span class="o">=</span> <span class="n">batch</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="__span-8-13"><a id="__codelineno-8-13" name="__codelineno-8-13"></a> <span class="c1"># your loss code</span> </span><span id="__span-8-14"><a id="__codelineno-8-14" name="__codelineno-8-14"></a> <span class="n">loss</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">predicts</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">)</span> </span><span id="__span-8-15"><a id="__codelineno-8-15" name="__codelineno-8-15"></a> <span class="k">return</span> <span class="p">{</span><span class="s1">'loss'</span><span class="p">:</span> <span class="n">loss</span><span class="p">}</span> </span></code></pre></div></td></tr></table></div> </li> <li> <p>Import the added module in the <a href="../../ppocr/losses/__init__.py">ppocr/losses/_<em>init_</em>.py</a> file.</p> </li> </ol> <p>After the loss function module is added, you only need to configure it in the configuration file to use it, such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-9-1">1</a></span> <span class="normal"><a href="#__codelineno-9-2">2</a></span> <span class="normal"><a href="#__codelineno-9-3">3</a></span> <span class="normal"><a href="#__codelineno-9-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="nt">Loss</span><span class="p">:</span> </span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyLoss</span> </span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4"></a><span class="w"> </span><span class="nt">args2</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args2</span> </span></code></pre></div></td></tr></table></div> <h2 id="metric">Metric<a class="headerlink" href="#metric" title="Permanent link">¶</a></h2> <p>Metric is used to calculate the performance of the network on the current batch. This part is under <a href="../../ppocr/metrics">ppocr/metrics</a>. PaddleOCR has built-in evaluation modules related to algorithms such as detection, classification and recognition. For modules that do not have built-in modules, you can add them through the following steps:</p> <ol> <li>Create a new file under the <a href="../../ppocr/metrics">ppocr/metrics</a> folder, such as my_metric.py.</li> <li> <p>Add code in the my_metric.py file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1"> 1</a></span> <span class="normal"><a href="#__codelineno-10-2"> 2</a></span> <span class="normal"><a href="#__codelineno-10-3"> 3</a></span> <span class="normal"><a href="#__codelineno-10-4"> 4</a></span> <span class="normal"><a href="#__codelineno-10-5"> 5</a></span> <span class="normal"><a href="#__codelineno-10-6"> 6</a></span> <span class="normal"><a href="#__codelineno-10-7"> 7</a></span> <span class="normal"><a href="#__codelineno-10-8"> 8</a></span> <span class="normal"><a href="#__codelineno-10-9"> 9</a></span> <span class="normal"><a href="#__codelineno-10-10">10</a></span> <span class="normal"><a href="#__codelineno-10-11">11</a></span> <span class="normal"><a href="#__codelineno-10-12">12</a></span> <span class="normal"><a href="#__codelineno-10-13">13</a></span> <span class="normal"><a href="#__codelineno-10-14">14</a></span> <span class="normal"><a href="#__codelineno-10-15">15</a></span> <span class="normal"><a href="#__codelineno-10-16">16</a></span> <span class="normal"><a href="#__codelineno-10-17">17</a></span> <span class="normal"><a href="#__codelineno-10-18">18</a></span> <span class="normal"><a href="#__codelineno-10-19">19</a></span> <span class="normal"><a href="#__codelineno-10-20">20</a></span> <span class="normal"><a href="#__codelineno-10-21">21</a></span> <span class="normal"><a href="#__codelineno-10-22">22</a></span> <span class="normal"><a href="#__codelineno-10-23">23</a></span> <span class="normal"><a href="#__codelineno-10-24">24</a></span> <span class="normal"><a href="#__codelineno-10-25">25</a></span> <span class="normal"><a href="#__codelineno-10-26">26</a></span> <span class="normal"><a href="#__codelineno-10-27">27</a></span> <span class="normal"><a href="#__codelineno-10-28">28</a></span> <span class="normal"><a href="#__codelineno-10-29">29</a></span> <span class="normal"><a href="#__codelineno-10-30">30</a></span> <span class="normal"><a href="#__codelineno-10-31">31</a></span> <span class="normal"><a href="#__codelineno-10-32">32</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="k">class</span> <span class="nc">MyMetric</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> </span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">main_indicator</span><span class="o">=</span><span class="s1">'acc'</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3"></a> <span class="c1"># main_indicator is used for select best model</span> </span><span id="__span-10-4"><a id="__codelineno-10-4" name="__codelineno-10-4"></a> <span class="bp">self</span><span class="o">.</span><span class="n">main_indicator</span> <span class="o">=</span> <span class="n">main_indicator</span> </span><span id="__span-10-5"><a id="__codelineno-10-5" name="__codelineno-10-5"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> </span><span id="__span-10-6"><a id="__codelineno-10-6" name="__codelineno-10-6"></a> </span><span id="__span-10-7"><a id="__codelineno-10-7" name="__codelineno-10-7"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preds</span><span class="p">,</span> <span class="n">batch</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-10-8"><a id="__codelineno-10-8" name="__codelineno-10-8"></a> <span class="c1"># preds is out of postprocess</span> </span><span id="__span-10-9"><a id="__codelineno-10-9" name="__codelineno-10-9"></a> <span class="c1"># batch is out of dataloader</span> </span><span id="__span-10-10"><a id="__codelineno-10-10" name="__codelineno-10-10"></a> <span class="n">labels</span> <span class="o">=</span> <span class="n">batch</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="__span-10-11"><a id="__codelineno-10-11" name="__codelineno-10-11"></a> <span class="n">cur_correct_num</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="__span-10-12"><a id="__codelineno-10-12" name="__codelineno-10-12"></a> <span class="n">cur_all_num</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="__span-10-13"><a id="__codelineno-10-13" name="__codelineno-10-13"></a> <span class="c1"># you metric code</span> </span><span id="__span-10-14"><a id="__codelineno-10-14" name="__codelineno-10-14"></a> <span class="bp">self</span><span class="o">.</span><span class="n">correct_num</span> <span class="o">+=</span> <span class="n">cur_correct_num</span> </span><span id="__span-10-15"><a id="__codelineno-10-15" name="__codelineno-10-15"></a> <span class="bp">self</span><span class="o">.</span><span class="n">all_num</span> <span class="o">+=</span> <span class="n">cur_all_num</span> </span><span id="__span-10-16"><a id="__codelineno-10-16" name="__codelineno-10-16"></a> <span class="k">return</span> <span class="p">{</span><span class="s1">'acc'</span><span class="p">:</span> <span class="n">cur_correct_num</span> <span class="o">/</span> <span class="n">cur_all_num</span><span class="p">,</span> <span class="p">}</span> </span><span id="__span-10-17"><a id="__codelineno-10-17" name="__codelineno-10-17"></a> </span><span id="__span-10-18"><a id="__codelineno-10-18" name="__codelineno-10-18"></a> <span class="k">def</span> <span class="nf">get_metric</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="__span-10-19"><a id="__codelineno-10-19" name="__codelineno-10-19"></a><span class="w"> </span><span class="sd">"""</span> </span><span id="__span-10-20"><a id="__codelineno-10-20" name="__codelineno-10-20"></a><span class="sd"> return metrics {</span> </span><span id="__span-10-21"><a id="__codelineno-10-21" name="__codelineno-10-21"></a><span class="sd"> 'acc': 0,</span> </span><span id="__span-10-22"><a id="__codelineno-10-22" name="__codelineno-10-22"></a><span class="sd"> 'norm_edit_dis': 0,</span> </span><span id="__span-10-23"><a id="__codelineno-10-23" name="__codelineno-10-23"></a><span class="sd"> }</span> </span><span id="__span-10-24"><a id="__codelineno-10-24" name="__codelineno-10-24"></a><span class="sd"> """</span> </span><span id="__span-10-25"><a id="__codelineno-10-25" name="__codelineno-10-25"></a> <span class="n">acc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">correct_num</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">all_num</span> </span><span id="__span-10-26"><a id="__codelineno-10-26" name="__codelineno-10-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> </span><span id="__span-10-27"><a id="__codelineno-10-27" name="__codelineno-10-27"></a> <span class="k">return</span> <span class="p">{</span><span class="s1">'acc'</span><span class="p">:</span> <span class="n">acc</span><span class="p">}</span> </span><span id="__span-10-28"><a id="__codelineno-10-28" name="__codelineno-10-28"></a> </span><span id="__span-10-29"><a id="__codelineno-10-29" name="__codelineno-10-29"></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="__span-10-30"><a id="__codelineno-10-30" name="__codelineno-10-30"></a> <span class="c1"># reset metric</span> </span><span id="__span-10-31"><a id="__codelineno-10-31" name="__codelineno-10-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">correct_num</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="__span-10-32"><a id="__codelineno-10-32" name="__codelineno-10-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">all_num</span> <span class="o">=</span> <span class="mi">0</span> </span></code></pre></div></td></tr></table></div> </li> <li> <p>Import the added module in the <a href="../../ppocr/metrics/__init__.py">ppocr/metrics/_<em>init_</em>.py</a> file.</p> </li> </ol> <p>After the metric module is added, you only need to configure it in the configuration file to use it, such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-11-1">1</a></span> <span class="normal"><a href="#__codelineno-11-2">2</a></span> <span class="normal"><a href="#__codelineno-11-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1"></a><span class="nt">Metric</span><span class="p">:</span> </span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyMetric</span> </span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3"></a><span class="w"> </span><span class="nt">main_indicator</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">acc</span> </span></code></pre></div></td></tr></table></div> <h2 id="optimizer">Optimizer<a class="headerlink" href="#optimizer" title="Permanent link">¶</a></h2> <p>The optimizer is used to train the network. The optimizer also contains network regularization and learning rate decay modules. This part is under <a href="../../ppocr/optimizer">ppocr/optimizer</a>. PaddleOCR has built-in Commonly used optimizer modules such as <code>Momentum</code>, <code>Adam</code> and <code>RMSProp</code>, common regularization modules such as <code>Linear</code>, <code>Cosine</code>, <code>Step</code> and <code>Piecewise</code>, and common learning rate decay modules such as <code>L1Decay</code> and <code>L2Decay</code>. Modules without built-in can be added through the following steps, take <code>optimizer</code> as an example:</p> <ol> <li> <p>Create your own optimizer in the <a href="../../ppocr/optimizer/optimizer.py">ppocr/optimizer/optimizer.py</a> file, the sample code is as follows:</p> <div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-12-1"> 1</a></span> <span class="normal"><a href="#__codelineno-12-2"> 2</a></span> <span class="normal"><a href="#__codelineno-12-3"> 3</a></span> <span class="normal"><a href="#__codelineno-12-4"> 4</a></span> <span class="normal"><a href="#__codelineno-12-5"> 5</a></span> <span class="normal"><a href="#__codelineno-12-6"> 6</a></span> <span class="normal"><a href="#__codelineno-12-7"> 7</a></span> <span class="normal"><a href="#__codelineno-12-8"> 8</a></span> <span class="normal"><a href="#__codelineno-12-9"> 9</a></span> <span class="normal"><a href="#__codelineno-12-10">10</a></span> <span class="normal"><a href="#__codelineno-12-11">11</a></span> <span class="normal"><a href="#__codelineno-12-12">12</a></span> <span class="normal"><a href="#__codelineno-12-13">13</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1"></a><span class="kn">from</span> <span class="nn">paddle</span> <span class="kn">import</span> <span class="n">optimizer</span> <span class="k">as</span> <span class="n">optim</span> </span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2"></a> </span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3"></a> </span><span id="__span-12-4"><a id="__codelineno-12-4" name="__codelineno-12-4"></a><span class="k">class</span> <span class="nc">MyOptim</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> </span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">learning_rate</span><span class="o">=</span><span class="mf">0.001</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> </span><span id="__span-12-6"><a id="__codelineno-12-6" name="__codelineno-12-6"></a> <span class="bp">self</span><span class="o">.</span><span class="n">learning_rate</span> <span class="o">=</span> <span class="n">learning_rate</span> </span><span id="__span-12-7"><a id="__codelineno-12-7" name="__codelineno-12-7"></a> </span><span id="__span-12-8"><a id="__codelineno-12-8" name="__codelineno-12-8"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span> </span><span id="__span-12-9"><a id="__codelineno-12-9" name="__codelineno-12-9"></a> <span class="c1"># It is recommended to wrap the built-in optimizer of paddle</span> </span><span id="__span-12-10"><a id="__codelineno-12-10" name="__codelineno-12-10"></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">optim</span><span class="o">.</span><span class="n">XXX</span><span class="p">(</span> </span><span id="__span-12-11"><a id="__codelineno-12-11" name="__codelineno-12-11"></a> <span class="n">learning_rate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">learning_rate</span><span class="p">,</span> </span><span id="__span-12-12"><a id="__codelineno-12-12" name="__codelineno-12-12"></a> <span class="n">parameters</span><span class="o">=</span><span class="n">parameters</span><span class="p">)</span> </span><span id="__span-12-13"><a id="__codelineno-12-13" name="__codelineno-12-13"></a> <span class="k">return</span> <span class="n">opt</span> </span></code></pre></div></td></tr></table></div> </li> </ol> <p>After the optimizer module is added, you only need to configure it in the configuration file to use, such as:</p> <div class="language-yaml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-13-1"> 1</a></span> <span class="normal"><a href="#__codelineno-13-2"> 2</a></span> <span class="normal"><a href="#__codelineno-13-3"> 3</a></span> <span class="normal"><a href="#__codelineno-13-4"> 4</a></span> <span class="normal"><a href="#__codelineno-13-5"> 5</a></span> <span class="normal"><a href="#__codelineno-13-6"> 6</a></span> <span class="normal"><a href="#__codelineno-13-7"> 7</a></span> <span class="normal"><a href="#__codelineno-13-8"> 8</a></span> <span class="normal"><a href="#__codelineno-13-9"> 9</a></span> <span class="normal"><a href="#__codelineno-13-10">10</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1"></a><span class="nt">Optimizer</span><span class="p">:</span> </span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyOptim</span> </span><span id="__span-13-3"><a id="__codelineno-13-3" name="__codelineno-13-3"></a><span class="w"> </span><span class="nt">args1</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args1</span> </span><span id="__span-13-4"><a id="__codelineno-13-4" name="__codelineno-13-4"></a><span class="w"> </span><span class="nt">args2</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">args2</span> </span><span id="__span-13-5"><a id="__codelineno-13-5" name="__codelineno-13-5"></a><span class="w"> </span><span class="nt">lr</span><span class="p">:</span> </span><span id="__span-13-6"><a id="__codelineno-13-6" name="__codelineno-13-6"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Cosine</span> </span><span id="__span-13-7"><a id="__codelineno-13-7" name="__codelineno-13-7"></a><span class="w"> </span><span class="nt">learning_rate</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0.001</span> </span><span id="__span-13-8"><a id="__codelineno-13-8" name="__codelineno-13-8"></a><span class="w"> </span><span class="nt">regularizer</span><span class="p">:</span> </span><span id="__span-13-9"><a id="__codelineno-13-9" name="__codelineno-13-9"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">'L2'</span> </span><span id="__span-13-10"><a id="__codelineno-13-10" name="__codelineno-13-10"></a><span class="w"> </span><span class="nt">factor</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0</span> </span></code></pre></div></td></tr></table></div> <aside class="md-source-file"> <span class="md-source-file__fact"> <span class="md-icon" title="Last update"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">December 12, 2024</span> </span> <span class="md-source-file__fact"> <span class="md-icon" title="Created"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">December 12, 2024</span> </span> </aside> <h2 id="__comments">Comments</h2> <!-- Insert generated snippet here --> <script src="https://giscus.app/client.js" data-repo="PaddlePaddle/PaddleOCR" data-repo-id="MDEwOlJlcG9zaXRvcnkyNjIyOTYxMjI=" data-category="Q&A" data-category-id="DIC_kwDOD6JSOs4COrbO" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="top" data-theme="preferred_color_scheme" data-lang="en" data-loading="lazy" crossorigin="anonymous" async> </script> <!-- Synchronize Giscus theme with palette --> <script> var giscus = document.querySelector("script[src*=giscus]") // Set palette on initial load var palette = __md_get("__palette") if (palette && typeof palette.color === "object") { var theme = palette.color.scheme === "slate" ? "transparent_dark" : "light" // Instruct Giscus to set theme giscus.setAttribute("data-theme", theme) } // Register event handlers after documented loaded document.addEventListener("DOMContentLoaded", function () { var ref = document.querySelector("[data-md-component=palette]") ref.addEventListener("change", function () { var palette = __md_get("__palette") if (palette && typeof palette.color === "object") { var theme = palette.color.scheme === "slate" ? "transparent_dark" : "light" // Instruct Giscus to change theme var frame = document.querySelector(".giscus-frame") frame.contentWindow.postMessage( { giscus: { setConfig: { theme } } }, "https://giscus.app" ) } }) }) </script> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="kie/algorithm_kie_sdmgr.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: SDMGR"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256l137.3-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> SDMGR </div> </div> </a> <a href="../applications/overview.html" class="md-footer__link md-footer__link--next" aria-label="Next: Overview"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Overview </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2024 Maintained by PaddleOCR PMC. </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://github.com/PaddlePaddle/PaddleOCR" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> <a href="https://pypi.org/project/paddleocr/" target="_blank" rel="noopener" title="pypi.org" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6M286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3M167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4m-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "../..", "features": ["announce.dismiss", "content.tooltips", "content.code.copy", "content.tabs.link", "content.footnote.tooltips", "content.action.edit", "content.action.view", "navigation.expand", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "navigation.footer", "navigation.indexes", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script> <script src="../../javascripts/katex.min.js"></script> <script src="https://unpkg.com/katex@0/dist/katex.min.js"></script> <script src="https://unpkg.com/katex@0/dist/contrib/auto-render.min.js"></script> </body> </html>