[{"data":1,"prerenderedAt":50},["ShallowReactive",2],{"post-ddce6477":3},{"abbrlink":4,"title":5,"date":6,"categories":7,"tags":9,"excerpt":12,"html":13,"toc":14},"ddce6477","制作目标检测数据集常用python脚本整理","2022-04-09",[8],"懵逼的深度学习",[10,11],"python","数据集","摘要 制作个人目标检测数据集时，有查找爬取的错误图片，更改标注路径等等需要，写了以下python脚本","\u003Ch2 id=\"post-heading-摘要\">摘要\u003C\u002Fh2>\n\u003Cp>制作个人目标检测数据集时，有查找爬取的错误图片，更改标注路径等等需要，写了以下python脚本\u003C\u002Fp>\n\u003Ch2 id=\"post-heading-代码\">代码\u003C\u002Fh2>\n\u003Ch3 id=\"post-heading-查找错误图片\">查找错误图片\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003Cspan>27\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> imghdr\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> progressbar \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> ProgressBar\n\npath =\u003Cspan class=\"hljs-string\">&#x27;.\u002FJPEGImages&#x27;\u003C\u002Fspan>\noriginal_images =[]\n\n\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> root, dirs, filenames \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> os.walk(path):\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> filename \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filenames:\n        original_images.append(os.path.join(root, filename))\n\noriginal_images = \u003Cspan class=\"hljs-built_in\">sorted\u003C\u002Fspan>(original_images)\n\u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&#x27;num:&#x27;\u003C\u002Fspan>,\u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(original_images))\nf = \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&#x27;check_error.txt&#x27;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&#x27;w+&#x27;\u003C\u002Fspan>)\nerror_images =[]\nprogress = ProgressBar()\n\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> filename \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> progress(original_images):\n    check = imghdr.what(filename)\n    \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> check == \u003Cspan class=\"hljs-literal\">None\u003C\u002Fspan>:\n        f.write(filename)\n        f.write(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C\u002Fspan>)\n        error_images.append(filename)\n\u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(error_images))\nf.seek(\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>)\n\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> s \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> f:\n    \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(s)\nf.close()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-按顺序重命名标注文件和图片-分成两部分防止图片和标注文件数量不一致\">按顺序重命名标注文件和图片（分成两部分防止图片和标注文件数量不一致）\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003Cspan>27\u003C\u002Fspan>\u003Cspan>28\u003C\u002Fspan>\u003Cspan>29\u003C\u002Fspan>\u003Cspan>30\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os\n\n\u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">BatchRename\u003C\u002Fspan>():\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">__init__\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path1 = \u003Cspan class=\"hljs-string\">&#x27;.\u002FJPEGImages&#x27;\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path2 = \u003Cspan class=\"hljs-string\">&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">rename\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        filelist1 = os.listdir(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path1)\n        filelist1.sort()\n        total_num1 = \u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(filelist1)\n        i1 = \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>\n        srcpath1 = os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path1)\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item1 \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filelist1:\n            os.rename(os.path.join(srcpath1, item1), os.path.join(srcpath1, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(i1).zfill(\u003Cspan class=\"hljs-number\">5\u003C\u002Fspan>) + \u003Cspan class=\"hljs-string\">&#x27;.jpg&#x27;\u003C\u002Fspan>))\n            i1 += \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>\n\n        filelist2 = os.listdir(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path2)\n        filelist2.sort()\n        total_num2 = \u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(filelist2)\n        i2 = \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>\n        srcpath2 = os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path2)\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item2 \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filelist2:\n            os.rename(os.path.join(srcpath2, item2), os.path.join(srcpath2, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(i2).zfill(\u003Cspan class=\"hljs-number\">5\u003C\u002Fspan>) + \u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))\n            i2 += \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>\n\n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n    demo = BatchRename()\n    demo.rename()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-修改标注文件中的图片路径为本目录下\">修改标注文件中的图片路径为本目录下\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os,sys\n\n\u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">FilesChange\u003C\u002Fspan>():\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">__init__\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path = \u003Cspan class=\"hljs-string\">&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">Change\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        filelist = os.listdir(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path)\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filelist:\n            srcfile = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path), item)\n            item = item.rstrip(\u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>)\n            item = item.zfill(\u003Cspan class=\"hljs-number\">5\u003C\u002Fspan>)\n            line_replace = \u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>\n            \u003Cspan class=\"hljs-keyword\">with\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(srcfile,\u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C\u002Fspan>) \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> fd:\n                lines = fd.readlines()\n            lines[line_replace] = (\u003Cspan class=\"hljs-string\">&#x27;        &lt;filename&gt;&#x27;\u003C\u002Fspan> + item + \u003Cspan class=\"hljs-string\">&#x27;.webp&lt;\u002Ffilename&gt;\\n&#x27;\u003C\u002Fspan>)\n            lines[line_replace + \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>] = (\u003Cspan class=\"hljs-string\">&#x27;        &lt;path&gt;&#x27;\u003C\u002Fspan> + \u003Cspan class=\"hljs-built_in\">format\u003C\u002Fspan>(srcfile[:-\u003Cspan class=\"hljs-number\">21\u003C\u002Fspan>]) + \u003Cspan class=\"hljs-string\">&#x27;JPEGImages\u002F&#x27;\u003C\u002Fspan> + item + \u003Cspan class=\"hljs-string\">&#x27;.webp&lt;\u002Fpath&gt;\\n&#x27;\u003C\u002Fspan>)\n            \u003Cspan class=\"hljs-keyword\">with\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(srcfile,\u003Cspan class=\"hljs-string\">&#x27;w&#x27;\u003C\u002Fspan>) \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> fd:\n                fd.writelines(lines)\n\n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n    demo = FilesChange()\n    demo.Change()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-输出没有标注的图片和标注文件名到-txt-文件\">输出没有标注的图片和标注文件名到 txt 文件\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os,sys,re\n\n\u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">AppleSearch\u003C\u002Fspan>():\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">__init__\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path = \u003Cspan class=\"hljs-string\">&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">Search\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        filetxt = \u003Cspan class=\"hljs-string\">&#x27;NoAppleXml.txt&#x27;\u003C\u002Fspan>\n        txtlist = []\n        filelist = os.listdir(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path)\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filelist:\n            srcfile = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path), item)\n            \u003Cspan class=\"hljs-keyword\">with\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(srcfile,\u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C\u002Fspan>) \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> fd:\n                content = fd.read()\n                target = re.findall(\u003Cspan class=\"hljs-string\">&quot;apple&quot;\u003C\u002Fspan>, content)\n            \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> target == []:\n                txtlist.append(item.rstrip(\u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))\n        txtpath = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-string\">&#x27;.\u002F&#x27;\u003C\u002Fspan>), filetxt)\n        \u003Cspan class=\"hljs-keyword\">with\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(txtpath,\u003Cspan class=\"hljs-string\">&#x27;w&#x27;\u003C\u002Fspan>) \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> fd:\n            \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> i \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> txtlist:\n                \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(i)\n                fd.write(\u003Cspan class=\"hljs-string\">&quot;{}\\n&quot;\u003C\u002Fspan>.\u003Cspan class=\"hljs-built_in\">format\u003C\u002Fspan>(i)) \n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n    demo = AppleSearch()\n    demo.Search()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-从-txt-文件读取要删除的图片和标注文件\">从 txt 文件读取要删除的图片和标注文件\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os,sys,fileinput,re\n\n\u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">DeleteNoApple\u003C\u002Fspan>():\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">__init__\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path1 = \u003Cspan class=\"hljs-string\">&#x27;.\u002FJPEGImages&#x27;\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path2 = \u003Cspan class=\"hljs-string\">&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">Delete\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        filetxt = \u003Cspan class=\"hljs-string\">&#x27;.\u002FNoAppleXml.txt&#x27;\u003C\u002Fspan>\n        content = []\n        txtpath = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-string\">&#x27;.\u002F&#x27;\u003C\u002Fspan>), filetxt)\n        \u003Cspan class=\"hljs-comment\"># with open(txtpath) as fd:\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> line \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> fileinput.\u003Cspan class=\"hljs-built_in\">input\u003C\u002Fspan>(txtpath):\n            content.append(line.rstrip(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C\u002Fspan>))\n\n        \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> content:\n            \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> i \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> content:\n                srcpath1 = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path1), i+\u003Cspan class=\"hljs-string\">&#x27;.webp&#x27;\u003C\u002Fspan>)\n                os.remove(srcpath1)\n                srcpath2 = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path2), i+\u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>)\n                os.remove(srcpath2)\n        \n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n    demo = DeleteNoApple()\n    demo.Delete()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-批量图片格式转换-未过滤-jpg-图片防止图片编码错误\">批量图片格式转换 （未过滤 jpg 图片防止图片编码错误）\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> PIL \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> Image\n\nimgList = os.listdir(\u003Cspan class=\"hljs-string\">&#x27;.\u002FJPEGImages&#x27;\u003C\u002Fspan>)\n\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> imgList:\n    \u003Cspan class=\"hljs-keyword\">try\u003C\u002Fspan>:\n        img = Image.\u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(item)\n        file_name, file_type = os.path.splitext(item)\n        \n        \u003Cspan class=\"hljs-comment\"># if file_type == &#x27;jpg&#x27;:\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-comment\">#     continue\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-keyword\">else\u003C\u002Fspan>:\n            img.save(\u003Cspan class=\"hljs-string\">&quot;%s.webp&quot;\u003C\u002Fspan>%(file_name), \u003Cspan class=\"hljs-string\">&#x27;jpg&#x27;\u003C\u002Fspan>)\n\n    \u003Cspan class=\"hljs-keyword\">except\u003C\u002Fspan> IOError:\n        \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;picture convert error&quot;\u003C\u002Fspan>)\n\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-批量更改标签名\">批量更改标签名\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os,sys\n\n\u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">FilesChange\u003C\u002Fspan>():\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">__init__\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        \u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path = \u003Cspan class=\"hljs-string\">&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">Change\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">self\u003C\u002Fspan>):\n        old = \u003Cspan class=\"hljs-string\">&quot;Apple&quot;\u003C\u002Fspan>\n        new = \u003Cspan class=\"hljs-string\">&quot;apple&quot;\u003C\u002Fspan>\n        filelist = os.listdir(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path)\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> item \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> filelist:\n            srcfile = os.path.join(os.path.abspath(\u003Cspan class=\"hljs-variable language_\">self\u003C\u002Fspan>.path), item)\n            line_replace = \u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>\n            \u003Cspan class=\"hljs-keyword\">with\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(srcfile,\u003Cspan class=\"hljs-string\">&#x27;r+&#x27;\u003C\u002Fspan>) \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> fd:\n                lines = fd.readlines()\n                fd.seek(\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>)\n                \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> line \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> lines:\n                    \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> old \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> line:\n                        lines=\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>.join(lines).replace(old,new)\n                fd.writelines(\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>.join(lines))\n\n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n    demo = FilesChange()\n    demo.Change()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-查找无对应图片的标签-和-无对应标签的图片\">查找无对应图片的标签 和 无对应标签的图片\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003Cspan>27\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-comment\"># -*- coding: utf-8 -*-\u003C\u002Fspan>\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os\n\n\npath1 = \u003Cspan class=\"hljs-string\">r&#x27;.\u002FJPEGImages&#x27;\u003C\u002Fspan>\npath2 = \u003Cspan class=\"hljs-string\">r&#x27;.\u002FAnnotations&#x27;\u003C\u002Fspan>\n\n\u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">file_name\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">image_dir,xml_dir\u003C\u002Fspan>):\n    jpg_list = []\n    xml_list = []\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> root, dirs, files \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> os.walk(image_dir):\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> file \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> files:\n            jpg_list.append(os.path.splitext(file)[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>])\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> root, dirs, files \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> os.walk(xml_dir):\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> file \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> files:\n            xml_list.append(os.path.splitext(file)[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>])\n    \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(jpg_list))\n    diff = \u003Cspan class=\"hljs-built_in\">set\u003C\u002Fspan>(xml_list).difference(\u003Cspan class=\"hljs-built_in\">set\u003C\u002Fspan>(jpg_list))  \u003Cspan class=\"hljs-comment\"># 差集，在a中但不在b中的元素\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> name \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> diff:\n        \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;no jpg&quot;\u003C\u002Fspan>, name + \u003Cspan class=\"hljs-string\">&quot;.xml&quot;\u003C\u002Fspan>)\n    diff2 = \u003Cspan class=\"hljs-built_in\">set\u003C\u002Fspan>(jpg_list).difference(\u003Cspan class=\"hljs-built_in\">set\u003C\u002Fspan>(xml_list))  \u003Cspan class=\"hljs-comment\"># 差集，在b中但不在a中的元素\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(diff2))\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> name \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> diff2:\n        \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;no xml&quot;\u003C\u002Fspan>, name + \u003Cspan class=\"hljs-string\">&quot;.webp&quot;\u003C\u002Fspan>)\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C\u002Fspan>:\n\n    file_name(path1,path2)\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch3 id=\"post-heading-使用-imgaug-库图像增广\">使用 \u003Ccode>imgaug\u003C\u002Fcode> 库图像增广\u003C\u002Fh3>\n\u003Cdiv class=\"code-block\" data-code-block>\u003Cdiv class=\"code-toolbar\">\u003Cspan class=\"code-language\">python\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" data-copy-code aria-label=\"复制代码\" title=\"复制代码\">\u003Csvg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"\u002F>\u003Cpath d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-viewport\">\u003Cdiv class=\"code-line-numbers\" aria-hidden=\"true\">\u003Cspan>1\u003C\u002Fspan>\u003Cspan>2\u003C\u002Fspan>\u003Cspan>3\u003C\u002Fspan>\u003Cspan>4\u003C\u002Fspan>\u003Cspan>5\u003C\u002Fspan>\u003Cspan>6\u003C\u002Fspan>\u003Cspan>7\u003C\u002Fspan>\u003Cspan>8\u003C\u002Fspan>\u003Cspan>9\u003C\u002Fspan>\u003Cspan>10\u003C\u002Fspan>\u003Cspan>11\u003C\u002Fspan>\u003Cspan>12\u003C\u002Fspan>\u003Cspan>13\u003C\u002Fspan>\u003Cspan>14\u003C\u002Fspan>\u003Cspan>15\u003C\u002Fspan>\u003Cspan>16\u003C\u002Fspan>\u003Cspan>17\u003C\u002Fspan>\u003Cspan>18\u003C\u002Fspan>\u003Cspan>19\u003C\u002Fspan>\u003Cspan>20\u003C\u002Fspan>\u003Cspan>21\u003C\u002Fspan>\u003Cspan>22\u003C\u002Fspan>\u003Cspan>23\u003C\u002Fspan>\u003Cspan>24\u003C\u002Fspan>\u003Cspan>25\u003C\u002Fspan>\u003Cspan>26\u003C\u002Fspan>\u003Cspan>27\u003C\u002Fspan>\u003Cspan>28\u003C\u002Fspan>\u003Cspan>29\u003C\u002Fspan>\u003Cspan>30\u003C\u002Fspan>\u003Cspan>31\u003C\u002Fspan>\u003Cspan>32\u003C\u002Fspan>\u003Cspan>33\u003C\u002Fspan>\u003Cspan>34\u003C\u002Fspan>\u003Cspan>35\u003C\u002Fspan>\u003Cspan>36\u003C\u002Fspan>\u003Cspan>37\u003C\u002Fspan>\u003Cspan>38\u003C\u002Fspan>\u003Cspan>39\u003C\u002Fspan>\u003Cspan>40\u003C\u002Fspan>\u003Cspan>41\u003C\u002Fspan>\u003Cspan>42\u003C\u002Fspan>\u003Cspan>43\u003C\u002Fspan>\u003Cspan>44\u003C\u002Fspan>\u003Cspan>45\u003C\u002Fspan>\u003Cspan>46\u003C\u002Fspan>\u003Cspan>47\u003C\u002Fspan>\u003Cspan>48\u003C\u002Fspan>\u003Cspan>49\u003C\u002Fspan>\u003Cspan>50\u003C\u002Fspan>\u003Cspan>51\u003C\u002Fspan>\u003Cspan>52\u003C\u002Fspan>\u003Cspan>53\u003C\u002Fspan>\u003Cspan>54\u003C\u002Fspan>\u003Cspan>55\u003C\u002Fspan>\u003Cspan>56\u003C\u002Fspan>\u003Cspan>57\u003C\u002Fspan>\u003Cspan>58\u003C\u002Fspan>\u003Cspan>59\u003C\u002Fspan>\u003Cspan>60\u003C\u002Fspan>\u003Cspan>61\u003C\u002Fspan>\u003Cspan>62\u003C\u002Fspan>\u003Cspan>63\u003C\u002Fspan>\u003Cspan>64\u003C\u002Fspan>\u003Cspan>65\u003C\u002Fspan>\u003Cspan>66\u003C\u002Fspan>\u003Cspan>67\u003C\u002Fspan>\u003Cspan>68\u003C\u002Fspan>\u003Cspan>69\u003C\u002Fspan>\u003Cspan>70\u003C\u002Fspan>\u003Cspan>71\u003C\u002Fspan>\u003Cspan>72\u003C\u002Fspan>\u003Cspan>73\u003C\u002Fspan>\u003Cspan>74\u003C\u002Fspan>\u003Cspan>75\u003C\u002Fspan>\u003Cspan>76\u003C\u002Fspan>\u003Cspan>77\u003C\u002Fspan>\u003Cspan>78\u003C\u002Fspan>\u003Cspan>79\u003C\u002Fspan>\u003Cspan>80\u003C\u002Fspan>\u003Cspan>81\u003C\u002Fspan>\u003Cspan>82\u003C\u002Fspan>\u003Cspan>83\u003C\u002Fspan>\u003Cspan>84\u003C\u002Fspan>\u003Cspan>85\u003C\u002Fspan>\u003Cspan>86\u003C\u002Fspan>\u003Cspan>87\u003C\u002Fspan>\u003Cspan>88\u003C\u002Fspan>\u003Cspan>89\u003C\u002Fspan>\u003Cspan>90\u003C\u002Fspan>\u003Cspan>91\u003C\u002Fspan>\u003Cspan>92\u003C\u002Fspan>\u003Cspan>93\u003C\u002Fspan>\u003Cspan>94\u003C\u002Fspan>\u003Cspan>95\u003C\u002Fspan>\u003Cspan>96\u003C\u002Fspan>\u003Cspan>97\u003C\u002Fspan>\u003Cspan>98\u003C\u002Fspan>\u003Cspan>99\u003C\u002Fspan>\u003Cspan>100\u003C\u002Fspan>\u003Cspan>101\u003C\u002Fspan>\u003Cspan>102\u003C\u002Fspan>\u003Cspan>103\u003C\u002Fspan>\u003Cspan>104\u003C\u002Fspan>\u003Cspan>105\u003C\u002Fspan>\u003Cspan>106\u003C\u002Fspan>\u003Cspan>107\u003C\u002Fspan>\u003Cspan>108\u003C\u002Fspan>\u003Cspan>109\u003C\u002Fspan>\u003Cspan>110\u003C\u002Fspan>\u003Cspan>111\u003C\u002Fspan>\u003Cspan>112\u003C\u002Fspan>\u003Cspan>113\u003C\u002Fspan>\u003Cspan>114\u003C\u002Fspan>\u003Cspan>115\u003C\u002Fspan>\u003Cspan>116\u003C\u002Fspan>\u003Cspan>117\u003C\u002Fspan>\u003Cspan>118\u003C\u002Fspan>\u003Cspan>119\u003C\u002Fspan>\u003Cspan>120\u003C\u002Fspan>\u003Cspan>121\u003C\u002Fspan>\u003Cspan>122\u003C\u002Fspan>\u003Cspan>123\u003C\u002Fspan>\u003Cspan>124\u003C\u002Fspan>\u003Cspan>125\u003C\u002Fspan>\u003Cspan>126\u003C\u002Fspan>\u003Cspan>127\u003C\u002Fspan>\u003Cspan>128\u003C\u002Fspan>\u003Cspan>129\u003C\u002Fspan>\u003Cspan>130\u003C\u002Fspan>\u003Cspan>131\u003C\u002Fspan>\u003Cspan>132\u003C\u002Fspan>\u003Cspan>133\u003C\u002Fspan>\u003Cspan>134\u003C\u002Fspan>\u003Cspan>135\u003C\u002Fspan>\u003Cspan>136\u003C\u002Fspan>\u003Cspan>137\u003C\u002Fspan>\u003Cspan>138\u003C\u002Fspan>\u003Cspan>139\u003C\u002Fspan>\u003Cspan>140\u003C\u002Fspan>\u003Cspan>141\u003C\u002Fspan>\u003Cspan>142\u003C\u002Fspan>\u003Cspan>143\u003C\u002Fspan>\u003Cspan>144\u003C\u002Fspan>\u003Cspan>145\u003C\u002Fspan>\u003Cspan>146\u003C\u002Fspan>\u003Cspan>147\u003C\u002Fspan>\u003Cspan>148\u003C\u002Fspan>\u003Cspan>149\u003C\u002Fspan>\u003Cspan>150\u003C\u002Fspan>\u003Cspan>151\u003C\u002Fspan>\u003Cspan>152\u003C\u002Fspan>\u003Cspan>153\u003C\u002Fspan>\u003Cspan>154\u003C\u002Fspan>\u003Cspan>155\u003C\u002Fspan>\u003Cspan>156\u003C\u002Fspan>\u003Cspan>157\u003C\u002Fspan>\u003Cspan>158\u003C\u002Fspan>\u003Cspan>159\u003C\u002Fspan>\u003Cspan>160\u003C\u002Fspan>\u003Cspan>161\u003C\u002Fspan>\u003Cspan>162\u003C\u002Fspan>\u003Cspan>163\u003C\u002Fspan>\u003Cspan>164\u003C\u002Fspan>\u003Cspan>165\u003C\u002Fspan>\u003Cspan>166\u003C\u002Fspan>\u003Cspan>167\u003C\u002Fspan>\u003Cspan>168\u003C\u002Fspan>\u003Cspan>169\u003C\u002Fspan>\u003Cspan>170\u003C\u002Fspan>\u003Cspan>171\u003C\u002Fspan>\u003Cspan>172\u003C\u002Fspan>\u003Cspan>173\u003C\u002Fspan>\u003Cspan>174\u003C\u002Fspan>\u003Cspan>175\u003C\u002Fspan>\u003Cspan>176\u003C\u002Fspan>\u003Cspan>177\u003C\u002Fspan>\u003Cspan>178\u003C\u002Fspan>\u003Cspan>179\u003C\u002Fspan>\u003Cspan>180\u003C\u002Fspan>\u003Cspan>181\u003C\u002Fspan>\u003C\u002Fdiv>\u003Cpre class=\"hljs\" tabindex=\"0\" aria-label=\"代码，超出宽度时可横向滚动\">\u003Ccode>\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> xml.etree.ElementTree \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> ET\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> pickle\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> os\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> os \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> getcwd\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> numpy \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> np\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> PIL \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> Image\n\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> imgaug \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> ia\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> imgaug \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> augmenters \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> iaa\n\u003Cspan class=\"hljs-keyword\">from\u003C\u002Fspan> PIL \u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> ImageFile\n\nImageFile.LOAD_TRUNCATED_IMAGES = \u003Cspan class=\"hljs-literal\">True\u003C\u002Fspan>\n\n\nia.seed(\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>)\n\n\u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">read_xml_annotation\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">root, image_id\u003C\u002Fspan>):\n    in_file = \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(os.path.join(root, image_id))\n    tree = ET.parse(in_file)\n    root = tree.getroot()\n    bndboxlist = []\n\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> root.findall(\u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C\u002Fspan>):  \u003Cspan class=\"hljs-comment\"># 找到root节点下的所有country节点\u003C\u002Fspan>\n        bndbox = \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan>.find(\u003Cspan class=\"hljs-string\">&#x27;bndbox&#x27;\u003C\u002Fspan>)  \u003Cspan class=\"hljs-comment\"># 子节点下节点rank的值\u003C\u002Fspan>\n\n        xmin = \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">float\u003C\u002Fspan>(bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmin&#x27;\u003C\u002Fspan>).text))\n        xmax = \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">float\u003C\u002Fspan>(bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmax&#x27;\u003C\u002Fspan>).text))\n        ymin = \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">float\u003C\u002Fspan>(bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymin&#x27;\u003C\u002Fspan>).text))\n        ymax = \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">float\u003C\u002Fspan>(bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymax&#x27;\u003C\u002Fspan>).text))\n        \u003Cspan class=\"hljs-comment\"># print(xmin,ymin,xmax,ymax)\u003C\u002Fspan>\n        bndboxlist.append([xmin,ymin,xmax,ymax])\n        \u003Cspan class=\"hljs-comment\"># print(bndboxlist)\u003C\u002Fspan>\n\n    bndbox = root.find(\u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C\u002Fspan>).find(\u003Cspan class=\"hljs-string\">&#x27;bndbox&#x27;\u003C\u002Fspan>)\n    \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> bndboxlist\n\u003Cspan class=\"hljs-comment\"># (506.0000, 330.0000, 528.0000, 348.0000) -&gt; (520.4747, 381.5080, 540.5596, 398.6603)\u003C\u002Fspan>\n\u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">change_xml_annotation\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">root, image_id, new_target\u003C\u002Fspan>):\n    new_xmin = new_target[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>]\n    new_ymin = new_target[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>]\n    new_xmax = new_target[\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>]\n    new_ymax = new_target[\u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>]\n\n    in_file = \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(os.path.join(root, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(image_id) + \u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))  \u003Cspan class=\"hljs-comment\"># 这里root分别由两个意思\u003C\u002Fspan>\n    tree = ET.parse(in_file)\n    xmlroot = tree.getroot()\n    \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan> = xmlroot.find(\u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C\u002Fspan>)\n    bndbox = \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan>.find(\u003Cspan class=\"hljs-string\">&#x27;bndbox&#x27;\u003C\u002Fspan>)\n    xmin = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmin&#x27;\u003C\u002Fspan>)\n    xmin.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_xmin)\n    ymin = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymin&#x27;\u003C\u002Fspan>)\n    ymin.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_ymin)\n    xmax = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmax&#x27;\u003C\u002Fspan>)\n    xmax.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_xmax)\n    ymax = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymax&#x27;\u003C\u002Fspan>)\n    ymax.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_ymax)\n    tree.write(os.path.join(root, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(image_id) + \u003Cspan class=\"hljs-string\">&quot;_aug&quot;\u003C\u002Fspan> + \u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))\n\n\u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">change_xml_list_annotation\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">root, image_id, new_target,saveroot,\u003Cspan class=\"hljs-built_in\">id\u003C\u002Fspan>\u003C\u002Fspan>):\n\n    in_file = \u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(os.path.join(root, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(image_id) + \u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))  \u003Cspan class=\"hljs-comment\"># 这里root分别由两个意思\u003C\u002Fspan>\n    tree = ET.parse(in_file)\n    xmlroot = tree.getroot()\n    index = \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>\n\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> xmlroot.findall(\u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C\u002Fspan>):  \u003Cspan class=\"hljs-comment\"># 找到root节点下的所有country节点\u003C\u002Fspan>\n        bndbox = \u003Cspan class=\"hljs-built_in\">object\u003C\u002Fspan>.find(\u003Cspan class=\"hljs-string\">&#x27;bndbox&#x27;\u003C\u002Fspan>)  \u003Cspan class=\"hljs-comment\"># 子节点下节点rank的值\u003C\u002Fspan>\n\n        \u003Cspan class=\"hljs-comment\"># xmin = int(bndbox.find(&#x27;xmin&#x27;).text)\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-comment\"># xmax = int(bndbox.find(&#x27;xmax&#x27;).text)\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-comment\"># ymin = int(bndbox.find(&#x27;ymin&#x27;).text)\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-comment\"># ymax = int(bndbox.find(&#x27;ymax&#x27;).text)\u003C\u002Fspan>\n\n        new_xmin = new_target[index][\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>]\n        new_ymin = new_target[index][\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>]\n        new_xmax = new_target[index][\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>]\n        new_ymax = new_target[index][\u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>]\n\n        xmin = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmin&#x27;\u003C\u002Fspan>)\n        xmin.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_xmin)\n        ymin = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymin&#x27;\u003C\u002Fspan>)\n        ymin.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_ymin)\n        xmax = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;xmax&#x27;\u003C\u002Fspan>)\n        xmax.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_xmax)\n        ymax = bndbox.find(\u003Cspan class=\"hljs-string\">&#x27;ymax&#x27;\u003C\u002Fspan>)\n        ymax.text = \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(new_ymax)\n\n        index = index + \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>\n\n    tree.write(os.path.join(saveroot, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(image_id) + \u003Cspan class=\"hljs-string\">&quot;_aug_&quot;\u003C\u002Fspan> + \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">id\u003C\u002Fspan>) + \u003Cspan class=\"hljs-string\">&#x27;.xml&#x27;\u003C\u002Fspan>))\n\n\n\u003Cspan class=\"hljs-keyword\">def\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">mkdir\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">path\u003C\u002Fspan>):\n\n    \u003Cspan class=\"hljs-comment\"># 去除首位空格\u003C\u002Fspan>\n    path = path.strip()\n    \u003Cspan class=\"hljs-comment\"># 去除尾部 \\ 符号\u003C\u002Fspan>\n    path = path.rstrip(\u003Cspan class=\"hljs-string\">&quot;\\\\&quot;\u003C\u002Fspan>)\n    \u003Cspan class=\"hljs-comment\"># 判断路径是否存在\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-comment\"># 存在     True\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-comment\"># 不存在   False\u003C\u002Fspan>\n    isExists = os.path.exists(path)\n    \u003Cspan class=\"hljs-comment\"># 判断结果\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">not\u003C\u002Fspan> isExists:\n        \u003Cspan class=\"hljs-comment\"># 如果不存在则创建目录\u003C\u002Fspan>\n         \u003Cspan class=\"hljs-comment\"># 创建目录操作函数\u003C\u002Fspan>\n        os.makedirs(path)\n        \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(path + \u003Cspan class=\"hljs-string\">&#x27; 创建成功&#x27;\u003C\u002Fspan>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-literal\">True\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">else\u003C\u002Fspan>:\n        \u003Cspan class=\"hljs-comment\"># 如果目录存在则不创建，并提示目录已存在\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(path + \u003Cspan class=\"hljs-string\">&#x27; 目录已存在&#x27;\u003C\u002Fspan>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-literal\">False\u003C\u002Fspan>\n\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> __name__ == \u003Cspan class=\"hljs-string\">&quot;__main__&quot;\u003C\u002Fspan>:\n\n    IMG_DIR = \u003Cspan class=\"hljs-string\">&quot;.\u002FJPEGImages&quot;\u003C\u002Fspan>\n    XML_DIR = \u003Cspan class=\"hljs-string\">&quot;.\u002FAnnotations&quot;\u003C\u002Fspan>\n\n    AUG_XML_DIR = \u003Cspan class=\"hljs-string\">&quot;.\u002Faug_Annotations&quot;\u003C\u002Fspan>  \u003Cspan class=\"hljs-comment\"># 存储增强后的XML文件夹路径\u003C\u002Fspan>\n    mkdir(AUG_XML_DIR)\n\n    AUG_IMG_DIR = \u003Cspan class=\"hljs-string\">&quot;.\u002Faug_JPEGImages&quot;\u003C\u002Fspan>  \u003Cspan class=\"hljs-comment\"># 存储增强后的影像文件夹路径\u003C\u002Fspan>\n    mkdir(AUG_IMG_DIR)\n\n    AUGLOOP = \u003Cspan class=\"hljs-number\">2\u003C\u002Fspan> \u003Cspan class=\"hljs-comment\"># 每张影像增强的数量\u003C\u002Fspan>\n\n    boxes_img_aug_list = []\n    new_bndbox = []\n    new_bndbox_list = []\n\n\n    \u003Cspan class=\"hljs-comment\"># 影像增强\u003C\u002Fspan>\n    seq = iaa.Sequential([\n        \u003Cspan class=\"hljs-comment\"># iaa.Flipud(0.5),  # vertically flip 20% of all images\u003C\u002Fspan>\n        iaa.Fliplr(\u003Cspan class=\"hljs-number\">0.5\u003C\u002Fspan>),  \u003Cspan class=\"hljs-comment\"># 镜像\u003C\u002Fspan>\n        iaa.Multiply((\u003Cspan class=\"hljs-number\">1.2\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">1.5\u003C\u002Fspan>)),  \u003Cspan class=\"hljs-comment\"># change brightness, doesn&#x27;t affect BBs\u003C\u002Fspan>\n        iaa.GaussianBlur(sigma=(\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">3.0\u003C\u002Fspan>)), \u003Cspan class=\"hljs-comment\"># iaa.GaussianBlur(0.5),\u003C\u002Fspan>\n        iaa.Affine(\n            translate_px={\u003Cspan class=\"hljs-string\">&quot;x&quot;\u003C\u002Fspan>: \u003Cspan class=\"hljs-number\">15\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;y&quot;\u003C\u002Fspan>: \u003Cspan class=\"hljs-number\">15\u003C\u002Fspan>},\n            scale=(\u003Cspan class=\"hljs-number\">0.8\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">0.95\u003C\u002Fspan>),\n            rotate=(-\u003Cspan class=\"hljs-number\">30\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">30\u003C\u002Fspan>)\n        )  \u003Cspan class=\"hljs-comment\"># translate by 40\u002F60px on x\u002Fy axis, and scale to 50-70%, affects BBs\u003C\u002Fspan>\n    ])\n\n    \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> root, sub_folders, files \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> os.walk(XML_DIR):\n\n        \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> name \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> files:\n\n            bndbox = read_xml_annotation(XML_DIR, name)\n\n            \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> epoch \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">range\u003C\u002Fspan>(AUGLOOP):\n                seq_det = seq.to_deterministic()  \u003Cspan class=\"hljs-comment\"># 保持坐标和图像同步改变，而不是随机\u003C\u002Fspan>\n\n                \u003Cspan class=\"hljs-comment\"># 读取图片\u003C\u002Fspan>\n                img = Image.\u003Cspan class=\"hljs-built_in\">open\u003C\u002Fspan>(os.path.join(IMG_DIR, name[:-\u003Cspan class=\"hljs-number\">4\u003C\u002Fspan>] + \u003Cspan class=\"hljs-string\">&#x27;.webp&#x27;\u003C\u002Fspan>))\n                img = np.array(img)\n\n                \u003Cspan class=\"hljs-comment\"># bndbox 坐标增强\u003C\u002Fspan>\n                \u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan> i \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">range\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">len\u003C\u002Fspan>(bndbox)):\n                    bbs = ia.BoundingBoxesOnImage([\n                        ia.BoundingBox(x1=bndbox[i][\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>], y1=bndbox[i][\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>], x2=bndbox[i][\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>], y2=bndbox[i][\u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>]),\n                    ], shape=img.shape)\n\n                    bbs_aug = seq_det.augment_bounding_boxes([bbs])[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>]\n                    boxes_img_aug_list.append(bbs_aug)\n\n                    \u003Cspan class=\"hljs-comment\"># new_bndbox_list:[[x1,y1,x2,y2],...[],[]]\u003C\u002Fspan>\n                    new_bndbox_list.append([\u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(bbs_aug.bounding_boxes[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].x1),\n                                            \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(bbs_aug.bounding_boxes[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].y1),\n                                            \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(bbs_aug.bounding_boxes[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].x2),\n                                            \u003Cspan class=\"hljs-built_in\">int\u003C\u002Fspan>(bbs_aug.bounding_boxes[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].y2)])\n                \u003Cspan class=\"hljs-comment\"># 存储变化后的图片\u003C\u002Fspan>\n                image_aug = seq_det.augment_images([img])[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>]\n                path = os.path.join(AUG_IMG_DIR, \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(name[:-\u003Cspan class=\"hljs-number\">4\u003C\u002Fspan>]) + \u003Cspan class=\"hljs-string\">&quot;_aug_&quot;\u003C\u002Fspan> + \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(epoch) + \u003Cspan class=\"hljs-string\">&#x27;.webp&#x27;\u003C\u002Fspan>)\n                \u003Cspan class=\"hljs-comment\"># image_auged = bbs.draw_on_image(image_aug, thickness=0)\u003C\u002Fspan>\n                Image.fromarray(image_aug).save(path)\n\n                \u003Cspan class=\"hljs-comment\"># 存储变化后的XML\u003C\u002Fspan>\n                change_xml_list_annotation(XML_DIR, name[:-\u003Cspan class=\"hljs-number\">4\u003C\u002Fspan>], new_bndbox_list,AUG_XML_DIR,epoch)\n                \u003Cspan class=\"hljs-built_in\">print\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(name[:-\u003Cspan class=\"hljs-number\">4\u003C\u002Fspan>]) + \u003Cspan class=\"hljs-string\">&quot;_aug_&quot;\u003C\u002Fspan> + \u003Cspan class=\"hljs-built_in\">str\u003C\u002Fspan>(epoch) + \u003Cspan class=\"hljs-string\">&#x27;.webp&#x27;\u003C\u002Fspan>)\n                new_bndbox_list = []\n\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n",[15,19,22,26,29,32,35,38,41,44,47],{"id":16,"text":17,"level":18},"post-heading-摘要","摘要",2,{"id":20,"text":21,"level":18},"post-heading-代码","代码",{"id":23,"text":24,"level":25},"post-heading-查找错误图片","查找错误图片",3,{"id":27,"text":28,"level":25},"post-heading-按顺序重命名标注文件和图片-分成两部分防止图片和标注文件数量不一致","按顺序重命名标注文件和图片（分成两部分防止图片和标注文件数量不一致）",{"id":30,"text":31,"level":25},"post-heading-修改标注文件中的图片路径为本目录下","修改标注文件中的图片路径为本目录下",{"id":33,"text":34,"level":25},"post-heading-输出没有标注的图片和标注文件名到-txt-文件","输出没有标注的图片和标注文件名到 txt 文件",{"id":36,"text":37,"level":25},"post-heading-从-txt-文件读取要删除的图片和标注文件","从 txt 文件读取要删除的图片和标注文件",{"id":39,"text":40,"level":25},"post-heading-批量图片格式转换-未过滤-jpg-图片防止图片编码错误","批量图片格式转换 （未过滤 jpg 图片防止图片编码错误）",{"id":42,"text":43,"level":25},"post-heading-批量更改标签名","批量更改标签名",{"id":45,"text":46,"level":25},"post-heading-查找无对应图片的标签-和-无对应标签的图片","查找无对应图片的标签 和 无对应标签的图片",{"id":48,"text":49,"level":25},"post-heading-使用-imgaug-库图像增广","使用 imgaug 库图像增广",1792849565705]