PaddleOCR/v2.9/community/code_and_doc.html

5881 lines
147 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!doctype html>
<html lang="zh" 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/community/code_and_doc.html">
<link rel="prev" href="community_contribution.html">
<link rel="icon" href="../static/images/logo.jpg">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.48">
<title>附录 - PaddleOCR 文档</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="#_1" class="md-skip">
跳转至
</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="页眉">
<a href="../index.html" title="PaddleOCR 文档" class="md-header__button md-logo" aria-label="PaddleOCR 文档" 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 文档
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
附录
</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="选择当前语言">
<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="code_and_doc.html" hreflang="zh" class="md-select__link">
简体中文
</a>
</li>
<li class="md-select__item">
<a href="../en/community/code_and_doc.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="搜索" placeholder="搜索" 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="查找">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="分享" aria-label="分享" 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="清空当前内容" aria-label="清空当前内容" 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">
正在初始化搜索引擎
</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="前往仓库" 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="标签" 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">
快速开始
</a>
</li>
<li class="md-tabs__item">
<a href="../update.html" class="md-tabs__link">
近期更新
</a>
</li>
<li class="md-tabs__item">
<a href="../paddlex/overview.html" class="md-tabs__link">
低代码全流程开发
</a>
</li>
<li class="md-tabs__item">
<a href="../model/index.html" class="md-tabs__link">
模型
</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">
<a href="../algorithm/overview.html" class="md-tabs__link">
前沿算法与模型
</a>
</li>
<li class="md-tabs__item">
<a href="../applications/overview.html" class="md-tabs__link">
场景应用
</a>
</li>
<li class="md-tabs__item">
<a href="../data_anno_synth/overview.html" class="md-tabs__link">
数据标注与合成
</a>
</li>
<li class="md-tabs__item">
<a href="../datasets/datasets.html" class="md-tabs__link">
数据集
</a>
</li>
<li class="md-tabs__item">
<a href="../FAQ.html" class="md-tabs__link">
FAQ
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="community_contribution.html" class="md-tabs__link">
社区
</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="导航栏" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../index.html" title="PaddleOCR 文档" class="md-nav__button md-logo" aria-label="PaddleOCR 文档" data-md-component="logo">
<img src="../static/images/logo.jpg" alt="logo">
</a>
PaddleOCR 文档
</label>
<div class="md-nav__source">
<a href="https://github.com/PaddlePaddle/PaddleOCR" title="前往仓库" 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">
快速开始
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update.html" class="md-nav__link">
<span class="md-ellipsis">
近期更新
</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">
低代码全流程开发
</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>
低代码全流程开发
</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">
概述
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../paddlex/quick_start.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_5" >
<div class="md-nav__link md-nav__container">
<a href="../model/index.html" class="md-nav__link ">
<span class="md-ellipsis">
模型
</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>
模型
</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">
概述
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/quick_start.html" class="md-nav__link">
<span class="md-ellipsis">
快速开始
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/installation.html" class="md-nav__link">
<span class="md-ellipsis">
快速安装
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/visualization.html" class="md-nav__link">
<span class="md-ellipsis">
效果展示
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/environment.html" class="md-nav__link">
<span class="md-ellipsis">
运行环境
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_list.html" class="md-nav__link">
<span class="md-ellipsis">
模型库
</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">
模型训练
</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>
模型训练
</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">
基本概念
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_train/detection.html" class="md-nav__link">
<span class="md-ellipsis">
文本检测
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_train/recognition.html" class="md-nav__link">
<span class="md-ellipsis">
文本识别
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_train/angle_class.html" class="md-nav__link">
<span class="md-ellipsis">
文本方向分类器
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_train/kie.html" class="md-nav__link">
<span class="md-ellipsis">
关键信息提取
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_train/finetune.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_6_8" >
<label class="md-nav__link" for="__nav_6_8" id="__nav_6_8_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_6_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_8">
<span class="md-nav__icon md-icon"></span>
模型压缩
</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">
模型量化
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_compress/prune.html" class="md-nav__link">
<span class="md-ellipsis">
模型裁剪
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/model_compress/knowledge_distillation.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_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">
推理部署
</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>
推理部署
</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预测引擎推理
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/infer_deploy/cpp_infer.html" class="md-nav__link">
<span class="md-ellipsis">
基于C++预测引擎推理
</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 编译指南
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/infer_deploy/paddle_server.html" class="md-nav__link">
<span class="md-ellipsis">
服务化部署
</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部署
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/infer_deploy/lite.html" class="md-nav__link">
<span class="md-ellipsis">
端侧部署
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/infer_deploy/paddle_js.html" class="md-nav__link">
<span class="md-ellipsis">
网页前端部署
</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">
云上飞桨部署工具
</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">
博客
</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>
博客
</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使用说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/multi_languages.html" class="md-nav__link">
<span class="md-ellipsis">
多语言模型
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/ocr_book.html" class="md-nav__link">
<span class="md-ellipsis">
动手学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">
切片操作
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/inference_args.html" class="md-nav__link">
<span class="md-ellipsis">
PaddleOCR模型推理参数解释
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/distributed_training.html" class="md-nav__link">
<span class="md-ellipsis">
分布式训练
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/clone.html" class="md-nav__link">
<span class="md-ellipsis">
项目克隆
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/config.html" class="md-nav__link">
<span class="md-ellipsis">
配置文件内容与生成
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppocr/blog/customize.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_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">
概述
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/quick_start.html" class="md-nav__link">
<span class="md-ellipsis">
快速开始
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/models_list.html" class="md-nav__link">
<span class="md-ellipsis">
模型库
</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">
模型训练
</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>
模型训练
</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">
基本概念
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/model_train/train_layout.html" class="md-nav__link">
<span class="md-ellipsis">
版面分析
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/model_train/train_table.html" class="md-nav__link">
<span class="md-ellipsis">
表格识别
</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">
版面恢复
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/model_train/train_kie.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_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">
推理部署
</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>
推理部署
</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预测引擎推理
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/infer_deploy/cpp_infer.html" class="md-nav__link">
<span class="md-ellipsis">
基于C++预测引擎推理
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ppstructure/infer_deploy/paddle_server.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_7_6" >
<label class="md-nav__link" for="__nav_7_6" id="__nav_7_6_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_7_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_6">
<span class="md-nav__icon md-icon"></span>
博客
</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">
返回识别位置
</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">
怎样完成基于图像数据的信息抽取任务
</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_8" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
前沿算法与模型
</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="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
前沿算法与模型
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/overview.html" class="md-nav__link">
<span class="md-ellipsis">
概述
</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">
文本检测算法
</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>
文本检测算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/text_detection/algorithm_det_db.html" class="md-nav__link">
<span class="md-ellipsis">
DB与DB++
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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">
文本识别算法
</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>
文本识别算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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="../algorithm/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">
文本超分辨率算法
</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>
文本超分辨率算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/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">
公式识别算法
</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>
公式识别算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/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">
端到端OCR算法
</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>
端到端OCR算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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">
表格识别算法
</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>
表格识别算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/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">
关键信息抽取算法
</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>
关键信息抽取算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../algorithm/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="../algorithm/kie/algorithm_kie_layoutxlm.html" class="md-nav__link">
<span class="md-ellipsis">
LayoutLM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../algorithm/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">
<a href="../algorithm/add_new_algorithm.html" class="md-nav__link">
<span class="md-ellipsis">
使用PaddleOCR架构添加新算法
</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" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-ellipsis">
场景应用
</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>
场景应用
</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">
概述
</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">
数据标注与合成
</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>
数据标注与合成
</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">
概述
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../data_anno_synth/data_annotation.html" class="md-nav__link">
<span class="md-ellipsis">
其它数据标注工具
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../data_anno_synth/data_synthesis.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_11" >
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
<span class="md-ellipsis">
数据集
</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>
数据集
</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">
通用中英文OCR数据集
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../datasets/handwritten_datasets.html" class="md-nav__link">
<span class="md-ellipsis">
手写中文OCR数据集
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../datasets/vertical_and_multilingual_datasets.html" class="md-nav__link">
<span class="md-ellipsis">
垂类多语言OCR数据集
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../datasets/layout_datasets.html" class="md-nav__link">
<span class="md-ellipsis">
版面分析数据集
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../datasets/table_datasets.html" class="md-nav__link">
<span class="md-ellipsis">
表格识别数据集
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../datasets/kie_datasets.html" class="md-nav__link">
<span class="md-ellipsis">
关键信息提取数据集
</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--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="">
<span class="md-ellipsis">
社区
</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="true">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon"></span>
社区
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="community_contribution.html" class="md-nav__link">
<span class="md-ellipsis">
社区贡献
</span>
</a>
</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">
附录
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="code_and_doc.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
附录
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1python" class="md-nav__link">
<span class="md-ellipsis">
附录1Python代码规范
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2" class="md-nav__link">
<span class="md-ellipsis">
附录2文档规范
</span>
</a>
<nav class="md-nav" aria-label="附录2文档规范">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#21" class="md-nav__link">
<span class="md-ellipsis">
2.1 总体说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#22" class="md-nav__link">
<span class="md-ellipsis">
2.2 格式规范
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#3pull-request" class="md-nav__link">
<span class="md-ellipsis">
附录3Pull Request说明
</span>
</a>
<nav class="md-nav" aria-label="附录3Pull Request说明">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#31-paddleocr" class="md-nav__link">
<span class="md-ellipsis">
3.1 PaddleOCR分支说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#32-paddleocr" class="md-nav__link">
<span class="md-ellipsis">
3.2 PaddleOCR代码提交流程与规范
</span>
</a>
<nav class="md-nav" aria-label="3.2 PaddleOCR代码提交流程与规范">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#321" class="md-nav__link">
<span class="md-ellipsis">
3.2.1 创建你的 远程仓库
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#322-token" class="md-nav__link">
<span class="md-ellipsis">
3.2.2 通过Token方式登录与建立连接
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#323" class="md-nav__link">
<span class="md-ellipsis">
3.2.3 创建本地分支
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#324-pre-commit" class="md-nav__link">
<span class="md-ellipsis">
3.2.4 使用pre-commit勾子
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#325" class="md-nav__link">
<span class="md-ellipsis">
3.2.5 修改与提交代码
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#326-push" class="md-nav__link">
<span class="md-ellipsis">
3.2.6 Push到远程仓库
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#327-pull-request" class="md-nav__link">
<span class="md-ellipsis">
3.2.7 提交Pull Request
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#328-cla" class="md-nav__link">
<span class="md-ellipsis">
3.2.8 签署CLA协议和通过单元测试
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#329" class="md-nav__link">
<span class="md-ellipsis">
3.2.9 删除分支
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3210" class="md-nav__link">
<span class="md-ellipsis">
3.2.10 提交代码的一些约定
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</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="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1python" class="md-nav__link">
<span class="md-ellipsis">
附录1Python代码规范
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2" class="md-nav__link">
<span class="md-ellipsis">
附录2文档规范
</span>
</a>
<nav class="md-nav" aria-label="附录2文档规范">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#21" class="md-nav__link">
<span class="md-ellipsis">
2.1 总体说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#22" class="md-nav__link">
<span class="md-ellipsis">
2.2 格式规范
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#3pull-request" class="md-nav__link">
<span class="md-ellipsis">
附录3Pull Request说明
</span>
</a>
<nav class="md-nav" aria-label="附录3Pull Request说明">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#31-paddleocr" class="md-nav__link">
<span class="md-ellipsis">
3.1 PaddleOCR分支说明
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#32-paddleocr" class="md-nav__link">
<span class="md-ellipsis">
3.2 PaddleOCR代码提交流程与规范
</span>
</a>
<nav class="md-nav" aria-label="3.2 PaddleOCR代码提交流程与规范">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#321" class="md-nav__link">
<span class="md-ellipsis">
3.2.1 创建你的 远程仓库
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#322-token" class="md-nav__link">
<span class="md-ellipsis">
3.2.2 通过Token方式登录与建立连接
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#323" class="md-nav__link">
<span class="md-ellipsis">
3.2.3 创建本地分支
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#324-pre-commit" class="md-nav__link">
<span class="md-ellipsis">
3.2.4 使用pre-commit勾子
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#325" class="md-nav__link">
<span class="md-ellipsis">
3.2.5 修改与提交代码
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#326-push" class="md-nav__link">
<span class="md-ellipsis">
3.2.6 Push到远程仓库
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#327-pull-request" class="md-nav__link">
<span class="md-ellipsis">
3.2.7 提交Pull Request
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#328-cla" class="md-nav__link">
<span class="md-ellipsis">
3.2.8 签署CLA协议和通过单元测试
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#329" class="md-nav__link">
<span class="md-ellipsis">
3.2.9 删除分支
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3210" class="md-nav__link">
<span class="md-ellipsis">
3.2.10 提交代码的一些约定
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</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/community/code_and_doc.md" title="编辑此页" 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/community/code_and_doc.md" title="查看本页的源代码" 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="_1">附录<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h1>
<p>本附录包含了Python、文档规范以及Pull Request流程请各位开发者遵循相关内容</p>
<h2 id="1python">附录1Python代码规范<a class="headerlink" href="#1python" title="Permanent link">&para;</a></h2>
<p>PaddleOCR的Python代码遵循 <a href="https://www.python.org/dev/peps/pep-0008/">PEP8规范</a>,其中一些关注的重点包括如下内容</p>
<ul>
<li>
<p>空格</p>
<ul>
<li>空格应该加在逗号、分号、冒号后,而非他们的前面</li>
</ul>
<div class="language-python 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></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><span class="c1"># 正确:</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a><span class="nb">print</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a><span class="c1"># 错误:</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="nb">print</span><span class="p">(</span><span class="n">x</span> <span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</span></code></pre></div></td></tr></table></div>
<ul>
<li>在函数中指定关键字参数或默认参数值时, 不要在其两侧使用空格</li>
</ul>
<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></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="c1"># 正确:</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="k">def</span> <span class="nf">complex</span><span class="p">(</span><span class="n">real</span><span class="p">,</span> <span class="n">imag</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3"></a><span class="c1"># 错误:</span>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4"></a><span class="k">def</span> <span class="nf">complex</span><span class="p">(</span><span class="n">real</span><span class="p">,</span> <span class="n">imag</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">)</span>
</span></code></pre></div></td></tr></table></div>
</li>
<li>
<p>注释</p>
<ul>
<li>行内注释:行内注释使用 <code>#</code> 号表示,在代码与 <code>#</code> 之间需要空两个空格, <code>#</code> 与注释之间应当空一个空格,例如</li>
</ul>
<div class="language-python 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></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="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># Compensate for border</span>
</span></code></pre></div></td></tr></table></div>
<ul>
<li>
<p>函数和方法:每个函数的定义后的描述应该包括以下内容:</p>
<ul>
<li>函数描述:函数的作用,输入输出的</li>
<li>Args每个参数的名字以及对该参数的描述</li>
<li>Returns返回值的含义和类型</li>
</ul>
<div class="language-python 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>
<span class="normal"><a href="#__codelineno-3-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-3-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-3-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-3-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-3-10">10</a></span>
<span class="normal"><a href="#__codelineno-3-11">11</a></span>
<span class="normal"><a href="#__codelineno-3-12">12</a></span>
<span class="normal"><a href="#__codelineno-3-13">13</a></span>
<span class="normal"><a href="#__codelineno-3-14">14</a></span>
<span class="normal"><a href="#__codelineno-3-15">15</a></span>
<span class="normal"><a href="#__codelineno-3-16">16</a></span>
<span class="normal"><a href="#__codelineno-3-17">17</a></span>
<span class="normal"><a href="#__codelineno-3-18">18</a></span>
<span class="normal"><a href="#__codelineno-3-19">19</a></span>
<span class="normal"><a href="#__codelineno-3-20">20</a></span>
<span class="normal"><a href="#__codelineno-3-21">21</a></span>
<span class="normal"><a href="#__codelineno-3-22">22</a></span>
<span class="normal"><a href="#__codelineno-3-23">23</a></span>
<span class="normal"><a href="#__codelineno-3-24">24</a></span>
<span class="normal"><a href="#__codelineno-3-25">25</a></span>
<span class="normal"><a href="#__codelineno-3-26">26</a></span>
<span class="normal"><a href="#__codelineno-3-27">27</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="k">def</span> <span class="nf">fetch_bigtable_rows</span><span class="p">(</span><span class="n">big_table</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">other_silly_variable</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Fetches rows from a Bigtable.</span>
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3"></a>
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4"></a><span class="sd"> Retrieves rows pertaining to the given keys from the Table instance</span>
</span><span id="__span-3-5"><a id="__codelineno-3-5" name="__codelineno-3-5"></a><span class="sd"> represented by big_table. Silly things may happen if</span>
</span><span id="__span-3-6"><a id="__codelineno-3-6" name="__codelineno-3-6"></a><span class="sd"> other_silly_variable is not None.</span>
</span><span id="__span-3-7"><a id="__codelineno-3-7" name="__codelineno-3-7"></a>
</span><span id="__span-3-8"><a id="__codelineno-3-8" name="__codelineno-3-8"></a><span class="sd"> Args:</span>
</span><span id="__span-3-9"><a id="__codelineno-3-9" name="__codelineno-3-9"></a><span class="sd"> big_table: An open Bigtable Table instance.</span>
</span><span id="__span-3-10"><a id="__codelineno-3-10" name="__codelineno-3-10"></a><span class="sd"> keys: A sequence of strings representing the key of each table row</span>
</span><span id="__span-3-11"><a id="__codelineno-3-11" name="__codelineno-3-11"></a><span class="sd"> to fetch.</span>
</span><span id="__span-3-12"><a id="__codelineno-3-12" name="__codelineno-3-12"></a><span class="sd"> other_silly_variable: Another optional variable, that has a much</span>
</span><span id="__span-3-13"><a id="__codelineno-3-13" name="__codelineno-3-13"></a><span class="sd"> longer name than the other args, and which does nothing.</span>
</span><span id="__span-3-14"><a id="__codelineno-3-14" name="__codelineno-3-14"></a>
</span><span id="__span-3-15"><a id="__codelineno-3-15" name="__codelineno-3-15"></a><span class="sd"> Returns:</span>
</span><span id="__span-3-16"><a id="__codelineno-3-16" name="__codelineno-3-16"></a><span class="sd"> A dict mapping keys to the corresponding table row data</span>
</span><span id="__span-3-17"><a id="__codelineno-3-17" name="__codelineno-3-17"></a><span class="sd"> fetched. Each row is represented as a tuple of strings. For</span>
</span><span id="__span-3-18"><a id="__codelineno-3-18" name="__codelineno-3-18"></a><span class="sd"> example:</span>
</span><span id="__span-3-19"><a id="__codelineno-3-19" name="__codelineno-3-19"></a>
</span><span id="__span-3-20"><a id="__codelineno-3-20" name="__codelineno-3-20"></a><span class="sd"> {&#39;Serak&#39;: (&#39;Rigel VII&#39;, &#39;Preparer&#39;),</span>
</span><span id="__span-3-21"><a id="__codelineno-3-21" name="__codelineno-3-21"></a><span class="sd"> &#39;Zim&#39;: (&#39;Irk&#39;, &#39;Invader&#39;),</span>
</span><span id="__span-3-22"><a id="__codelineno-3-22" name="__codelineno-3-22"></a><span class="sd"> &#39;Lrrr&#39;: (&#39;Omicron Persei 8&#39;, &#39;Emperor&#39;)}</span>
</span><span id="__span-3-23"><a id="__codelineno-3-23" name="__codelineno-3-23"></a>
</span><span id="__span-3-24"><a id="__codelineno-3-24" name="__codelineno-3-24"></a><span class="sd"> If a key from the keys argument is missing from the dictionary,</span>
</span><span id="__span-3-25"><a id="__codelineno-3-25" name="__codelineno-3-25"></a><span class="sd"> then that row was not found in the table.</span>
</span><span id="__span-3-26"><a id="__codelineno-3-26" name="__codelineno-3-26"></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="__span-3-27"><a id="__codelineno-3-27" name="__codelineno-3-27"></a> <span class="k">pass</span>
</span></code></pre></div></td></tr></table></div>
</li>
</ul>
</li>
</ul>
<h2 id="2">附录2文档规范<a class="headerlink" href="#2" title="Permanent link">&para;</a></h2>
<h3 id="21">2.1 总体说明<a class="headerlink" href="#21" title="Permanent link">&para;</a></h3>
<ul>
<li>
<p>文档位置如果您增加的新功能可以补充在原有的Markdown文件中<strong>不要重新新建</strong>一个文件。如果您对添加的位置不清楚可以先PR代码然后在commit中询问官方人员。</p>
</li>
<li>
<p>新增Markdown文档名称使用英文描述文档内容一般由小写字母与下划线组合而成例如 <code>add_new_algorithm.md</code></p>
</li>
<li>
<p>新增Markdown文档格式目录 - 正文 - FAQ</p>
</li>
</ul>
<blockquote>
<p>目录生成方法可以使用 <a href="https://ecotrust-canada.github.io/markdown-toc/">此网站</a> 将md内容复制之后自动提取目录然后在md文件的每个标题前添加</p>
</blockquote>
<ul>
<li>中英双语:任何对文档的改动或新增都需要分别在中文和英文文档上进行。</li>
</ul>
<h3 id="22">2.2 格式规范<a class="headerlink" href="#22" title="Permanent link">&para;</a></h3>
<ul>
<li>
<p>标题格式:文档标题格式按照:阿拉伯数字小数点组合 - 空格 - 标题的格式(例如 <code>2.1 XXXX</code> <code>2. XXXX</code></p>
</li>
<li>
<p>代码块:通过代码块格式展示需要运行的代码,在代码块前描述命令参数的含义。例如:</p>
</li>
</ul>
<blockquote>
<p>检测+方向分类器+识别全流程:设置方向分类器参数 <code>--use_angle_cls true</code> 后可对竖排文本进行识别。</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-4-1">1</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>paddleocr<span class="w"> </span>--image_dir<span class="w"> </span>./imgs/11.jpg<span class="w"> </span>--use_angle_cls<span class="w"> </span><span class="nb">true</span>
</span></code></pre></div></td></tr></table></div>
</blockquote>
<ul>
<li>
<p>变量引用:如果在行内引用到代码变量或命令参数,需要用行内代码表示,例如上方 <code>--use_angle_cls true</code> ,并在前后各空一格</p>
</li>
<li>
<p>统一命名如PP-OCRv2、PP-OCR mobile、<code>paddleocr</code> whl包、PPOCRLabel、Paddle Lite等</p>
</li>
<li>
<p>补充说明:通过引用格式 <code>&gt;</code> 补充说明,或对注意事项进行说明</p>
</li>
<li>
<p>图片:如果在说明文档中增加了图片,请规范图片的命名形式(描述图片内容),并将图片添加在 <code>doc/</code></p>
</li>
</ul>
<h2 id="3pull-request">附录3Pull Request说明<a class="headerlink" href="#3pull-request" title="Permanent link">&para;</a></h2>
<h3 id="31-paddleocr">3.1 PaddleOCR分支说明<a class="headerlink" href="#31-paddleocr" title="Permanent link">&para;</a></h3>
<p>PaddleOCR未来将维护2种分支分别为</p>
<ul>
<li>release/x.x系列分支为稳定的发行版本分支也是默认分支。PaddleOCR会根据功能更新情况发布新的release分支同时适配Paddle的release版本。随着版本迭代release/x.x系列分支会越来越多默认维护最新版本的release分支。</li>
<li>dygraph分支为开发分支适配Paddle动态图的dygraph版本主要用于开发新功能。如果有同学需要进行二次开发请选择dygraph分支。为了保证dygraph分支能在需要的时候拉出release/x.x分支dygraph分支的代码只能使用Paddle最新release分支中有效的api。也就是说如果Paddle dygraph分支中开发了新的api但尚未出现在release分支代码中那么请不要在PaddleOCR中使用。除此之外对于不涉及api的性能优化、参数调整、策略更新等都可以正常进行开发。</li>
</ul>
<p>PaddleOCR的历史分支未来将不再维护。考虑到一些同学可能仍在使用这些分支还会继续保留</p>
<ul>
<li>develop分支这个分支曾用于静态图的开发与测试目前兼容&gt;=1.7版本的Paddle。如果有特殊需求要适配旧版本的Paddle那还可以使用这个分支但除了修复bug外不再更新代码。</li>
</ul>
<p>PaddleOCR欢迎大家向repo中积极贡献代码下面给出一些贡献代码的基本流程。</p>
<h3 id="32-paddleocr">3.2 PaddleOCR代码提交流程与规范<a class="headerlink" href="#32-paddleocr" title="Permanent link">&para;</a></h3>
<blockquote>
<p>如果你熟悉Git使用可以直接跳转到 <a href="#提交代码的一些约定">3.2.10 提交代码的一些约定</a></p>
</blockquote>
<h4 id="321">3.2.1 创建你的 <code>远程仓库</code><a class="headerlink" href="#321" title="Permanent link">&para;</a></h4>
<ul>
<li>
<p>在PaddleOCR的 <a href="https://github.com/PaddlePaddle/PaddleOCR">GitHub首页</a>,点击左上角 <code>Fork</code> 按钮,在你的个人目录下创建 <code>远程仓库</code>,比如<code>https://github.com/{your_name}/PaddleOCR</code></p>
<p><img alt="banner" src="images/banner.png" /></p>
</li>
<li>
<p><code>远程仓库</code> Clone到本地</p>
</li>
</ul>
<div class="language-bash 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></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="c1"># 拉取dygraph分支的代码</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/<span class="o">{</span>your_name<span class="o">}</span>/PaddleOCR.git<span class="w"> </span>-b<span class="w"> </span>dygraph
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="nb">cd</span><span class="w"> </span>PaddleOCR
</span></code></pre></div></td></tr></table></div>
<blockquote>
<p>多数情况下clone失败是由于网络原因请稍后重试或配置代理</p>
</blockquote>
<h4 id="322-token">3.2.2 通过Token方式登录与建立连接<a class="headerlink" href="#322-token" title="Permanent link">&para;</a></h4>
<p>首先查看当前 <code>远程仓库</code> 的信息。</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-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></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>git<span class="w"> </span>remote<span class="w"> </span>-v
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2"></a><span class="c1"># origin https://github.com/{your_name}/PaddleOCR.git (fetch)</span>
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3"></a><span class="c1"># origin https://github.com/{your_name}/PaddleOCR.git (push)</span>
</span></code></pre></div></td></tr></table></div>
<p>只有clone的 <code>远程仓库</code> 的信息,也就是自己用户名下的 PaddleOCR。由于Github的登录方式变化需要通过Token的方式重新配置 <code>远程仓库</code> 的地址。生成Token的方式如下</p>
<ol>
<li>找到个人访问令牌token在Github页面右上角点击自己的头像然后依次选择 Settings --&gt; Developer settings --&gt; Personal access tokens</li>
<li>点击 Generate new token在Note中填入token名称例如paddle。在Select scopes选择repo必选、admin:repo_hook、delete_repo等可根据自身需要勾选。然后点击Generate token生成token。最后复制生成的token。</li>
</ol>
<p>删除原始的origin配置</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-7-1">1</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>git<span class="w"> </span>remote<span class="w"> </span>rm<span class="w"> </span>origin
</span></code></pre></div></td></tr></table></div>
<p>将remote分支改成 <code>https://oauth2:{token}@github.com/{your_name}/PaddleOCR.git</code>。例如如果token值为12345你的用户名为PPOCR则运行下方命令</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-8-1">1</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>git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>origin<span class="w"> </span>https://oauth2:12345@github.com/PPOCR/PaddleOCR.git
</span></code></pre></div></td></tr></table></div>
<p>这样我们就与自己的 <code>远程仓库</code> 建立了连接。接下来我们创建一个原始 PaddleOCR 仓库的远程主机,命名为 upstream。</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-9-1">1</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>git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>https://github.com/PaddlePaddle/PaddleOCR.git
</span></code></pre></div></td></tr></table></div>
<p>使用 <code>git remote -v</code> 查看当前 <code>远程仓库</code> 的信息输出如下发现包括了origin和upstream 2个 <code>远程仓库</code></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-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></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>origin<span class="w"> </span>https://oauth2:<span class="o">{</span>token<span class="o">}</span>@github.com/<span class="o">{</span>your_name<span class="o">}</span>/PaddleOCR.git<span class="w"> </span><span class="o">(</span>fetch<span class="o">)</span>
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2"></a>origin<span class="w"> </span>https://oauth2:<span class="o">{</span>token<span class="o">}</span>@github.com/<span class="o">{</span>your_name<span class="o">}</span>/PaddleOCR.git<span class="w"> </span><span class="o">(</span>push<span class="o">)</span>
</span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3"></a>upstream<span class="w"> </span>https://github.com/PaddlePaddle/PaddleOCR.git<span class="w"> </span><span class="o">(</span>fetch<span class="o">)</span>
</span><span id="__span-10-4"><a id="__codelineno-10-4" name="__codelineno-10-4"></a>upstream<span class="w"> </span>https://github.com/PaddlePaddle/PaddleOCR.git<span class="w"> </span><span class="o">(</span>push<span class="o">)</span>
</span></code></pre></div></td></tr></table></div>
<p>这主要是为了后续在提交pull request(PR)时,始终保持本地仓库最新。</p>
<h4 id="323">3.2.3 创建本地分支<a class="headerlink" href="#323" title="Permanent link">&para;</a></h4>
<p>首先获取 upstream 的最新代码,然后基于上游仓库 (upstream)的dygraph创建new_branch分支。</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-11-1">1</a></span>
<span class="normal"><a href="#__codelineno-11-2">2</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>git<span class="w"> </span>fetch<span class="w"> </span>upstream
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2"></a>git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>new_branch<span class="w"> </span>upstream/dygraph
</span></code></pre></div></td></tr></table></div>
<blockquote>
<p>如果对于新Fork的PaddleOCR项目用户远程仓库(origin)与上游(upstream)仓库的分支更新情况相同也可以基于origin仓库的默认分支或指定分支创建新的本地分支命令如下。</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-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></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="c1"># 基于用户远程仓库(origin)的dygraph创建new_branch分支</span>
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2"></a>git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>new_branch<span class="w"> </span>origin/dygraph
</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="c1"># 基于用户远程仓库(origin)的默认分支创建new_branch分支</span>
</span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5"></a>git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>new_branch
</span></code></pre></div></td></tr></table></div>
</blockquote>
<p>最终会显示切换到新的分支,输出信息如下</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-13-1">1</a></span>
<span class="normal"><a href="#__codelineno-13-2">2</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>Branch<span class="w"> </span>new_branch<span class="w"> </span><span class="nb">set</span><span class="w"> </span>up<span class="w"> </span>to<span class="w"> </span>track<span class="w"> </span>remote<span class="w"> </span>branch<span class="w"> </span>develop<span class="w"> </span>from<span class="w"> </span>upstream.
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2"></a>Switched<span class="w"> </span>to<span class="w"> </span>a<span class="w"> </span>new<span class="w"> </span>branch<span class="w"> </span><span class="s1">&#39;new_branch&#39;</span>
</span></code></pre></div></td></tr></table></div>
<p>切换分支之后即可在此分支上进行文件改动</p>
<h4 id="324-pre-commit">3.2.4 使用pre-commit勾子<a class="headerlink" href="#324-pre-commit" title="Permanent link">&para;</a></h4>
<p>Paddle 开发人员使用 pre-commit 工具来管理 Git 预提交钩子。 它可以帮助我们格式化源代码C++Python在提交commit前自动检查一些基本事宜如每个文件只有一个 EOLGit 中不要添加大文件等)。</p>
<p>pre-commit测试是 Travis-CI 中单元测试的一部分,不满足钩子的 PR 不能被提交到 PaddleOCR首先安装并在当前目录运行它</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-14-1">1</a></span>
<span class="normal"><a href="#__codelineno-14-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1"></a>pip<span class="w"> </span>install<span class="w"> </span>pre-commit
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2"></a>pre-commit<span class="w"> </span>install
</span></code></pre></div></td></tr></table></div>
<blockquote>
<ol>
<li>
<p>Paddle 使用 clang-format 来调整 C/C++ 源代码格式,请确保 <code>clang-format</code> 版本在 3.8 以上。</p>
</li>
<li>
<p>通过pip install pre-commit和conda install -c conda-forge pre-commit安装的yapf稍有不同的PaddleOCR 开发人员使用的是 <code>pip install pre-commit</code></p>
</li>
</ol>
</blockquote>
<h4 id="325">3.2.5 修改与提交代码<a class="headerlink" href="#325" title="Permanent link">&para;</a></h4>
<p>假设对PaddleOCR的 <code>README.md</code> 做了一些修改,可以通过 <code>git status</code> 查看改动的文件,然后使用 <code>git add</code> 添加改动文件。</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-15-1">1</a></span>
<span class="normal"><a href="#__codelineno-15-2">2</a></span>
<span class="normal"><a href="#__codelineno-15-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1"></a>git<span class="w"> </span>status<span class="w"> </span><span class="c1"># 查看改动文件</span>
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2"></a>git<span class="w"> </span>add<span class="w"> </span>README.md
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3"></a>pre-commit
</span></code></pre></div></td></tr></table></div>
<p>重复上述步骤直到pre-comit格式检查不报错。如下所示。</p>
<p><img alt="img" src="images/precommit_pass.png" /></p>
<p>提交修改,并写明修改内容("your commit info"</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-16-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1"></a>git<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;your commit info&quot;</span>
</span></code></pre></div></td></tr></table></div>
<h4 id="326-push">3.2.6 Push到远程仓库<a class="headerlink" href="#326-push" title="Permanent link">&para;</a></h4>
<p>使用push命令将修改的commit提交到 <code>远程仓库</code></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-17-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1"></a>git<span class="w"> </span>push<span class="w"> </span>origin<span class="w"> </span>new_branch
</span></code></pre></div></td></tr></table></div>
<h4 id="327-pull-request">3.2.7 提交Pull Request<a class="headerlink" href="#327-pull-request" title="Permanent link">&para;</a></h4>
<p>打开自己的远程仓库界面选择提交的分支。点击new pull request或contribute进入PR界面。选择本地分支和目标分支如下图所示。在PR的描述说明中填写该PR所完成的功能。接下来等待review如果有需要修改的地方参照上述步骤更新 origin 中的对应分支即可。</p>
<p><img alt="img" src="images/pr.png" /></p>
<h4 id="328-cla">3.2.8 签署CLA协议和通过单元测试<a class="headerlink" href="#328-cla" title="Permanent link">&para;</a></h4>
<ul>
<li>
<p>签署CLA 在首次向PaddlePaddle提交Pull Request时您需要您签署一次CLA(Contributor License Agreement)协议,以保证您的代码可以被合入,具体签署方式如下:</p>
</li>
<li>
<p>请您查看PR中的Check部分找到license/cla并点击右侧detail进入CLA网站</p>
</li>
<li>
<p>点击CLA网站中的“Sign in with GitHub to agree”,点击完成后将会跳转回您的Pull Request页面</p>
</li>
</ul>
<h4 id="329">3.2.9 删除分支<a class="headerlink" href="#329" title="Permanent link">&para;</a></h4>
<ul>
<li>删除远程分支</li>
</ul>
<p>在 PR 被 merge 进主仓库后,我们可以在 PR 的页面删除远程仓库的分支。</p>
<p>也可以使用 <code>git push origin :分支名</code> 删除远程分支,如:</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-18-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1"></a>git<span class="w"> </span>push<span class="w"> </span>origin<span class="w"> </span>:new_branch
</span></code></pre></div></td></tr></table></div>
<ul>
<li>删除本地分支</li>
</ul>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-19-1">1</a></span>
<span class="normal"><a href="#__codelineno-19-2">2</a></span>
<span class="normal"><a href="#__codelineno-19-3">3</a></span>
<span class="normal"><a href="#__codelineno-19-4">4</a></span>
<span class="normal"><a href="#__codelineno-19-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1"></a><span class="c1"># 切换到dygraph分支否则无法删除当前分支</span>
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2"></a>git<span class="w"> </span>checkout<span class="w"> </span>dygraph
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3"></a>
</span><span id="__span-19-4"><a id="__codelineno-19-4" name="__codelineno-19-4"></a><span class="c1"># 删除new_branch分支</span>
</span><span id="__span-19-5"><a id="__codelineno-19-5" name="__codelineno-19-5"></a>git<span class="w"> </span>branch<span class="w"> </span>-D<span class="w"> </span>new_branch
</span></code></pre></div></td></tr></table></div>
<h4 id="3210">3.2.10 提交代码的一些约定<a class="headerlink" href="#3210" title="Permanent link">&para;</a></h4>
<p>为了使官方维护人员在评审代码时更好地专注于代码本身,请您每次提交代码时,遵守以下约定:</p>
<p>1请保证Travis-CI 中单元测试能顺利通过。如果没过,说明提交的代码存在问题,官方维护人员一般不做评审。</p>
<p>2提交Pull Request前</p>
<ul>
<li>请注意commit的数量。</li>
</ul>
<p>原因如果仅仅修改一个文件但提交了十几个commit每个commit只做了少量的修改这会给评审人带来很大困扰。评审人需要逐一查看每个commit才能知道做了哪些修改且不排除commit之间的修改存在相互覆盖的情况。</p>
<p>建议每次提交时保持尽量少的commit可以通过git commit --amend补充上次的commit。对已经Push到远程仓库的多个commit可以参考<a href="https://stackoverflow.com/questions/5667884/how-to-squash-commits-in-git-after-they-have-been-pushed">squash commits after push</a></p>
<ul>
<li>请注意每个commit的名称应能反映当前commit的内容不能太随意。</li>
</ul>
<p>3如果解决了某个Issue的问题请在该Pull Request的第一个评论框中加上fix #issue_number这样当该Pull Request被合并后会自动关闭对应的Issue。关键词包括close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved请选择合适的词汇。详细可参考<a href="https://help.github.com/articles/closing-issues-via-commit-messages">Closing issues via commit messages</a></p>
<p>此外,在回复评审人意见时,请您遵守以下约定:</p>
<p>1官方维护人员的每一个review意见都希望得到回复这样会更好地提升开源社区的贡献。</p>
<ul>
<li>对评审意见同意且按其修改完的给个简单的Done即可</li>
<li>对评审意见不同意的,请给出您自己的反驳理由。</li>
</ul>
<p>2如果评审意见比较多:</p>
<ul>
<li>请给出总体的修改情况。</li>
<li>请采用<code>start a review</code>进行回复,而非直接回复的方式。原因是每个回复都会发送一封邮件,会造成邮件灾难。</li>
</ul>
<aside class="md-source-file">
<span class="md-source-file__fact">
<span class="md-icon" title="最后更新">
<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">2024年12月12日</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="创建日期">
<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">2024年12月12日</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="贡献者">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg>
</span>
<span>GitHub</span>
<nav>
<a href="https://github.com/SWHL" class="md-author" title="@SWHL">
<img src="https://avatars.githubusercontent.com/u/28639377?v=4&size=72" alt="SWHL">
</a>
<a href="https://github.com/web-flow" class="md-author" title="@web-flow">
<img src="https://avatars.githubusercontent.com/u/19864447?v=4&size=72" alt="web-flow">
</a>
</nav>
</span>
</aside>
<h2 id="__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>
回到页面顶部
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="community_contribution.html" class="md-footer__link md-footer__link--prev" aria-label="上一页: 社区贡献">
<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">
上一页
</span>
<div class="md-ellipsis">
社区贡献
</div>
</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 &copy; 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": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "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>