blob: 5de6721d9d702a3c56c8cfb83fdd537c267f77c8 [file]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<meta content="mxnet.image.image" property="og:title">
<meta content="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/og-logo.png" property="og:image">
<meta content="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/og-logo.png" property="og:image:secure_url">
<meta content="mxnet.image.image" property="og:description"/>
<title>mxnet.image.image — mxnet documentation</title>
<link crossorigin="anonymous" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="../../../_static/basic.css" rel="stylesheet" type="text/css">
<link href="../../../_static/pygments.css" rel="stylesheet" type="text/css">
<link href="../../../_static/mxnet.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script src="https://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>
<script src="../../../_static/underscore.js" type="text/javascript"></script>
<script src="../../../_static/searchtools_custom.js" type="text/javascript"></script>
<script src="../../../_static/doctools.js" type="text/javascript"></script>
<script src="../../../_static/selectlang.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
<script type="text/javascript"> jQuery(function() { Search.loadIndex("/versions/0.11.0/searchindex.js"); Search.init();}); </script>
<!-- -->
<!-- <script type="text/javascript" src="../../../_static/jquery.js"></script> -->
<!-- -->
<!-- <script type="text/javascript" src="../../../_static/underscore.js"></script> -->
<!-- -->
<!-- <script type="text/javascript" src="../../../_static/doctools.js"></script> -->
<!-- -->
<!-- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> -->
<!-- -->
<link href="../../../genindex.html" rel="index" title="Index">
<link href="../../../search.html" rel="search" title="Search"/>
<link href="../../index.html" rel="up" title="Module code"/>
<link href="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet-icon.png" rel="icon" type="image/png"/>
</link></link></link></meta></meta></meta></head>
<body background="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet-background-compressed.jpeg" role="document">
<div class="content-block"><div class="navbar navbar-fixed-top">
<div class="container" id="navContainer">
<div class="innder" id="header-inner">
<h1 id="logo-wrap">
<a href="../../../" id="logo"><img src="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet_logo.png"/></a>
</h1>
<nav class="nav-bar" id="main-nav">
<a class="main-nav-link" href="/versions/0.11.0/get_started/install.html">Install</a>
<span id="dropdown-menu-position-anchor">
<a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Gluon <span class="caret"></span></a>
<ul class="dropdown-menu navbar-menu" id="package-dropdown-menu">
<li><a class="main-nav-link" href="/versions/0.11.0/tutorials/gluon/gluon.html">About</a></li>
<li><a class="main-nav-link" href="https://www.d2l.ai/">Dive into Deep Learning</a></li>
<li><a class="main-nav-link" href="https://gluon-cv.mxnet.io">GluonCV Toolkit</a></li>
<li><a class="main-nav-link" href="https://gluon-nlp.mxnet.io/">GluonNLP Toolkit</a></li>
</ul>
</span>
<span id="dropdown-menu-position-anchor">
<a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">API <span class="caret"></span></a>
<ul class="dropdown-menu navbar-menu" id="package-dropdown-menu">
<li><a class="main-nav-link" href="/versions/0.11.0/api/python/index.html">Python</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/c++/index.html">C++</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/julia/index.html">Julia</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/perl/index.html">Perl</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/r/index.html">R</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/scala/index.html">Scala</a></li>
</ul>
</span>
<span id="dropdown-menu-position-anchor-docs">
<a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Docs <span class="caret"></span></a>
<ul class="dropdown-menu navbar-menu" id="package-dropdown-menu-docs">
<li><a class="main-nav-link" href="/versions/0.11.0/how_to/faq.html">FAQ</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/tutorials/index.html">Tutorials</a>
<li><a class="main-nav-link" href="https://github.com/apache/incubator-mxnet/tree/v0.11.0/example">Examples</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/architecture/index.html">Architecture</a></li>
<li><a class="main-nav-link" href="https://cwiki.apache.org/confluence/display/MXNET/Apache+MXNet+Home">Developer Wiki</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/model_zoo/index.html">Model Zoo</a></li>
<li><a class="main-nav-link" href="https://github.com/onnx/onnx-mxnet">ONNX</a></li>
</li></ul>
</span>
<span id="dropdown-menu-position-anchor-community">
<a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Community <span class="caret"></span></a>
<ul class="dropdown-menu navbar-menu" id="package-dropdown-menu-community">
<li><a class="main-nav-link" href="http://discuss.mxnet.io">Forum</a></li>
<li><a class="main-nav-link" href="https://github.com/apache/incubator-mxnet/tree/v0.11.0">Github</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/community/contribute.html">Contribute</a></li>
</ul>
</span>
<span id="dropdown-menu-position-anchor-version" style="position: relative"><a href="#" class="main-nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">0.11.0<span class="caret"></span></a><ul id="package-dropdown-menu" class="dropdown-menu"><li><a href="/">master</a></li><li><a href="/versions/1.7.0/">1.7.0</a></li><li><a href=/versions/1.6.0/>1.6.0</a></li><li><a href=/versions/1.5.0/>1.5.0</a></li><li><a href=/versions/1.4.1/>1.4.1</a></li><li><a href=/versions/1.3.1/>1.3.1</a></li><li><a href=/versions/1.2.1/>1.2.1</a></li><li><a href=/versions/1.1.0/>1.1.0</a></li><li><a href=/versions/1.0.0/>1.0.0</a></li><li><a href=/versions/0.12.1/>0.12.1</a></li><li><a href=/versions/0.11.0/>0.11.0</a></li></ul></span></nav>
<script> function getRootPath(){ return "../../../" } </script>
<div class="burgerIcon dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">☰</a>
<ul class="dropdown-menu" id="burgerMenu">
<li><a href="/versions/0.11.0/get_started/install.html">Install</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/tutorials/index.html">Tutorials</a></li>
<li class="dropdown-submenu dropdown">
<a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">Gluon</a>
<ul class="dropdown-menu navbar-menu" id="package-dropdown-menu">
<li><a class="main-nav-link" href="/versions/0.11.0/tutorials/gluon/gluon.html">About</a></li>
<li><a class="main-nav-link" href="http://gluon.mxnet.io">The Straight Dope (Tutorials)</a></li>
<li><a class="main-nav-link" href="https://gluon-cv.mxnet.io">GluonCV Toolkit</a></li>
<li><a class="main-nav-link" href="https://gluon-nlp.mxnet.io/">GluonNLP Toolkit</a></li>
</ul>
</li>
<li class="dropdown-submenu">
<a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">API</a>
<ul class="dropdown-menu">
<li><a class="main-nav-link" href="/versions/0.11.0/api/python/index.html">Python</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/c++/index.html">C++</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/julia/index.html">Julia</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/perl/index.html">Perl</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/r/index.html">R</a></li>
<li><a class="main-nav-link" href="/versions/0.11.0/api/scala/index.html">Scala</a></li>
</ul>
</li>
<li class="dropdown-submenu">
<a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">Docs</a>
<ul class="dropdown-menu">
<li><a href="/versions/0.11.0/how_to/faq.html" tabindex="-1">FAQ</a></li>
<li><a href="/versions/0.11.0/tutorials/index.html" tabindex="-1">Tutorials</a></li>
<li><a href="https://github.com/apache/incubator-mxnet/tree/v0.11.0/example" tabindex="-1">Examples</a></li>
<li><a href="/versions/0.11.0/architecture/index.html" tabindex="-1">Architecture</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/MXNET/Apache+MXNet+Home" tabindex="-1">Developer Wiki</a></li>
<li><a href="/versions/0.11.0/model_zoo/index.html" tabindex="-1">Gluon Model Zoo</a></li>
<li><a href="https://github.com/onnx/onnx-mxnet" tabindex="-1">ONNX</a></li>
</ul>
</li>
<li class="dropdown-submenu dropdown">
<a aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" role="button" tabindex="-1">Community</a>
<ul class="dropdown-menu">
<li><a href="http://discuss.mxnet.io" tabindex="-1">Forum</a></li>
<li><a href="https://github.com/apache/incubator-mxnet/tree/v0.11.0" tabindex="-1">Github</a></li>
<li><a href="/versions/0.11.0/community/contribute.html" tabindex="-1">Contribute</a></li>
</ul>
</li>
<li id="dropdown-menu-position-anchor-version-mobile" class="dropdown-submenu" style="position: relative"><a href="#" tabindex="-1">0.11.0</a><ul class="dropdown-menu"><li><a tabindex="-1" href=/>master</a></li><li><a tabindex="-1" href=/versions/1.6.0/>1.6.0</a></li><li><a tabindex="-1" href=/versions/1.5.0/>1.5.0</a></li><li><a tabindex="-1" href=/versions/1.4.1/>1.4.1</a></li><li><a tabindex="-1" href=/versions/1.3.1/>1.3.1</a></li><li><a tabindex="-1" href=/versions/1.2.1/>1.2.1</a></li><li><a tabindex="-1" href=/versions/1.1.0/>1.1.0</a></li><li><a tabindex="-1" href=/versions/1.0.0/>1.0.0</a></li><li><a tabindex="-1" href=/versions/0.12.1/>0.12.1</a></li><li><a tabindex="-1" href=/versions/0.11.0/>0.11.0</a></li></ul></li></ul>
</div>
<div class="plusIcon dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"><span aria-hidden="true" class="glyphicon glyphicon-plus"></span></a>
<ul class="dropdown-menu dropdown-menu-right" id="plusMenu"></ul>
</div>
<div id="search-input-wrap">
<form action="../../../search.html" autocomplete="off" class="" method="get" role="search">
<div class="form-group inner-addon left-addon">
<i class="glyphicon glyphicon-search"></i>
<input class="form-control" name="q" placeholder="Search" type="text"/>
</div>
<input name="check_keywords" type="hidden" value="yes">
<input name="area" type="hidden" value="default"/>
</input></form>
<div id="search-preview"></div>
</div>
<div id="searchIcon">
<span aria-hidden="true" class="glyphicon glyphicon-search"></span>
</div>
<!-- <div id="lang-select-wrap"> -->
<!-- <label id="lang-select-label"> -->
<!-- <\!-- <i class="fa fa-globe"></i> -\-> -->
<!-- <span></span> -->
<!-- </label> -->
<!-- <select id="lang-select"> -->
<!-- <option value="en">Eng</option> -->
<!-- <option value="zh">中文</option> -->
<!-- </select> -->
<!-- </div> -->
<!-- <a id="mobile-nav-toggle">
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
</a> -->
</div>
</div>
</div>
<script type="text/javascript">
$('body').css('background', 'white');
</script>
<div class="container">
<div class="row">
<div aria-label="main navigation" class="sphinxsidebar leftsidebar" role="navigation">
<div class="sphinxsidebarwrapper">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../api/python/index.html">Python Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../api/r/index.html">R Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../api/julia/index.html">Julia Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../api/c++/index.html">C++ Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../api/scala/index.html">Scala Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../api/perl/index.html">Perl Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../how_to/index.html">HowTo Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../architecture/index.html">System Documents</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../tutorials/index.html">Tutorials</a></li>
</ul>
</div>
</div>
<div class="content">
<div class="page-tracker"></div>
<h1>Source code for mxnet.image.image</h1><div class="highlight"><pre>
<span></span><span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="c1"># or more contributor license agreements. See the NOTICE file</span>
<span class="c1"># distributed with this work for additional information</span>
<span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
<span class="c1"># "License"); you may not use this file except in compliance</span>
<span class="c1"># with the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
<span class="c1"># software distributed under the License is distributed on an</span>
<span class="c1"># "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
<span class="c1"># KIND, either express or implied. See the License for the</span>
<span class="c1"># specific language governing permissions and limitations</span>
<span class="c1"># under the License.</span>
<span class="c1"># pylint: disable=no-member, too-many-lines, redefined-builtin, protected-access, unused-import, invalid-name</span>
<span class="c1"># pylint: disable=too-many-arguments, too-many-locals, no-name-in-module, too-many-branches, too-many-statements</span>
<span class="sd">"""Read individual image files and perform augmentations."""</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">cv2</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="n">cv2</span> <span class="o">=</span> <span class="kc">None</span>
<span class="kn">from</span> <span class="nn">..base</span> <span class="k">import</span> <span class="n">numeric_types</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="k">import</span> <span class="n">ndarray</span> <span class="k">as</span> <span class="n">nd</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="k">import</span> <span class="n">_ndarray_internal</span> <span class="k">as</span> <span class="n">_internal</span>
<span class="kn">from</span> <span class="nn">.._ndarray_internal</span> <span class="k">import</span> <span class="n">_cvimresize</span> <span class="k">as</span> <span class="n">imresize</span>
<span class="kn">from</span> <span class="nn">.._ndarray_internal</span> <span class="k">import</span> <span class="n">_cvcopyMakeBorder</span> <span class="k">as</span> <span class="n">copyMakeBorder</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="k">import</span> <span class="n">io</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="k">import</span> <span class="n">recordio</span>
<span class="k">def</span> <span class="nf">imread</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">"""Read and decode an image to an NDArray.</span>
<span class="sd"> Note: `imread` uses OpenCV (not the CV2 Python library).</span>
<span class="sd"> MXNet must have been built with USE_OPENCV=1 for `imdecode` to work.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> filename : str</span>
<span class="sd"> Name of the image file to be loaded.</span>
<span class="sd"> flag : {0, 1}, default 1</span>
<span class="sd"> 1 for three channel color output. 0 for grayscale output.</span>
<span class="sd"> to_rgb : bool, default True</span>
<span class="sd"> True for RGB formatted output (MXNet default).</span>
<span class="sd"> False for BGR formatted output (OpenCV default).</span>
<span class="sd"> out : NDArray, optional</span>
<span class="sd"> Output buffer. Use `None` for automatic allocation.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the image.</span>
<span class="sd"> Example</span>
<span class="sd"> -------</span>
<span class="sd"> >>> mx.img.imread("flower.jpg")</span>
<span class="sd"> <NDArray 224x224x3 @cpu(0)></span>
<span class="sd"> Set `flag` parameter to 0 to get grayscale output</span>
<span class="sd"> >>> mx.img.imdecode("flower.jpg", flag=0)</span>
<span class="sd"> <NDArray 224x224x1 @cpu(0)></span>
<span class="sd"> Set `to_rgb` parameter to 0 to get output in OpenCV format (BGR)</span>
<span class="sd"> >>> mx.img.imdecode(str_image, to_rgb=0)</span>
<span class="sd"> <NDArray 224x224x3 @cpu(0)></span>
<span class="sd"> """</span>
<span class="k">return</span> <span class="n">_internal</span><span class="o">.</span><span class="n">_cvimread</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">imdecode</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">"""Decode an image to an NDArray.</span>
<span class="sd"> Note: `imdecode` uses OpenCV (not the CV2 Python library).</span>
<span class="sd"> MXNet must have been built with USE_OPENCV=1 for `imdecode` to work.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> buf : str/bytes or numpy.ndarray</span>
<span class="sd"> Binary image data as string or numpy ndarray.</span>
<span class="sd"> flag : int, optional, default=1</span>
<span class="sd"> 1 for three channel color output. 0 for grayscale output.</span>
<span class="sd"> to_rgb : int, optional, default=1</span>
<span class="sd"> 1 for RGB formatted output (MXNet default). 0 for BGR formatted output (OpenCV default).</span>
<span class="sd"> out : NDArray, optional</span>
<span class="sd"> Output buffer. Use `None` for automatic allocation.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the image.</span>
<span class="sd"> Example</span>
<span class="sd"> -------</span>
<span class="sd"> >>> with open("flower.jpg", 'rb') as fp:</span>
<span class="sd"> ... str_image = fp.read()</span>
<span class="sd"> ...</span>
<span class="sd"> >>> image = mx.img.imdecode(str_image)</span>
<span class="sd"> >>> image</span>
<span class="sd"> <NDArray 224x224x3 @cpu(0)></span>
<span class="sd"> Set `flag` parameter to 0 to get grayscale output</span>
<span class="sd"> >>> with open("flower.jpg", 'rb') as fp:</span>
<span class="sd"> ... str_image = fp.read()</span>
<span class="sd"> ...</span>
<span class="sd"> >>> image = mx.img.imdecode(str_image, flag=0)</span>
<span class="sd"> >>> image</span>
<span class="sd"> <NDArray 224x224x1 @cpu(0)></span>
<span class="sd"> Set `to_rgb` parameter to 0 to get output in OpenCV format (BGR)</span>
<span class="sd"> >>> with open("flower.jpg", 'rb') as fp:</span>
<span class="sd"> ... str_image = fp.read()</span>
<span class="sd"> ...</span>
<span class="sd"> >>> image = mx.img.imdecode(str_image, to_rgb=0)</span>
<span class="sd"> >>> image</span>
<span class="sd"> <NDArray 224x224x3 @cpu(0)></span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">nd</span><span class="o">.</span><span class="n">NDArray</span><span class="p">):</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">uint8</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">uint8</span><span class="p">)</span>
<span class="k">return</span> <span class="n">_internal</span><span class="o">.</span><span class="n">_cvimdecode</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">scale_down</span><span class="p">(</span><span class="n">src_size</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="sd">"""Scales down crop size if it's larger than image size.</span>
<span class="sd"> If width/height of the crop is larger than the width/height of the image,</span>
<span class="sd"> sets the width/height to the width/height of the image.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src_size : tuple of int</span>
<span class="sd"> Size of the image in (width, height) format.</span>
<span class="sd"> size : tuple of int</span>
<span class="sd"> Size of the crop in (width, height) format.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> tuple of int</span>
<span class="sd"> A tuple containing the scaled crop size in (width, height) format.</span>
<span class="sd"> Example</span>
<span class="sd"> --------</span>
<span class="sd"> >>> src_size = (640,480)</span>
<span class="sd"> >>> size = (720,120)</span>
<span class="sd"> >>> new_size = mx.img.scale_down(src_size, size)</span>
<span class="sd"> >>> new_size</span>
<span class="sd"> (640,106)</span>
<span class="sd"> """</span>
<span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">size</span>
<span class="n">sw</span><span class="p">,</span> <span class="n">sh</span> <span class="o">=</span> <span class="n">src_size</span>
<span class="k">if</span> <span class="n">sh</span> <span class="o"><</span> <span class="n">h</span><span class="p">:</span>
<span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">w</span> <span class="o">*</span> <span class="n">sh</span><span class="p">)</span> <span class="o">/</span> <span class="n">h</span><span class="p">,</span> <span class="n">sh</span>
<span class="k">if</span> <span class="n">sw</span> <span class="o"><</span> <span class="n">w</span><span class="p">:</span>
<span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">sw</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="n">h</span> <span class="o">*</span> <span class="n">sw</span><span class="p">)</span> <span class="o">/</span> <span class="n">w</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">w</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">h</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_interp_method</span><span class="p">(</span><span class="n">interp</span><span class="p">,</span> <span class="n">sizes</span><span class="o">=</span><span class="p">()):</span>
<span class="sd">"""Get the interpolation method for resize functions.</span>
<span class="sd"> The major purpose of this function is to wrap a random interp method selection</span>
<span class="sd"> and a auto-estimation method.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> interp : int</span>
<span class="sd"> interpolation method for all resizing operations</span>
<span class="sd"> Possible values:</span>
<span class="sd"> 0: Nearest Neighbors Interpolation.</span>
<span class="sd"> 1: Bilinear interpolation.</span>
<span class="sd"> 2: Area-based (resampling using pixel area relation). It may be a</span>
<span class="sd"> preferred method for image decimation, as it gives moire-free</span>
<span class="sd"> results. But when the image is zoomed, it is similar to the Nearest</span>
<span class="sd"> Neighbors method. (used by default).</span>
<span class="sd"> 3: Bicubic interpolation over 4x4 pixel neighborhood.</span>
<span class="sd"> 4: Lanczos interpolation over 8x8 pixel neighborhood.</span>
<span class="sd"> 9: Cubic for enlarge, area for shrink, bilinear for others</span>
<span class="sd"> 10: Random select from interpolation method metioned above.</span>
<span class="sd"> Note:</span>
<span class="sd"> When shrinking an image, it will generally look best with AREA-based</span>
<span class="sd"> interpolation, whereas, when enlarging an image, it will generally look best</span>
<span class="sd"> with Bicubic (slow) or Bilinear (faster but still looks OK).</span>
<span class="sd"> More details can be found in the documentation of OpenCV, please refer to</span>
<span class="sd"> http://docs.opencv.org/master/da/d54/group__imgproc__transform.html.</span>
<span class="sd"> sizes : tuple of int</span>
<span class="sd"> (old_height, old_width, new_height, new_width), if None provided, auto(9)</span>
<span class="sd"> will return Area(2) anyway.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> int</span>
<span class="sd"> interp method from 0 to 4</span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="n">interp</span> <span class="o">==</span> <span class="mi">9</span><span class="p">:</span>
<span class="k">if</span> <span class="n">sizes</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">sizes</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span>
<span class="n">oh</span><span class="p">,</span> <span class="n">ow</span><span class="p">,</span> <span class="n">nh</span><span class="p">,</span> <span class="n">nw</span> <span class="o">=</span> <span class="n">sizes</span>
<span class="k">if</span> <span class="n">nh</span> <span class="o">></span> <span class="n">oh</span> <span class="ow">and</span> <span class="n">nw</span> <span class="o">></span> <span class="n">ow</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">2</span>
<span class="k">elif</span> <span class="n">nh</span> <span class="o"><</span> <span class="n">oh</span> <span class="ow">and</span> <span class="n">nw</span> <span class="o"><</span> <span class="n">ow</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">3</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">interp</span> <span class="o">==</span> <span class="mi">10</span><span class="p">:</span>
<span class="k">return</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interp</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'Unknown interp method </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="n">interp</span><span class="p">)</span>
<span class="k">return</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">resize_short</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Resizes shorter edge to size.</span>
<span class="sd"> Note: `resize_short` uses OpenCV (not the CV2 Python library).</span>
<span class="sd"> MXNet must have been built with OpenCV for `resize_short` to work.</span>
<span class="sd"> Resizes the original image by setting the shorter edge to size</span>
<span class="sd"> and setting the longer edge accordingly.</span>
<span class="sd"> Resizing function is called from OpenCV.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src : NDArray</span>
<span class="sd"> The original image.</span>
<span class="sd"> size : int</span>
<span class="sd"> The length to be set for the shorter edge.</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method used for resizing the image.</span>
<span class="sd"> Possible values:</span>
<span class="sd"> 0: Nearest Neighbors Interpolation.</span>
<span class="sd"> 1: Bilinear interpolation.</span>
<span class="sd"> 2: Area-based (resampling using pixel area relation). It may be a</span>
<span class="sd"> preferred method for image decimation, as it gives moire-free</span>
<span class="sd"> results. But when the image is zoomed, it is similar to the Nearest</span>
<span class="sd"> Neighbors method. (used by default).</span>
<span class="sd"> 3: Bicubic interpolation over 4x4 pixel neighborhood.</span>
<span class="sd"> 4: Lanczos interpolation over 8x8 pixel neighborhood.</span>
<span class="sd"> 9: Cubic for enlarge, area for shrink, bilinear for others</span>
<span class="sd"> 10: Random select from interpolation method metioned above.</span>
<span class="sd"> Note:</span>
<span class="sd"> When shrinking an image, it will generally look best with AREA-based</span>
<span class="sd"> interpolation, whereas, when enlarging an image, it will generally look best</span>
<span class="sd"> with Bicubic (slow) or Bilinear (faster but still looks OK).</span>
<span class="sd"> More details can be found in the documentation of OpenCV, please refer to</span>
<span class="sd"> http://docs.opencv.org/master/da/d54/group__imgproc__transform.html.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An 'NDArray' containing the resized image.</span>
<span class="sd"> Example</span>
<span class="sd"> -------</span>
<span class="sd"> >>> with open("flower.jpeg", 'rb') as fp:</span>
<span class="sd"> ... str_image = fp.read()</span>
<span class="sd"> ...</span>
<span class="sd"> >>> image = mx.img.imdecode(str_image)</span>
<span class="sd"> >>> image</span>
<span class="sd"> <NDArray 2321x3482x3 @cpu(0)></span>
<span class="sd"> >>> size = 640</span>
<span class="sd"> >>> new_image = mx.img.resize_short(image, size)</span>
<span class="sd"> >>> new_image</span>
<span class="sd"> <NDArray 2321x3482x3 @cpu(0)></span>
<span class="sd"> """</span>
<span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">shape</span>
<span class="k">if</span> <span class="n">h</span> <span class="o">></span> <span class="n">w</span><span class="p">:</span>
<span class="n">new_h</span><span class="p">,</span> <span class="n">new_w</span> <span class="o">=</span> <span class="n">size</span> <span class="o">*</span> <span class="n">h</span> <span class="o">//</span> <span class="n">w</span><span class="p">,</span> <span class="n">size</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">new_h</span><span class="p">,</span> <span class="n">new_w</span> <span class="o">=</span> <span class="n">size</span><span class="p">,</span> <span class="n">size</span> <span class="o">*</span> <span class="n">w</span> <span class="o">//</span> <span class="n">h</span>
<span class="k">return</span> <span class="n">imresize</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">_get_interp_method</span><span class="p">(</span><span class="n">interp</span><span class="p">,</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">,</span> <span class="n">new_w</span><span class="p">)))</span>
<span class="k">def</span> <span class="nf">fixed_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Crop src at fixed location, and (optionally) resize it to size.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src : NDArray</span>
<span class="sd"> Input image</span>
<span class="sd"> x0 : int</span>
<span class="sd"> Left boundary of the cropping area</span>
<span class="sd"> y0 : int</span>
<span class="sd"> Top boundary of the cropping area</span>
<span class="sd"> w : int</span>
<span class="sd"> Width of the cropping area</span>
<span class="sd"> h : int</span>
<span class="sd"> Height of the cropping area</span>
<span class="sd"> size : tuple of (w, h)</span>
<span class="sd"> Optional, resize to new size after cropping</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the cropped image.</span>
<span class="sd"> """</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">begin</span><span class="o">=</span><span class="p">(</span><span class="n">y0</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="p">(</span><span class="n">y0</span> <span class="o">+</span> <span class="n">h</span><span class="p">,</span> <span class="n">x0</span> <span class="o">+</span> <span class="n">w</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">src</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">2</span><span class="p">])))</span>
<span class="k">if</span> <span class="n">size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span> <span class="o">!=</span> <span class="n">size</span><span class="p">:</span>
<span class="n">sizes</span> <span class="o">=</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">imresize</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">_get_interp_method</span><span class="p">(</span><span class="n">interp</span><span class="p">,</span> <span class="n">sizes</span><span class="p">))</span>
<span class="k">return</span> <span class="n">out</span>
<span class="k">def</span> <span class="nf">random_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Randomly crop `src` with `size` (width, height).</span>
<span class="sd"> Upsample result if `src` is smaller than `size`.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src: Source image `NDArray`</span>
<span class="sd"> size: Size of the crop formatted as (width, height). If the `size` is larger</span>
<span class="sd"> than the image, then the source image is upsampled to `size` and returned.</span>
<span class="sd"> interp: int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the cropped image.</span>
<span class="sd"> Tuple</span>
<span class="sd"> A tuple (x, y, width, height) where (x, y) is top-left position of the crop in the</span>
<span class="sd"> original image and (width, height) are the dimensions of the cropped image.</span>
<span class="sd"> Example</span>
<span class="sd"> -------</span>
<span class="sd"> >>> im = mx.nd.array(cv2.imread("flower.jpg"))</span>
<span class="sd"> >>> cropped_im, rect = mx.image.random_crop(im, (100, 100))</span>
<span class="sd"> >>> print cropped_im</span>
<span class="sd"> <NDArray 100x100x1 @cpu(0)></span>
<span class="sd"> >>> print rect</span>
<span class="sd"> (20, 21, 100, 100)</span>
<span class="sd"> """</span>
<span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">shape</span>
<span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span> <span class="o">=</span> <span class="n">scale_down</span><span class="p">((</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">),</span> <span class="n">size</span><span class="p">)</span>
<span class="n">x0</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">w</span> <span class="o">-</span> <span class="n">new_w</span><span class="p">)</span>
<span class="n">y0</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">h</span> <span class="o">-</span> <span class="n">new_h</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">fixed_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">center_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Crops the image `src` to the given `size` by trimming on all four</span>
<span class="sd"> sides and preserving the center of the image. Upsamples if `src` is smaller</span>
<span class="sd"> than `size`.</span>
<span class="sd"> .. note:: This requires MXNet to be compiled with USE_OPENCV.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src : NDArray</span>
<span class="sd"> Binary source image data.</span>
<span class="sd"> size : list or tuple of int</span>
<span class="sd"> The desired output image size.</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> The cropped image.</span>
<span class="sd"> Tuple</span>
<span class="sd"> (x, y, width, height) where x, y are the positions of the crop in the</span>
<span class="sd"> original image and width, height the dimensions of the crop.</span>
<span class="sd"> Example</span>
<span class="sd"> -------</span>
<span class="sd"> >>> with open("flower.jpg", 'rb') as fp:</span>
<span class="sd"> ... str_image = fp.read()</span>
<span class="sd"> ...</span>
<span class="sd"> >>> image = mx.image.imdecode(str_image)</span>
<span class="sd"> >>> image</span>
<span class="sd"> <NDArray 2321x3482x3 @cpu(0)></span>
<span class="sd"> >>> cropped_image, (x, y, width, height) = mx.image.center_crop(image, (1000, 500))</span>
<span class="sd"> >>> cropped_image</span>
<span class="sd"> <NDArray 500x1000x3 @cpu(0)></span>
<span class="sd"> >>> x, y, width, height</span>
<span class="sd"> (1241, 910, 1000, 500)</span>
<span class="sd"> """</span>
<span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">shape</span>
<span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span> <span class="o">=</span> <span class="n">scale_down</span><span class="p">((</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">),</span> <span class="n">size</span><span class="p">)</span>
<span class="n">x0</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">w</span> <span class="o">-</span> <span class="n">new_w</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">y0</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">h</span> <span class="o">-</span> <span class="n">new_h</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">fixed_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">color_normalize</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">mean</span><span class="p">,</span> <span class="n">std</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">"""Normalize src with mean and std.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src : NDArray</span>
<span class="sd"> Input image</span>
<span class="sd"> mean : NDArray</span>
<span class="sd"> RGB mean to be subtracted</span>
<span class="sd"> std : NDArray</span>
<span class="sd"> RGB standard deviation to be divided</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the normalized image.</span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="n">mean</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">src</span> <span class="o">-=</span> <span class="n">mean</span>
<span class="k">if</span> <span class="n">std</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">src</span> <span class="o">/=</span> <span class="n">std</span>
<span class="k">return</span> <span class="n">src</span>
<span class="k">def</span> <span class="nf">random_size_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">min_area</span><span class="p">,</span> <span class="n">ratio</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Randomly crop src with size. Randomize area and aspect ratio.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> src : NDArray</span>
<span class="sd"> Input image</span>
<span class="sd"> size : tuple of (int, int)</span>
<span class="sd"> Size of the crop formatted as (width, height).</span>
<span class="sd"> min_area : int</span>
<span class="sd"> Minimum area to be maintained after cropping</span>
<span class="sd"> ratio : tuple of (float, float)</span>
<span class="sd"> Aspect ratio range as (min_aspect_ratio, max_aspect_ratio)</span>
<span class="sd"> interp: int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> NDArray</span>
<span class="sd"> An `NDArray` containing the cropped image.</span>
<span class="sd"> Tuple</span>
<span class="sd"> A tuple (x, y, width, height) where (x, y) is top-left position of the crop in the</span>
<span class="sd"> original image and (width, height) are the dimensions of the cropped image.</span>
<span class="sd"> """</span>
<span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">shape</span>
<span class="n">area</span> <span class="o">=</span> <span class="n">h</span> <span class="o">*</span> <span class="n">w</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
<span class="n">target_area</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="n">min_area</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="o">*</span> <span class="n">area</span>
<span class="n">new_ratio</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">*</span><span class="n">ratio</span><span class="p">)</span>
<span class="n">new_w</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">target_area</span> <span class="o">*</span> <span class="n">new_ratio</span><span class="p">)))</span>
<span class="n">new_h</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">target_area</span> <span class="o">/</span> <span class="n">new_ratio</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o"><</span> <span class="mf">0.5</span><span class="p">:</span>
<span class="n">new_h</span><span class="p">,</span> <span class="n">new_w</span> <span class="o">=</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span>
<span class="k">if</span> <span class="n">new_w</span> <span class="o"><=</span> <span class="n">w</span> <span class="ow">and</span> <span class="n">new_h</span> <span class="o"><=</span> <span class="n">h</span><span class="p">:</span>
<span class="n">x0</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">w</span> <span class="o">-</span> <span class="n">new_w</span><span class="p">)</span>
<span class="n">y0</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">h</span> <span class="o">-</span> <span class="n">new_h</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">fixed_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">new_w</span><span class="p">,</span> <span class="n">new_h</span><span class="p">)</span>
<span class="c1"># fall back to center_crop</span>
<span class="k">return</span> <span class="n">center_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="p">)</span>
<div class="viewcode-block" id="Augmenter"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.Augmenter">[docs]</a><span class="k">class</span> <span class="nc">Augmenter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">"""Image Augmenter base class"""</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">nd</span><span class="o">.</span><span class="n">NDArray</span><span class="p">):</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">asnumpy</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
<div class="viewcode-block" id="Augmenter.dumps"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.Augmenter.dumps">[docs]</a> <span class="k">def</span> <span class="nf">dumps</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Saves the Augmenter to string</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> str</span>
<span class="sd"> JSON formatted string that describes the Augmenter.</span>
<span class="sd"> """</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span><span class="p">])</span></div>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Abstract implementation body"""</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Must override implementation."</span><span class="p">)</span></div>
<div class="viewcode-block" id="ResizeAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ResizeAug">[docs]</a><span class="k">class</span> <span class="nc">ResizeAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Make resize shorter edge to size augmenter.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : int</span>
<span class="sd"> The length to be set for the shorter edge.</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ResizeAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">interp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interp</span> <span class="o">=</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">return</span> <span class="n">resize_short</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">interp</span><span class="p">)</span></div>
<div class="viewcode-block" id="ForceResizeAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ForceResizeAug">[docs]</a><span class="k">class</span> <span class="nc">ForceResizeAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Force resize to size regardless of aspect ratio</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : tuple of (int, int)</span>
<span class="sd"> The desired size as in (width, height)</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ForceResizeAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">interp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interp</span> <span class="o">=</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">sizes</span> <span class="o">=</span> <span class="p">(</span><span class="n">src</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">src</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">imresize</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">_get_interp_method</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interp</span><span class="p">,</span> <span class="n">sizes</span><span class="p">))</span></div>
<div class="viewcode-block" id="RandomCropAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.RandomCropAug">[docs]</a><span class="k">class</span> <span class="nc">RandomCropAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Make random crop augmenter</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : int</span>
<span class="sd"> The length to be set for the shorter edge.</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RandomCropAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">interp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interp</span> <span class="o">=</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">return</span> <span class="n">random_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">interp</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<div class="viewcode-block" id="RandomSizedCropAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.RandomSizedCropAug">[docs]</a><span class="k">class</span> <span class="nc">RandomSizedCropAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Make random crop with random resizing and random aspect ratio jitter augmenter.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : tuple of (int, int)</span>
<span class="sd"> Size of the crop formatted as (width, height).</span>
<span class="sd"> min_area : int</span>
<span class="sd"> Minimum area to be maintained after cropping</span>
<span class="sd"> ratio : tuple of (float, float)</span>
<span class="sd"> Aspect ratio range as (min_aspect_ratio, max_aspect_ratio)</span>
<span class="sd"> interp: int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">min_area</span><span class="p">,</span> <span class="n">ratio</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RandomSizedCropAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">min_area</span><span class="o">=</span><span class="n">min_area</span><span class="p">,</span>
<span class="n">ratio</span><span class="o">=</span><span class="n">ratio</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">interp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">min_area</span> <span class="o">=</span> <span class="n">min_area</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ratio</span> <span class="o">=</span> <span class="n">ratio</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interp</span> <span class="o">=</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">return</span> <span class="n">random_size_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_area</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ratio</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">interp</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<div class="viewcode-block" id="CenterCropAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.CenterCropAug">[docs]</a><span class="k">class</span> <span class="nc">CenterCropAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Make center crop augmenter.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : list or tuple of int</span>
<span class="sd"> The desired output image size.</span>
<span class="sd"> interp : int, optional, default=2</span>
<span class="sd"> Interpolation method. See resize_short for details.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">CenterCropAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">interp</span><span class="o">=</span><span class="n">interp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interp</span> <span class="o">=</span> <span class="n">interp</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">return</span> <span class="n">center_crop</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">interp</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<div class="viewcode-block" id="RandomOrderAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.RandomOrderAug">[docs]</a><span class="k">class</span> <span class="nc">RandomOrderAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Apply list of augmenters in random order</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> ts : list of augmenters</span>
<span class="sd"> A series of augmenters to be applied in random order</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RandomOrderAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ts</span> <span class="o">=</span> <span class="n">ts</span>
<span class="k">def</span> <span class="nf">dumps</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Override the default to avoid duplicate dump."""</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">dumps</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ts</span><span class="p">]]</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">random</span><span class="o">.</span><span class="n">shuffle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ts</span><span class="p">)</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ts</span><span class="p">:</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="BrightnessJitterAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.BrightnessJitterAug">[docs]</a><span class="k">class</span> <span class="nc">BrightnessJitterAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Random brightness jitter augmentation.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> brightness : float</span>
<span class="sd"> The brightness jitter ratio range, [0, 1]</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">brightness</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BrightnessJitterAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">brightness</span><span class="o">=</span><span class="n">brightness</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">brightness</span> <span class="o">=</span> <span class="n">brightness</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">alpha</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">brightness</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">brightness</span><span class="p">)</span>
<span class="n">src</span> <span class="o">*=</span> <span class="n">alpha</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="ContrastJitterAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ContrastJitterAug">[docs]</a><span class="k">class</span> <span class="nc">ContrastJitterAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Random contrast jitter augmentation.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> contrast : float</span>
<span class="sd"> The contrast jitter ratio range, [0, 1]</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contrast</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ContrastJitterAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">contrast</span><span class="o">=</span><span class="n">contrast</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">contrast</span> <span class="o">=</span> <span class="n">contrast</span>
<span class="bp">self</span><span class="o">.</span><span class="n">coef</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">([[[</span><span class="mf">0.299</span><span class="p">,</span> <span class="mf">0.587</span><span class="p">,</span> <span class="mf">0.114</span><span class="p">]]])</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">alpha</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">contrast</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">contrast</span><span class="p">)</span>
<span class="n">gray</span> <span class="o">=</span> <span class="n">src</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">coef</span>
<span class="n">gray</span> <span class="o">=</span> <span class="p">(</span><span class="mf">3.0</span> <span class="o">*</span> <span class="p">(</span><span class="mf">1.0</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">)</span> <span class="o">/</span> <span class="n">gray</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> <span class="o">*</span> <span class="n">nd</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">gray</span><span class="p">)</span>
<span class="n">src</span> <span class="o">*=</span> <span class="n">alpha</span>
<span class="n">src</span> <span class="o">+=</span> <span class="n">gray</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="SaturationJitterAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.SaturationJitterAug">[docs]</a><span class="k">class</span> <span class="nc">SaturationJitterAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Random saturation jitter augmentation.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> saturation : float</span>
<span class="sd"> The saturation jitter ratio range, [0, 1]</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">saturation</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">SaturationJitterAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">saturation</span><span class="o">=</span><span class="n">saturation</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">saturation</span> <span class="o">=</span> <span class="n">saturation</span>
<span class="bp">self</span><span class="o">.</span><span class="n">coef</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">([[[</span><span class="mf">0.299</span><span class="p">,</span> <span class="mf">0.587</span><span class="p">,</span> <span class="mf">0.114</span><span class="p">]]])</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">alpha</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">saturation</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">saturation</span><span class="p">)</span>
<span class="n">gray</span> <span class="o">=</span> <span class="n">src</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">coef</span>
<span class="n">gray</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">gray</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">keepdims</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">gray</span> <span class="o">*=</span> <span class="p">(</span><span class="mf">1.0</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">)</span>
<span class="n">src</span> <span class="o">*=</span> <span class="n">alpha</span>
<span class="n">src</span> <span class="o">+=</span> <span class="n">gray</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="HueJitterAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.HueJitterAug">[docs]</a><span class="k">class</span> <span class="nc">HueJitterAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Random hue jitter augmentation.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> hue : float</span>
<span class="sd"> The hue jitter ratio range, [0, 1]</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hue</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HueJitterAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">hue</span><span class="o">=</span><span class="n">hue</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hue</span> <span class="o">=</span> <span class="n">hue</span>
<span class="bp">self</span><span class="o">.</span><span class="n">tyiq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.299</span><span class="p">,</span> <span class="mf">0.587</span><span class="p">,</span> <span class="mf">0.114</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.596</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.274</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.321</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.211</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.523</span><span class="p">,</span> <span class="mf">0.311</span><span class="p">]])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ityiq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.956</span><span class="p">,</span> <span class="mf">0.621</span><span class="p">],</span>
<span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.272</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.647</span><span class="p">],</span>
<span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.107</span><span class="p">,</span> <span class="mf">1.705</span><span class="p">]])</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body.</span>
<span class="sd"> Using approximate linear transfomation described in:</span>
<span class="sd"> https://beesbuzz.biz/code/hsv_color_transforms.php</span>
<span class="sd"> """</span>
<span class="n">alpha</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">hue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">hue</span><span class="p">)</span>
<span class="n">vsu</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span>
<span class="n">vsw</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span>
<span class="n">bt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">vsu</span><span class="p">,</span> <span class="o">-</span><span class="n">vsw</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">vsw</span><span class="p">,</span> <span class="n">vsu</span><span class="p">]])</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tyiq</span><span class="p">,</span> <span class="n">bt</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">ityiq</span><span class="p">)</span><span class="o">.</span><span class="n">T</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">t</span><span class="p">))</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="ColorJitterAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ColorJitterAug">[docs]</a><span class="k">class</span> <span class="nc">ColorJitterAug</span><span class="p">(</span><span class="n">RandomOrderAug</span><span class="p">):</span>
<span class="sd">"""Apply random brightness, contrast and saturation jitter in random order.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> brightness : float</span>
<span class="sd"> The brightness jitter ratio range, [0, 1]</span>
<span class="sd"> contrast : float</span>
<span class="sd"> The contrast jitter ratio range, [0, 1]</span>
<span class="sd"> saturation : float</span>
<span class="sd"> The saturation jitter ratio range, [0, 1]</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">brightness</span><span class="p">,</span> <span class="n">contrast</span><span class="p">,</span> <span class="n">saturation</span><span class="p">):</span>
<span class="n">ts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">brightness</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">BrightnessJitterAug</span><span class="p">(</span><span class="n">brightness</span><span class="p">))</span>
<span class="k">if</span> <span class="n">contrast</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ContrastJitterAug</span><span class="p">(</span><span class="n">contrast</span><span class="p">))</span>
<span class="k">if</span> <span class="n">saturation</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">SaturationJitterAug</span><span class="p">(</span><span class="n">saturation</span><span class="p">))</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ColorJitterAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">ts</span><span class="p">)</span></div>
<div class="viewcode-block" id="LightingAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.LightingAug">[docs]</a><span class="k">class</span> <span class="nc">LightingAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Add PCA based noise.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> alphastd : float</span>
<span class="sd"> Noise level</span>
<span class="sd"> eigval : 3x1 np.array</span>
<span class="sd"> Eigen values</span>
<span class="sd"> eigvec : 3x3 np.array</span>
<span class="sd"> Eigen vectors</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alphastd</span><span class="p">,</span> <span class="n">eigval</span><span class="p">,</span> <span class="n">eigvec</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">LightingAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">alphastd</span><span class="o">=</span><span class="n">alphastd</span><span class="p">,</span> <span class="n">eigval</span><span class="o">=</span><span class="n">eigval</span><span class="p">,</span> <span class="n">eigvec</span><span class="o">=</span><span class="n">eigvec</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alphastd</span> <span class="o">=</span> <span class="n">alphastd</span>
<span class="bp">self</span><span class="o">.</span><span class="n">eigval</span> <span class="o">=</span> <span class="n">eigval</span>
<span class="bp">self</span><span class="o">.</span><span class="n">eigvec</span> <span class="o">=</span> <span class="n">eigvec</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">alpha</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">alphastd</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,))</span>
<span class="n">rgb</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eigvec</span> <span class="o">*</span> <span class="n">alpha</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">eigval</span><span class="p">)</span>
<span class="n">src</span> <span class="o">+=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">rgb</span><span class="p">)</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="ColorNormalizeAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ColorNormalizeAug">[docs]</a><span class="k">class</span> <span class="nc">ColorNormalizeAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Mean and std normalization.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> mean : NDArray</span>
<span class="sd"> RGB mean to be subtracted</span>
<span class="sd"> std : NDArray</span>
<span class="sd"> RGB standard deviation to be divided</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mean</span><span class="p">,</span> <span class="n">std</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ColorNormalizeAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">mean</span><span class="o">=</span><span class="n">mean</span><span class="p">,</span> <span class="n">std</span><span class="o">=</span><span class="n">std</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mean</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">mean</span><span class="p">)</span> <span class="k">if</span> <span class="n">mean</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">std</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">std</span><span class="p">)</span> <span class="k">if</span> <span class="n">std</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">return</span> <span class="n">color_normalize</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mean</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">std</span><span class="p">)</span></div>
<div class="viewcode-block" id="RandomGrayAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.RandomGrayAug">[docs]</a><span class="k">class</span> <span class="nc">RandomGrayAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Randomly convert to gray image.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> p : float</span>
<span class="sd"> Probability to convert to grayscale</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RandomGrayAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">p</span><span class="o">=</span><span class="n">p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mat</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.21</span><span class="p">,</span> <span class="mf">0.21</span><span class="p">,</span> <span class="mf">0.21</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.72</span><span class="p">,</span> <span class="mf">0.72</span><span class="p">,</span> <span class="mf">0.72</span><span class="p">],</span>
<span class="p">[</span><span class="mf">0.07</span><span class="p">,</span> <span class="mf">0.07</span><span class="p">,</span> <span class="mf">0.07</span><span class="p">]])</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mat</span><span class="p">)</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="HorizontalFlipAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.HorizontalFlipAug">[docs]</a><span class="k">class</span> <span class="nc">HorizontalFlipAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Random horizontal flip.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> p : float</span>
<span class="sd"> Probability to flip image horizontally</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HorizontalFlipAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">p</span><span class="o">=</span><span class="n">p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">flip</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">src</span></div>
<div class="viewcode-block" id="CastAug"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.CastAug">[docs]</a><span class="k">class</span> <span class="nc">CastAug</span><span class="p">(</span><span class="n">Augmenter</span><span class="p">):</span>
<span class="sd">"""Cast to float32"""</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">CastAug</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s1">'float32'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
<span class="sd">"""Augmenter body"""</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
<span class="k">return</span> <span class="n">src</span></div>
<span class="k">def</span> <span class="nf">CreateAugmenter</span><span class="p">(</span><span class="n">data_shape</span><span class="p">,</span> <span class="n">resize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">rand_crop</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">rand_resize</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">rand_mirror</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">mean</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">std</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">brightness</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">contrast</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">saturation</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">hue</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">pca_noise</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">rand_gray</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">inter_method</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">"""Creates an augmenter list.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> data_shape : tuple of int</span>
<span class="sd"> Shape for output data</span>
<span class="sd"> resize : int</span>
<span class="sd"> Resize shorter edge if larger than 0 at the begining</span>
<span class="sd"> rand_crop : bool</span>
<span class="sd"> Whether to enable random cropping other than center crop</span>
<span class="sd"> rand_resize : bool</span>
<span class="sd"> Whether to enable random sized cropping, require rand_crop to be enabled</span>
<span class="sd"> rand_gray : float</span>
<span class="sd"> [0, 1], probability to convert to grayscale for all channels, the number</span>
<span class="sd"> of channels will not be reduced to 1</span>
<span class="sd"> rand_mirror : bool</span>
<span class="sd"> Whether to apply horizontal flip to image with probability 0.5</span>
<span class="sd"> mean : np.ndarray or None</span>
<span class="sd"> Mean pixel values for [r, g, b]</span>
<span class="sd"> std : np.ndarray or None</span>
<span class="sd"> Standard deviations for [r, g, b]</span>
<span class="sd"> brightness : float</span>
<span class="sd"> Brightness jittering range (percent)</span>
<span class="sd"> contrast : float</span>
<span class="sd"> Contrast jittering range (percent)</span>
<span class="sd"> saturation : float</span>
<span class="sd"> Saturation jittering range (percent)</span>
<span class="sd"> hue : float</span>
<span class="sd"> Hue jittering range (percent)</span>
<span class="sd"> pca_noise : float</span>
<span class="sd"> Pca noise level (percent)</span>
<span class="sd"> inter_method : int, default=2(Area-based)</span>
<span class="sd"> Interpolation method for all resizing operations</span>
<span class="sd"> Possible values:</span>
<span class="sd"> 0: Nearest Neighbors Interpolation.</span>
<span class="sd"> 1: Bilinear interpolation.</span>
<span class="sd"> 2: Area-based (resampling using pixel area relation). It may be a</span>
<span class="sd"> preferred method for image decimation, as it gives moire-free</span>
<span class="sd"> results. But when the image is zoomed, it is similar to the Nearest</span>
<span class="sd"> Neighbors method. (used by default).</span>
<span class="sd"> 3: Bicubic interpolation over 4x4 pixel neighborhood.</span>
<span class="sd"> 4: Lanczos interpolation over 8x8 pixel neighborhood.</span>
<span class="sd"> 9: Cubic for enlarge, area for shrink, bilinear for others</span>
<span class="sd"> 10: Random select from interpolation method metioned above.</span>
<span class="sd"> Note:</span>
<span class="sd"> When shrinking an image, it will generally look best with AREA-based</span>
<span class="sd"> interpolation, whereas, when enlarging an image, it will generally look best</span>
<span class="sd"> with Bicubic (slow) or Bilinear (faster but still looks OK).</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> >>> # An example of creating multiple augmenters</span>
<span class="sd"> >>> augs = mx.image.CreateAugmenter(data_shape=(3, 300, 300), rand_mirror=True,</span>
<span class="sd"> ... mean=True, brightness=0.125, contrast=0.125, rand_gray=0.05,</span>
<span class="sd"> ... saturation=0.125, pca_noise=0.05, inter_method=10)</span>
<span class="sd"> >>> # dump the details</span>
<span class="sd"> >>> for aug in augs:</span>
<span class="sd"> ... aug.dumps()</span>
<span class="sd"> """</span>
<span class="n">auglist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">resize</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ResizeAug</span><span class="p">(</span><span class="n">resize</span><span class="p">,</span> <span class="n">inter_method</span><span class="p">))</span>
<span class="n">crop_size</span> <span class="o">=</span> <span class="p">(</span><span class="n">data_shape</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">data_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">rand_resize</span><span class="p">:</span>
<span class="k">assert</span> <span class="n">rand_crop</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">RandomSizedCropAug</span><span class="p">(</span><span class="n">crop_size</span><span class="p">,</span> <span class="mf">0.08</span><span class="p">,</span> <span class="p">(</span><span class="mf">3.0</span> <span class="o">/</span> <span class="mf">4.0</span><span class="p">,</span> <span class="mf">4.0</span> <span class="o">/</span> <span class="mf">3.0</span><span class="p">),</span> <span class="n">inter_method</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">rand_crop</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">RandomCropAug</span><span class="p">(</span><span class="n">crop_size</span><span class="p">,</span> <span class="n">inter_method</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">CenterCropAug</span><span class="p">(</span><span class="n">crop_size</span><span class="p">,</span> <span class="n">inter_method</span><span class="p">))</span>
<span class="k">if</span> <span class="n">rand_mirror</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">HorizontalFlipAug</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">CastAug</span><span class="p">())</span>
<span class="k">if</span> <span class="n">brightness</span> <span class="ow">or</span> <span class="n">contrast</span> <span class="ow">or</span> <span class="n">saturation</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ColorJitterAug</span><span class="p">(</span><span class="n">brightness</span><span class="p">,</span> <span class="n">contrast</span><span class="p">,</span> <span class="n">saturation</span><span class="p">))</span>
<span class="k">if</span> <span class="n">hue</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">HueJitterAug</span><span class="p">(</span><span class="n">hue</span><span class="p">))</span>
<span class="k">if</span> <span class="n">pca_noise</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">eigval</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">55.46</span><span class="p">,</span> <span class="mf">4.794</span><span class="p">,</span> <span class="mf">1.148</span><span class="p">])</span>
<span class="n">eigvec</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mf">0.5675</span><span class="p">,</span> <span class="mf">0.7192</span><span class="p">,</span> <span class="mf">0.4009</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="mf">0.5808</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.0045</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.8140</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="mf">0.5836</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.6948</span><span class="p">,</span> <span class="mf">0.4203</span><span class="p">]])</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">LightingAug</span><span class="p">(</span><span class="n">pca_noise</span><span class="p">,</span> <span class="n">eigval</span><span class="p">,</span> <span class="n">eigvec</span><span class="p">))</span>
<span class="k">if</span> <span class="n">rand_gray</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">RandomGrayAug</span><span class="p">(</span><span class="n">rand_gray</span><span class="p">))</span>
<span class="k">if</span> <span class="n">mean</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">123.68</span><span class="p">,</span> <span class="mf">116.28</span><span class="p">,</span> <span class="mf">103.53</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">mean</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mean</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span> <span class="ow">and</span> <span class="n">mean</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">std</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">std</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">58.395</span><span class="p">,</span> <span class="mf">57.12</span><span class="p">,</span> <span class="mf">57.375</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">std</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">std</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span> <span class="ow">and</span> <span class="n">std</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">mean</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">std</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">auglist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ColorNormalizeAug</span><span class="p">(</span><span class="n">mean</span><span class="p">,</span> <span class="n">std</span><span class="p">))</span>
<span class="k">return</span> <span class="n">auglist</span>
<div class="viewcode-block" id="ImageIter"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter">[docs]</a><span class="k">class</span> <span class="nc">ImageIter</span><span class="p">(</span><span class="n">io</span><span class="o">.</span><span class="n">DataIter</span><span class="p">):</span>
<span class="sd">"""Image data iterator with a large number of augmentation choices.</span>
<span class="sd"> This iterator supports reading from both .rec files and raw image files.</span>
<span class="sd"> To load input images from .rec files, use `path_imgrec` parameter and to load from raw image</span>
<span class="sd"> files, use `path_imglist` and `path_root` parameters.</span>
<span class="sd"> To use data partition (for distributed training) or shuffling, specify `path_imgidx` parameter.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> batch_size : int</span>
<span class="sd"> Number of examples per batch.</span>
<span class="sd"> data_shape : tuple</span>
<span class="sd"> Data shape in (channels, height, width) format.</span>
<span class="sd"> For now, only RGB image with 3 channels is supported.</span>
<span class="sd"> label_width : int, optional</span>
<span class="sd"> Number of labels per example. The default label width is 1.</span>
<span class="sd"> path_imgrec : str</span>
<span class="sd"> Path to image record file (.rec).</span>
<span class="sd"> Created with tools/im2rec.py or bin/im2rec.</span>
<span class="sd"> path_imglist : str</span>
<span class="sd"> Path to image list (.lst).</span>
<span class="sd"> Created with tools/im2rec.py or with custom script.</span>
<span class="sd"> Format: Tab separated record of index, one or more labels and relative_path_from_root.</span>
<span class="sd"> imglist: list</span>
<span class="sd"> A list of images with the label(s).</span>
<span class="sd"> Each item is a list [imagelabel: float or list of float, imgpath].</span>
<span class="sd"> path_root : str</span>
<span class="sd"> Root folder of image files.</span>
<span class="sd"> path_imgidx : str</span>
<span class="sd"> Path to image index file. Needed for partition and shuffling when using .rec source.</span>
<span class="sd"> shuffle : bool</span>
<span class="sd"> Whether to shuffle all images at the start of each iteration or not.</span>
<span class="sd"> Can be slow for HDD.</span>
<span class="sd"> part_index : int</span>
<span class="sd"> Partition index.</span>
<span class="sd"> num_parts : int</span>
<span class="sd"> Total number of partitions.</span>
<span class="sd"> data_name : str</span>
<span class="sd"> Data name for provided symbols.</span>
<span class="sd"> label_name : str</span>
<span class="sd"> Label name for provided symbols.</span>
<span class="sd"> kwargs : ...</span>
<span class="sd"> More arguments for creating augmenter. See mx.image.CreateAugmenter.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">,</span> <span class="n">data_shape</span><span class="p">,</span> <span class="n">label_width</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">path_imgrec</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path_imglist</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path_root</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path_imgidx</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">shuffle</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">part_index</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">num_parts</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">aug_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">imglist</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">data_name</span><span class="o">=</span><span class="s1">'data'</span><span class="p">,</span> <span class="n">label_name</span><span class="o">=</span><span class="s1">'softmax_label'</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ImageIter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">path_imgrec</span> <span class="ow">or</span> <span class="n">path_imglist</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">imglist</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span>
<span class="n">num_threads</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'MXNET_CPU_WORKER_NTHREADS'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'Using </span><span class="si">%s</span><span class="s1"> threads for decoding...'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">num_threads</span><span class="p">))</span>
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'Set enviroment variable MXNET_CPU_WORKER_NTHREADS to a'</span>
<span class="s1">' larger number to use more threads.'</span><span class="p">)</span>
<span class="n">class_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
<span class="k">if</span> <span class="n">path_imgrec</span><span class="p">:</span>
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: loading recordio </span><span class="si">%s</span><span class="s1">...'</span><span class="p">,</span>
<span class="n">class_name</span><span class="p">,</span> <span class="n">path_imgrec</span><span class="p">)</span>
<span class="k">if</span> <span class="n">path_imgidx</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="o">=</span> <span class="n">recordio</span><span class="o">.</span><span class="n">MXIndexedRecordIO</span><span class="p">(</span><span class="n">path_imgidx</span><span class="p">,</span> <span class="n">path_imgrec</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="c1"># pylint: disable=redefined-variable-type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgidx</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span><span class="o">.</span><span class="n">keys</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="o">=</span> <span class="n">recordio</span><span class="o">.</span><span class="n">MXRecordIO</span><span class="p">(</span><span class="n">path_imgrec</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="c1"># pylint: disable=redefined-variable-type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgidx</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">path_imglist</span><span class="p">:</span>
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: loading image list </span><span class="si">%s</span><span class="s1">...'</span><span class="p">,</span> <span class="n">class_name</span><span class="p">,</span> <span class="n">path_imglist</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path_imglist</span><span class="p">)</span> <span class="k">as</span> <span class="n">fin</span><span class="p">:</span>
<span class="n">imglist</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">imgkeys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="n">fin</span><span class="o">.</span><span class="n">readline</span><span class="p">,</span> <span class="s1">''</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">float</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]])</span>
<span class="n">key</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">imglist</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">line</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">imgkeys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imglist</span> <span class="o">=</span> <span class="n">imglist</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">imglist</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: loading image list...'</span><span class="p">,</span> <span class="n">class_name</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">imgkeys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">for</span> <span class="n">img</span> <span class="ow">in</span> <span class="n">imglist</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">index</span><span class="p">)</span> <span class="c1"># pylint: disable=redefined-variable-type</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">img</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">img</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">img</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">numeric_types</span><span class="p">):</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">img</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">img</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">img</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">imgkeys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imglist</span> <span class="o">=</span> <span class="n">result</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imglist</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">path_root</span> <span class="o">=</span> <span class="n">path_root</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_data_shape</span><span class="p">(</span><span class="n">data_shape</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">provide_data</span> <span class="o">=</span> <span class="p">[(</span><span class="n">data_name</span><span class="p">,</span> <span class="p">(</span><span class="n">batch_size</span><span class="p">,)</span> <span class="o">+</span> <span class="n">data_shape</span><span class="p">)]</span>
<span class="k">if</span> <span class="n">label_width</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">provide_label</span> <span class="o">=</span> <span class="p">[(</span><span class="n">label_name</span><span class="p">,</span> <span class="p">(</span><span class="n">batch_size</span><span class="p">,</span> <span class="n">label_width</span><span class="p">))]</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">provide_label</span> <span class="o">=</span> <span class="p">[(</span><span class="n">label_name</span><span class="p">,</span> <span class="p">(</span><span class="n">batch_size</span><span class="p">,))]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_shape</span> <span class="o">=</span> <span class="n">data_shape</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label_width</span> <span class="o">=</span> <span class="n">label_width</span>
<span class="bp">self</span><span class="o">.</span><span class="n">shuffle</span> <span class="o">=</span> <span class="n">shuffle</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">seq</span> <span class="o">=</span> <span class="n">imgkeys</span>
<span class="k">elif</span> <span class="n">shuffle</span> <span class="ow">or</span> <span class="n">num_parts</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgidx</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">seq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgidx</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">seq</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">num_parts</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="k">assert</span> <span class="n">part_index</span> <span class="o"><</span> <span class="n">num_parts</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">seq</span><span class="p">)</span>
<span class="n">C</span> <span class="o">=</span> <span class="n">N</span> <span class="o">//</span> <span class="n">num_parts</span>
<span class="bp">self</span><span class="o">.</span><span class="n">seq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seq</span><span class="p">[</span><span class="n">part_index</span> <span class="o">*</span> <span class="n">C</span><span class="p">:(</span><span class="n">part_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">C</span><span class="p">]</span>
<span class="k">if</span> <span class="n">aug_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">auglist</span> <span class="o">=</span> <span class="n">CreateAugmenter</span><span class="p">(</span><span class="n">data_shape</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">auglist</span> <span class="o">=</span> <span class="n">aug_list</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
<div class="viewcode-block" id="ImageIter.reset"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.reset">[docs]</a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Resets the iterator to the beginning of the data."""</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">shuffle</span><span class="p">:</span>
<span class="n">random</span><span class="o">.</span><span class="n">shuffle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">seq</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur</span> <span class="o">=</span> <span class="mi">0</span></div>
<div class="viewcode-block" id="ImageIter.next_sample"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.next_sample">[docs]</a> <span class="k">def</span> <span class="nf">next_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Helper function for reading in next sample."""</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">seq</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cur</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">seq</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">StopIteration</span>
<span class="n">idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seq</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">cur</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span><span class="o">.</span><span class="n">read_idx</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span>
<span class="n">header</span><span class="p">,</span> <span class="n">img</span> <span class="o">=</span> <span class="n">recordio</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imglist</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">header</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">img</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">imglist</span><span class="p">[</span><span class="n">idx</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">img</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">label</span><span class="p">,</span> <span class="n">fname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">imglist</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
<span class="k">return</span> <span class="n">label</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_image</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">imgrec</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">if</span> <span class="n">s</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">StopIteration</span>
<span class="n">header</span><span class="p">,</span> <span class="n">img</span> <span class="o">=</span> <span class="n">recordio</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="k">return</span> <span class="n">header</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">img</span></div>
<div class="viewcode-block" id="ImageIter.next"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.next">[docs]</a> <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""Returns the next batch of data."""</span>
<span class="n">batch_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span>
<span class="n">c</span><span class="p">,</span> <span class="n">h</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_shape</span>
<span class="n">batch_data</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">empty</span><span class="p">((</span><span class="n">batch_size</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">))</span>
<span class="n">batch_label</span> <span class="o">=</span> <span class="n">nd</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">provide_label</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">while</span> <span class="n">i</span> <span class="o"><</span> <span class="n">batch_size</span><span class="p">:</span>
<span class="n">label</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next_sample</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">imdecode</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_valid_image</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">'Invalid image, skipping: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">continue</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">augmentation_transform</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">i</span> <span class="o"><</span> <span class="n">batch_size</span><span class="p">,</span> <span class="s1">'Batch size must be multiples of augmenter output length'</span>
<span class="n">batch_data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">postprocess_data</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">batch_label</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">i</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">StopIteration</span>
<span class="k">return</span> <span class="n">io</span><span class="o">.</span><span class="n">DataBatch</span><span class="p">([</span><span class="n">batch_data</span><span class="p">],</span> <span class="p">[</span><span class="n">batch_label</span><span class="p">],</span> <span class="n">batch_size</span> <span class="o">-</span> <span class="n">i</span><span class="p">)</span></div>
<div class="viewcode-block" id="ImageIter.check_data_shape"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.check_data_shape">[docs]</a> <span class="k">def</span> <span class="nf">check_data_shape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_shape</span><span class="p">):</span>
<span class="sd">"""Checks if the input data shape is valid"""</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'data_shape should have length 3, with dimensions CxHxW'</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">data_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'This iterator expects inputs to have 3 channels.'</span><span class="p">)</span></div>
<div class="viewcode-block" id="ImageIter.check_valid_image"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.check_valid_image">[docs]</a> <span class="k">def</span> <span class="nf">check_valid_image</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">"""Checks if the input data is valid"""</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s1">'Data shape is wrong'</span><span class="p">)</span></div>
<div class="viewcode-block" id="ImageIter.imdecode"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.imdecode">[docs]</a> <span class="k">def</span> <span class="nf">imdecode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
<span class="sd">"""Decodes a string or byte string to an NDArray.</span>
<span class="sd"> See mx.img.imdecode for more details."""</span>
<span class="k">return</span> <span class="n">imdecode</span><span class="p">(</span><span class="n">s</span><span class="p">)</span></div>
<div class="viewcode-block" id="ImageIter.read_image"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.read_image">[docs]</a> <span class="k">def</span> <span class="nf">read_image</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fname</span><span class="p">):</span>
<span class="sd">"""Reads an input image `fname` and returns the decoded raw bytes.</span>
<span class="sd"> Example usage:</span>
<span class="sd"> ----------</span>
<span class="sd"> >>> dataIter.read_image('Face.jpg') # returns decoded raw bytes.</span>
<span class="sd"> """</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_root</span><span class="p">,</span> <span class="n">fname</span><span class="p">),</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fin</span><span class="p">:</span>
<span class="n">img</span> <span class="o">=</span> <span class="n">fin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">return</span> <span class="n">img</span></div>
<div class="viewcode-block" id="ImageIter.augmentation_transform"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.augmentation_transform">[docs]</a> <span class="k">def</span> <span class="nf">augmentation_transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">"""Transforms input data with specified augmentation."""</span>
<span class="k">for</span> <span class="n">aug</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">auglist</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">aug</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span></div>
<div class="viewcode-block" id="ImageIter.postprocess_data"><a class="viewcode-back" href="../../../api/python/image.html#mxnet.image.ImageIter.postprocess_data">[docs]</a> <span class="k">def</span> <span class="nf">postprocess_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datum</span><span class="p">):</span>
<span class="sd">"""Final postprocessing step before image is loaded into the batch."""</span>
<span class="k">return</span> <span class="n">nd</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">datum</span><span class="p">,</span> <span class="n">axes</span><span class="o">=</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span></div></div>
</pre></div>
</div>
</div>
<div aria-label="main navigation" class="sphinxsidebar rightsidebar" role="navigation">
<div class="sphinxsidebarwrapper">
</div>
</div>
</div><div class="footer">
<div class="section-disclaimer">
<div class="container">
<div>
<img height="60" src="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/apache_incubator_logo.png"/>
<p>
Apache MXNet is an effort undergoing incubation at The Apache Software Foundation (ASF), <strong>sponsored by the <i>Apache Incubator</i></strong>. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p>
<p>
"Copyright © 2017-2018, The Apache Software Foundation
Apache MXNet, MXNet, Apache, the Apache feather, and the Apache MXNet project logo are either registered trademarks or trademarks of the Apache Software Foundation."
</p>
</div>
</div>
</div>
</div> <!-- pagename != index -->
</div>
<script crossorigin="anonymous" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="../../../_static/js/sidebar.js" type="text/javascript"></script>
<script src="../../../_static/js/search.js" type="text/javascript"></script>
<script src="../../../_static/js/navbar.js" type="text/javascript"></script>
<script src="../../../_static/js/clipboard.min.js" type="text/javascript"></script>
<script src="../../../_static/js/copycode.js" type="text/javascript"></script>
<script src="../../../_static/js/page.js" type="text/javascript"></script>
<script src="../../../_static/js/docversion.js" type="text/javascript"></script>
<script type="text/javascript">
$('body').ready(function () {
$('body').css('visibility', 'visible');
});
</script>
</body>
</html>