From 9ceb3e361c39afd75a1127a99b289155ac51668e Mon Sep 17 00:00:00 2001 From: Helena Kloosterman Date: Sat, 24 Jul 2021 16:46:19 +0200 Subject: [PATCH] Add PaddlePaddle Classification notebook (#158) * Add PaddlePaddle Classification notebook * Set HUB_HOME to /tmp to prevent paddlehub issue also add paddlehub to Pipfile --- .docker/Pipfile | 1 + .docker/Pipfile.lock | 901 ++++++++++++------ .docker/builder/run | 1 + ...ddle-onnx-to-openvino-classification.ipynb | 435 +++++++++ .../coco_close.jpg | Bin 0 -> 25907 bytes 5 files changed, 1040 insertions(+), 298 deletions(-) create mode 100644 notebooks/103-paddle-onnx-to-openvino/103-paddle-onnx-to-openvino-classification.ipynb create mode 100644 notebooks/103-paddle-onnx-to-openvino/coco_close.jpg diff --git a/.docker/Pipfile b/.docker/Pipfile index 53720465427..e74928c30e0 100644 --- a/.docker/Pipfile +++ b/.docker/Pipfile @@ -20,6 +20,7 @@ nbval = "*" openvino-dev = {extras = ["onnx","tensorflow2"], version = "==2021.4"} openvino-extensions="*" paddle2onnx = ">=0.6" +paddlehub = "*" paddlepaddle = "~=2.1.1" Pillow = "==8.2.*" ppgan = ">=2.0.0" diff --git a/.docker/Pipfile.lock b/.docker/Pipfile.lock index 7c8de09f396..c9291208712 100644 --- a/.docker/Pipfile.lock +++ b/.docker/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3b1c92164e784bd576bbed61c4eb9a453004201ebd181d85acec6de957dc5452" + "sha256": "b8aa796b5642b8f62eed4656e9fc03680a7c7077725b84bba1eab027bd63f3d4" }, "pipfile-spec": 6, "requires": { @@ -212,6 +212,22 @@ ], "version": "==0.2.0" }, + "backports.entry-points-selectable": { + "hashes": [ + "sha256:988468260ec1c196dab6ae1149260e2f5472c9110334e5d51adcb77867361f6a", + "sha256:a6d9a871cde5e15b4c4a53e3d43ba890cc6861ec1332c9c2428c92f977192acc" + ], + "markers": "python_version >= '2.7'", + "version": "==1.1.0" + }, + "bce-python-sdk": { + "hashes": [ + "sha256:27db8bbaad90985da866e04d34ffb3284a71d29279646bb7c9a1a11886d8826a", + "sha256:80007c618b4d64e4f0e6019abe775439df96320f815e4a56bd0122651c02bf56" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", + "version": "==0.8.61" + }, "beautifulsoup4": { "hashes": [ "sha256:194ec62a25438adcb3fdb06378b26559eda1ea8a747367d34c33cef9c7f48d57", @@ -222,11 +238,11 @@ }, "bleach": { "hashes": [ - "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125", - "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433" + "sha256:306483a5a9795474160ad57fce3ddd1b50551e981eed8e15a582d34cef28aafa", + "sha256:ae976d7174bba988c0b632def82fdc94235756edfb14e6558a9c5be555c9fb78" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.3.0" + "version": "==3.3.1" }, "cachetools": { "hashes": [ @@ -252,57 +268,61 @@ }, "cffi": { "hashes": [ - "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", - "sha256:04c468b622ed31d408fea2346bec5bbffba2cc44226302a0de1ade9f5ea3d373", - "sha256:06d7cd1abac2ffd92e65c0609661866709b4b2d82dd15f611e602b9b188b0b69", - "sha256:06db6321b7a68b2bd6df96d08a5adadc1fa0e8f419226e25b2a5fbf6ccc7350f", - "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", - "sha256:0f861a89e0043afec2a51fd177a567005847973be86f709bbb044d7f42fc4e05", - "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", - "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", - "sha256:1bf1ac1984eaa7675ca8d5745a8cb87ef7abecb5592178406e55858d411eadc0", - "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", - "sha256:24a570cd11895b60829e941f2613a4f79df1a27344cbbb82164ef2e0116f09c7", - "sha256:24ec4ff2c5c0c8f9c6b87d5bb53555bf267e1e6f70e52e5a9740d32861d36b6f", - "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", - "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", - "sha256:293e7ea41280cb28c6fcaaa0b1aa1f533b8ce060b9e701d78511e1e6c4a1de76", - "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", - "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", - "sha256:3c3f39fa737542161d8b0d680df2ec249334cd70a8f420f71c9304bd83c3cbed", - "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", - "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", - "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", - "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", - "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", - "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", - "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", - "sha256:681d07b0d1e3c462dd15585ef5e33cb021321588bebd910124ef4f4fb71aef55", - "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", - "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", - "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", - "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", - "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", - "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", - "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", - "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", - "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", - "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", - "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", - "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", - "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", - "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", - "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", - "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", - "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", - "sha256:cc5a8e069b9ebfa22e26d0e6b97d6f9781302fe7f4f2b8776c3e1daea35f1adc", - "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", - "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", - "sha256:df5052c5d867c1ea0b311fb7c3cd28b19df469c056f7fdcfe88c7473aa63e333", - "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", - "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" - ], - "version": "==1.14.5" + "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d", + "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771", + "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872", + "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c", + "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc", + "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762", + "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202", + "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5", + "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548", + "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a", + "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f", + "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20", + "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218", + "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c", + "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e", + "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56", + "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224", + "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a", + "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2", + "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a", + "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819", + "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346", + "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b", + "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e", + "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534", + "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb", + "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0", + "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156", + "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd", + "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87", + "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc", + "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195", + "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33", + "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f", + "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d", + "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd", + "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728", + "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7", + "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca", + "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99", + "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf", + "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e", + "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c", + "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5", + "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69" + ], + "version": "==1.14.6" + }, + "cfgv": { + "hashes": [ + "sha256:9e600479b3b99e8af981ecdfc80a0296104ee610cab48a5ae4ffd0b668650eb1", + "sha256:b449c9c6118fe8cca7fa5e00b9ec60ba08145d281d52164230a69211c5d597a1" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==3.3.0" }, "chardet": { "hashes": [ @@ -312,6 +332,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.0.0" }, + "charset-normalizer": { + "hashes": [ + "sha256:88fce3fa5b1a84fdcb3f603d889f723d1dd89b26059d0123ca435570e848d5e1", + "sha256:c46c3ace2d744cfbdebceaa3c19ae691f53ae621b39fd7570f59d14fb7f2fd12" + ], + "markers": "python_version >= '3'", + "version": "==2.0.3" + }, "click": { "hashes": [ "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a", @@ -336,6 +364,13 @@ "markers": "python_version >= '2.7'", "version": "==2.0.6" }, + "colorlog": { + "hashes": [ + "sha256:4e6be13d9169254e2ded6526a6a4a1abb8ac564f2fa65b310a98e4ca5bea2c04", + "sha256:f17c013a06962b02f4449ee07cfdbe6b287df29efc2c9a1515b4a376f4e588ea" + ], + "version": "==5.0.1" + }, "commonmark": { "hashes": [ "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", @@ -405,7 +440,7 @@ "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==5.5" }, "cryptography": { @@ -544,6 +579,14 @@ ], "version": "==0.8.1" }, + "dill": { + "hashes": [ + "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f", + "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675" + ], + "markers": "python_version >= '2.7' and python_version != '3.0'", + "version": "==0.3.4" + }, "distlib": { "hashes": [ "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736", @@ -649,6 +692,29 @@ ], "version": "==3.0.12" }, + "flake8": { + "hashes": [ + "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", + "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.9.2" + }, + "flask": { + "hashes": [ + "sha256:1c4c257b1892aec1398784c63791cbaa43062f1f7aeb555c4da961b20ee68f55", + "sha256:a6209ca15eb63fc9385f38e452704113d679511d9574d09b2cf9183ae7d20dc9" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.1" + }, + "flask-babel": { + "hashes": [ + "sha256:e6820a052a8d344e178cdd36dd4bb8aea09b4bda3d5f9fa9f008df2c7f2f5468", + "sha256:f9faf45cdb2e1a32ea2ec14403587d4295108f35017a7821a2b1acb8cfd9257d" + ], + "version": "==2.0.0" + }, "flatbuffers": { "hashes": [ "sha256:63bb9a722d5e373701913e226135b28a6f6ac200d5cc7b4d919fa38d73b44610", @@ -686,13 +752,29 @@ "index": "pypi", "version": "==0.9.8" }, + "gitdb": { + "hashes": [ + "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0", + "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005" + ], + "markers": "python_version >= '3.4'", + "version": "==4.0.7" + }, + "gitpython": { + "hashes": [ + "sha256:b838a895977b45ab6f0cc926a9045c8d1c44e2b653c1fcc39fe91f42c6e8f05b", + "sha256:fce760879cd2aebd2991b3542876dc5c4a909b30c9d69dfc488e504a8db37ee8" + ], + "markers": "python_version >= '3.6'", + "version": "==3.1.18" + }, "google-auth": { "hashes": [ - "sha256:9266252e11393943410354cf14a77bcca24dd2ccd9c4e1aef23034fe0fbae630", - "sha256:c7c215c74348ef24faef2f7b62f6d8e6b38824fe08b1e7b7b09a02d397eda7b3" + "sha256:9bd25d835c01ca3dd9045ea0b50f036e3fe3868ee2c5a9773a661925bbdf46ca", + "sha256:a756a33978fac611e4f00b69715b80e35467c30cc6262132d29d33a0e398ac55" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.32.1" + "version": "==1.33.0" }, "google-auth-oauthlib": { "hashes": [ @@ -810,6 +892,14 @@ "index": "pypi", "version": "==1.32.0" }, + "gunicorn": { + "hashes": [ + "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", + "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" + ], + "markers": "sys_platform != 'win32'", + "version": "==20.1.0" + }, "h5py": { "hashes": [ "sha256:063947eaed5f271679ed4ffa36bb96f57bc14f44dd4336a827d9a02702e6ce6b", @@ -859,13 +949,21 @@ ], "version": "==0.1.2" }, + "identify": { + "hashes": [ + "sha256:7abaecbb414e385752e8ce02d8c494f4fbc780c975074b46172598a28f1ab839", + "sha256:a0e700637abcbd1caae58e0463861250095dfe330a8371733a471af706a4a29a" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==2.2.11" + }, "idna": { "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a", + "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.10" + "markers": "python_version >= '3'", + "version": "==3.2" }, "imageio": { "hashes": [ @@ -916,11 +1014,11 @@ }, "ipykernel": { "hashes": [ - "sha256:9a8576cb70a70cc8c63b0b6671e5f4767917071204653a5934e9b2c8680cec74", - "sha256:a4f51c53c7be3f93d75c25839183fa2dfa24908fc650dfd023b276c7a080dc73" + "sha256:61792e0de765e8b258489715d81b0ff2e87ec0ed9f006bb20819c4d40586dc19", + "sha256:7fb3e370dbb481b012b74bed4e794d2d16eb2a83930b31e6d8d030b9fdb4d5b4" ], "markers": "python_version >= '3.7'", - "version": "==6.0.1" + "version": "==6.0.2" }, "ipympl": { "hashes": [ @@ -1031,6 +1129,14 @@ "index": "pypi", "version": "==0.23.1" }, + "itsdangerous": { + "hashes": [ + "sha256:5174094b9637652bdb841a3029700391451bd092ba3db90600dea710ba28e97c", + "sha256:9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.1" + }, "jedi": { "hashes": [ "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20", @@ -1039,6 +1145,12 @@ "index": "pypi", "version": "==0.17.2" }, + "jieba": { + "hashes": [ + "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2" + ], + "version": "==0.42.1" + }, "jinja2": { "hashes": [ "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4", @@ -1194,11 +1306,11 @@ }, "jupyterlab-server": { "hashes": [ - "sha256:10ca364e764a6ca1e387530dfe5a09dc8fd563f1739b2b7b5a49e8cf5c4140ee", - "sha256:f300adf6bb0a952bebe9c807a3b2a345d62da39b476b4f69ea0dc6b5f3f6b97d" + "sha256:58d4b660fce8da4e90f0433ac54f462436fe5fbe731e3a281e15adcdecddb0eb", + "sha256:73279d1ffdcd3426f716bf5538cf1fdd2eb8a340ac25c5688f3c192c5bd3afc9" ], "markers": "python_version >= '3.6'", - "version": "==2.6.0" + "version": "==2.6.1" }, "jupyterlab-widgets": { "hashes": [ @@ -1444,6 +1556,13 @@ "markers": "python_version >= '3.5'", "version": "==0.1.2" }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, "meshio": { "hashes": [ "sha256:ac77a066584265d3426d01bd0fde9e99c47c35340a32d23790ccd22aa566cd75", @@ -1517,6 +1636,24 @@ "markers": "python_version >= '3.6'", "version": "==5.1.0" }, + "multiprocess": { + "hashes": [ + "sha256:0e0a5ae4bd84e4c22baddf824d3b8168214f8c1cce51e2cb080421cb1f7b04d1", + "sha256:206bb9b97b73f87fec1ed15a19f8762950256aa84225450abc7150d02855a083", + "sha256:35d41e410ca2a32977a483ae1f40f86b193b45cecf85567c2fae402fb8bf172e", + "sha256:6aa67e805e50b6e9dfc56dd0f0c85ac3409e6791d4ec5405c5f9bc0a47d745a4", + "sha256:6f812a1d3f198b7cacd63983f60e2dc1338bd4450893f90c435067b5a3127e6f", + "sha256:85941e650c277af44fc82e3e97faacb920e5ce3615238b540cbad4012d6f60e9", + "sha256:916a314a1e0f3454033d59672ba6181fa45948ab1091d68cdd479258576e7b27", + "sha256:9a02237eae21975155c816883479f72e239d16823a6bc063173d59acec9bcf41", + "sha256:a9f58945edb234591684c0a181b744a3231643814ef3a8f47cea9a2073b4b2bb", + "sha256:b3f866f7d9c7acc1a9cb1b6063a29f5cb140ff545b35b71fd4bfdac6f19d75fa", + "sha256:be3ad3eaf204abc646d85e70e41244f66d88200628a0ab867c8fc206b97cedbf", + "sha256:c85ffc38c50c5a4f32f3f3c1a284725b7b5040188f254eba6e572c53d3da525b", + "sha256:f12a939cd2f01d0a900e7ef2aaee3c351a49fd2297d7f760b537af22727561b8" + ], + "version": "==0.70.12.2" + }, "munch": { "hashes": [ "sha256:2d735f6f24d4dba3417fa448cae40c6e896ec1fdab6cdb5e6510999758a4dbd2", @@ -1596,6 +1733,13 @@ "markers": "python_version >= '3.5'", "version": "==3.6.2" }, + "nodeenv": { + "hashes": [ + "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b", + "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7" + ], + "version": "==1.6.0" + }, "notebook": { "hashes": [ "sha256:9c4625e2a2aa49d6eae4ce20cbc3d8976db19267e32d2a304880e0c10bf8aef9", @@ -1712,29 +1856,33 @@ }, "opencv-python": { "hashes": [ - "sha256:0118a086fad8d77acdf46ac68df49d4167fbb85420f8bcf2615d7b74fc03aae0", - "sha256:050227e5728ea8316ec114aca8f43d56253cbb1c50983e3b136a988254a83118", - "sha256:08327a38564786bf73e387736f080e8ad4c110b394ca4af2ecec8277b305bf44", - "sha256:0a3aef70b7c53bbd22ade86a4318b8a2ad98d3c3ed3d0c315f18bf1a2d868709", - "sha256:10325c3fd571e33a11eb5f0e5d265d73baef22dbb34c977f28df7e22de47b0bc", - "sha256:2436b71346d1eed423577fac8cd3aa9c0832ea97452444dc7f856b2f09600dba", - "sha256:4b8814d3f0cf01e8b8624125f7dcfb095893abcc04083cb4968fa1629bc81161", - "sha256:4e6c2d8320168a4f76822fbb76df3b18688ac5e068d49ac38a4ce39af0f8e1a6", - "sha256:6b2573c6367ec0052b37e375d18638a885dd7a10a5ef8dd726b391969c227f23", - "sha256:6e2070e35f2aaca3d1259093c786d4e373004b36d89a94e81943247c6ed3d4e1", - "sha256:89a2b45429bf945988a17b0404431d9d8fdc9e04fb2450b56fa01f6f9477101d", - "sha256:8cf81f53ac5ad900ca443a8252c4e0bc1256f1c2cb2d8459df2ba1ac014dfa36", - "sha256:9680ab256ab31bdafd74f6cf55eb570e5629b5604d50fd69dd1bd2a8124f0611", - "sha256:a8020cc6145c6934192189058743a55189750df6dff894396edb8b35a380cc48", - "sha256:b3bef3f2a2ab3c201784d12ec6b5c9e61c920c15b6854d8d2f62fd019e3df846", - "sha256:b724a96eeb88842bd2371b1ffe2da73b6295063ba5c029aa34139d25b8315a3f", - "sha256:c446555cbbc4f5e809f9c15ac1b6200024032d9859f5ac5a2ca7669d09e4c91c", - "sha256:d9004e2cc90bb2862cdc1d062fac5163d3def55b200081d4520d3e90b4c7197b", - "sha256:ef3102b70aa59ab3fed69df30465c1b7587d681e963dfff5146de233c75df7ba", - "sha256:f12f39c1e5001e1c00df5873e3eee6f0232b7723a60b7ef438b1e23f1341df0e" + "sha256:05c5139d620e8d02f7ce0921796d55736fa19fa15e2ec00a388db2eb1ae1e9a1", + "sha256:085232718f28bddd265da480874c37db5c7354cb08f23f4a68a8639b16276a89", + "sha256:18a4a14015eee30d9cd514db8cdefbf594b1d5c234762d27abe512d62a333bc3", + "sha256:205a73adb29c37e42475645519e612e843a985475da993d10b4d5daa6afec36a", + "sha256:3c001d3feec7f3140f1fb78dfc52ca28122db8240826882d175a208a89d2731b", + "sha256:437f30e300725e1d1b3744dbfbc66a523a4744792b58f3dbe1e9140c8f4dfba5", + "sha256:5366fcd6eae4243add3c8c92142045850f1db8e464bcf0b75313e1596b2e3671", + "sha256:54c64e86a087841869901fd34462bb6bec01cd4652800fdf5d92fe7b0596c82f", + "sha256:6763729fcfee2a08e069aa1982c9a8c1abf55b9cdf2fb9640eda1d85bdece19a", + "sha256:68813b720b88e4951e84399b9a8a7b532d45a07a96ea8f539636242f862e32e0", + "sha256:7f41b97d84ac66bdf13cb4d9f4dad3e159525ba1e3f421e670c787ce536eb70a", + "sha256:831b92fe63ce18dd628f71104da7e60596658b75e2fa16b83aefa3eb10c115e2", + "sha256:881f3d85269500e0c7d72b140a6ebb5c14a089f8140fb9da7ce01f12a245858e", + "sha256:8852be06c0749fef0d9c58f532bbcb0570968c59e41cf56b90f5c92593c6e108", + "sha256:8b5bc61be7fc8565140b746288b370a4bfdb4edb9d680b66bb914e7690485db1", + "sha256:8d3282138f3a8646941089aae142684910ebe40776266448eab5f4bb609fc63f", + "sha256:9a78558b5ae848386edbb843c761e5fed5a8480be9af16274a5a78838529edeb", + "sha256:b42bbba9f5421865377c7960bd4f3dd881003b322a6bf46ed2302b89224d102b", + "sha256:c360cb76ad1ddbd5d2d3e730b42f2ff6e4be08ea6f4a6eefacca175d27467e8f", + "sha256:cdc3363c2911d7cfc6c9f55308c51c2841a7aecbf0bf5e791499d220ce89d880", + "sha256:e1f54736272830a1e895cedf7a4ee67737e31e966d380c82a81ef22515d043a3", + "sha256:e42c644a70d5c54f53a4b114dbd88b4eb83f42a9ca998f07bd5682f3f404efcc", + "sha256:f1bda4d144f5204e077ca4571453ebb2015e5748d5e0043386c92c2bbf7f52eb", + "sha256:f3ac2355217114a683f3f72a9c40a5890914a59c4a2df62e4083c66ff65c9cf9" ], "markers": "python_version >= '3.6'", - "version": "==4.5.2.54" + "version": "==4.5.3.56" }, "openshift": { "hashes": [ @@ -1797,11 +1945,25 @@ }, "paddle2onnx": { "hashes": [ - "sha256:2584ff2966408201db76a4c5fe2261c3a302781beb9d9065598a87d50da33a85", - "sha256:ec3598a2bc7fcc8783aa88c7c1e67f6e34367f4196244fd0b0b0bba2ce0c5f28" + "sha256:654ef5f2fd951b0fed6214fe8667fe634d5eae5e76379fa500f6857778ba45b1", + "sha256:91a59e1ce3a86e650f4420447c0833f6257c35d6a254fcf462f216e234d1f896" ], "index": "pypi", - "version": "==0.6" + "version": "==0.7" + }, + "paddlehub": { + "hashes": [ + "sha256:15aed20cb142059c4bf82a6e2b65824a32113626acd10f5e3738d7c4f2c796e0" + ], + "index": "pypi", + "version": "==2.1.0" + }, + "paddlenlp": { + "hashes": [ + "sha256:591602b3a6d1a26bb688c51eafbf83a54eeb41559dbc3ff6eea12b4fcf26ab19" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.5" }, "paddlepaddle": { "hashes": [ @@ -1866,11 +2028,11 @@ }, "param": { "hashes": [ - "sha256:1f0f1133fbadcd2c5138e579b9934e29fd00f803af01d9bf6f9e6b80ecf1999b", - "sha256:fdfdb9544e7bdc0a1e5df7ced1c4840aa106625192b8efe0b6e2479f1519dc37" + "sha256:62fd2f679ed4f0dd2c146cf4b399ddc23e50df462e1c3080a3401747be56e195", + "sha256:b9857df01495bd55ddafb214fd1ed017d20699ce42ec2a0fd190d99caa03099f" ], "markers": "python_version >= '2.7'", - "version": "==1.10.1" + "version": "==1.11.1" }, "parasail": { "hashes": [ @@ -1946,6 +2108,14 @@ "index": "pypi", "version": "==8.2.0" }, + "platformdirs": { + "hashes": [ + "sha256:0b9547541f599d3d242078ae60b927b3e453f0ad52f58b4d4bc3be86aed3ec41", + "sha256:3b00d081227d9037bbbca521a5787796b5ef5000faea1e43fd76f1d44b06fcfa" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.0.2" + }, "pluggy": { "hashes": [ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", @@ -1961,6 +2131,14 @@ "index": "pypi", "version": "==2.0.0" }, + "pre-commit": { + "hashes": [ + "sha256:764972c60693dc668ba8e86eb29654ec3144501310f7198742a767bec385a378", + "sha256:b679d0fddd5b9d6d98783ae5f10fd0c4c59954f375b70a58cbe1ce9bcf9809a4" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==2.13.0" + }, "progress": { "hashes": [ "sha256:69ecedd1d1bbe71bf6313d88d1e6c4d2957b7f1d4f71312c211257f7dae64372" @@ -2086,6 +2264,14 @@ ], "version": "==0.2.8" }, + "pycodestyle": { + "hashes": [ + "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", + "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.7.0" + }, "pycparser": { "hashes": [ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", @@ -2094,6 +2280,42 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, + "pycryptodome": { + "hashes": [ + "sha256:09c1555a3fa450e7eaca41ea11cd00afe7c91fef52353488e65663777d8524e0", + "sha256:12222a5edc9ca4a29de15fbd5339099c4c26c56e13c2ceddf0b920794f26165d", + "sha256:1723ebee5561628ce96748501cdaa7afaa67329d753933296321f0be55358dce", + "sha256:1c5e1ca507de2ad93474be5cfe2bfa76b7cf039a1a32fc196f40935944871a06", + "sha256:2603c98ae04aac675fefcf71a6c87dc4bb74a75e9071ae3923bbc91a59f08d35", + "sha256:2dea65df54349cdfa43d6b2e8edb83f5f8d6861e5cf7b1fbc3e34c5694c85e27", + "sha256:31c1df17b3dc5f39600a4057d7db53ac372f492c955b9b75dd439f5d8b460129", + "sha256:38661348ecb71476037f1e1f553159b80d256c00f6c0b00502acac891f7116d9", + "sha256:3e2e3a06580c5f190df843cdb90ea28d61099cf4924334d5297a995de68e4673", + "sha256:3f840c49d38986f6e17dbc0673d37947c88bc9d2d9dba1c01b979b36f8447db1", + "sha256:501ab36aae360e31d0ec370cf5ce8ace6cb4112060d099b993bc02b36ac83fb6", + "sha256:60386d1d4cfaad299803b45a5bc2089696eaf6cdd56f9fc17479a6f89595cfc8", + "sha256:6260e24d41149268122dd39d4ebd5941e9d107f49463f7e071fd397e29923b0c", + "sha256:6bbf7fee7b7948b29d7e71fcacf48bac0c57fb41332007061a933f2d996f9713", + "sha256:6d2df5223b12437e644ce0a3be7809471ffa71de44ccd28b02180401982594a6", + "sha256:758949ca62690b1540dfb24ad773c6da9cd0e425189e83e39c038bbd52b8e438", + "sha256:77997519d8eb8a4adcd9a47b9cec18f9b323e296986528186c0e9a7a15d6a07e", + "sha256:7fd519b89585abf57bf47d90166903ec7b43af4fe23c92273ea09e6336af5c07", + "sha256:98213ac2b18dc1969a47bc65a79a8fca02a414249d0c8635abb081c7f38c91b6", + "sha256:99b2f3fc51d308286071d0953f92055504a6ffe829a832a9fc7a04318a7683dd", + "sha256:9b6f711b25e01931f1c61ce0115245a23cdc8b80bf8539ac0363bdcf27d649b6", + "sha256:a3105a0eb63eacf98c2ecb0eb4aa03f77f40fbac2bdde22020bb8a536b226bb8", + "sha256:a8eb8b6ea09ec1c2535bf39914377bc8abcab2c7d30fa9225eb4fe412024e427", + "sha256:a92d5c414e8ee1249e850789052608f582416e82422502dc0ac8c577808a9067", + "sha256:d3d6958d53ad307df5e8469cc44474a75393a434addf20ecd451f38a72fe29b8", + "sha256:e0a4d5933a88a2c98bbe19c0c722f5483dc628d7a38338ac2cb64a7dbd34064b", + "sha256:e3bf558c6aeb49afa9f0c06cee7fb5947ee5a1ff3bd794b653d39926b49077fa", + "sha256:e61e363d9a5d7916f3a4ce984a929514c0df3daf3b1b2eb5e6edbb131ee771cf", + "sha256:f977cdf725b20f6b8229b0c87acb98c7717e742ef9f46b113985303ae12a99da", + "sha256:fc7489a50323a0df02378bc2fff86eb69d94cc5639914346c736be981c6a02e7" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.10.1" + }, "pyct": { "hashes": [ "sha256:222e104d561b28cfdb56667d2ba10e5290b4466db66d0af38ab935577af85390", @@ -2117,6 +2339,14 @@ ], "version": "==0.27" }, + "pyflakes": { + "hashes": [ + "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", + "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.3.1" + }, "pygments": { "hashes": [ "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f", @@ -2127,72 +2357,106 @@ }, "pymongo": { "hashes": [ - "sha256:03be7ad107d252bb7325d4af6309fdd2c025d08854d35f0e7abc8bf048f4245e", - "sha256:071552b065e809d24c5653fcc14968cfd6fde4e279408640d5ac58e3353a3c5f", - "sha256:08b8723248730599c9803ae4c97b8f3f76c55219104303c88cb962a31e3bb5ee", - "sha256:08bda7b2c522ff9f1e554570da16298271ebb0c56ab9699446aacba249008988", - "sha256:0aaf4d44f1f819360f9432df538d54bbf850f18152f34e20337c01b828479171", - "sha256:0cabfc297f4cf921f15bc789a8fbfd7115eb9f813d3f47a74b609894bc66ab0d", - "sha256:13acf6164ead81c9fc2afa0e1ea6d6134352973ce2bb35496834fee057063c04", - "sha256:15b083d1b789b230e5ac284442d9ecb113c93f3785a6824f748befaab803b812", - "sha256:161fcd3281c42f644aa8dec7753cca2af03ce654e17d76da4f0dab34a12480ca", - "sha256:1a994a42f49dab5b6287e499be7d3d2751776486229980d8857ad53b8333d469", - "sha256:20d75ea11527331a2980ab04762a9d960bcfea9475c54bbeab777af880de61cd", - "sha256:225c61e08fe517aede7912937939e09adf086c8e6f7e40d4c85ad678c2c2aea3", - "sha256:3135dd574ef1286189f3f04a36c8b7a256376914f8cbbce66b94f13125ded858", - "sha256:3491c7de09e44eded16824cb58cf9b5cc1dc6f066a0bb7aa69929d02aa53b828", - "sha256:3551912f5c34d8dd7c32c6bb00ae04192af47f7b9f653608f107d19c1a21a194", - "sha256:38a7b5140a48fc91681cdb5cb95b7cd64640b43d19259fdd707fa9d5a715f2b2", - "sha256:3a3498a8326111221560e930f198b495ea6926937e249f475052ffc6893a6680", - "sha256:3bfc7689a1bacb9bcd2f2d5185d99507aa29f667a58dd8adaa43b5a348139e46", - "sha256:421d13523d11c57f57f257152bc4a6bb463aadf7a3918e9c96fefdd6be8dbfb8", - "sha256:424799c71ff435094e5fb823c40eebb4500f0e048133311e9c026467e8ccebac", - "sha256:474e21d0e07cd09679e357d1dac76e570dab86665e79a9d3354b10a279ac6fb3", - "sha256:4c7e8c8e1e1918dcf6a652ac4b9d87164587c26fd2ce5dd81e73a5ab3b3d492f", - "sha256:506a6dab4c7ffdcacdf0b8e70bd20eb2e77fa994519547c9d88d676400fcad58", - "sha256:510cd3bfabb63a07405b7b79fae63127e34c118b7531a2cbbafc7a24fd878594", - "sha256:517ba47ca04a55b1f50ee8df9fd97f6c37df5537d118fb2718952b8623860466", - "sha256:539d4cb1b16b57026999c53e5aab857fe706e70ae5310cc8c232479923f932e6", - "sha256:5c36428cc4f7fae56354db7f46677fd21222fc3cb1e8829549b851172033e043", - "sha256:5db59223ed1e634d842a053325f85f908359c6dac9c8ddce8ef145061fae7df8", - "sha256:5e606846c049ed40940524057bfdf1105af6066688c0e6a1a3ce2038589bae70", - "sha256:6060794aac9f7b0644b299f46a9c6cbc0bc470bd01572f4134df140afd41ded6", - "sha256:62c29bc36a6d9be68fe7b5aaf1e120b4aa66a958d1e146601fcd583eb12cae7b", - "sha256:73326b211e7410c8bd6a74500b1e3f392f39cf10862e243d00937e924f112c01", - "sha256:78f07961f4f214ea8e80be63cffd5cc158eb06cd922ffbf6c7155b11728f28f9", - "sha256:7c97554ea521f898753d9773891d0347ebfaddcc1dee2ad94850b163171bf1f1", - "sha256:8898f6699f740ca93a0879ed07d8e6db02d68af889d0ebb3d13ab017e6b1af1e", - "sha256:8a41fdc751dc4707a4fafb111c442411816a7c225ebb5cadb57599534b5d5372", - "sha256:8e0004b0393d72d76de94b4792a006cb960c1c65c7659930fbf9a81ce4341982", - "sha256:977b1d4f868986b4ba5d03c317fde4d3b66e687d74473130cd598e3103db34fa", - "sha256:9a4f6e0b01df820ba9ed0b4e618ca83a1c089e48d4f268d0e00dcd49893d4549", - "sha256:9b9298964389c180a063a9e8bac8a80ed42de11d04166b20249bfa0a489e0e0f", - "sha256:a08c8b322b671857c81f4c30cd3c8df2895fd3c0e9358714f39e0ef8fb327702", - "sha256:ad31f184dcd3271de26ab1f9c51574afb99e1b0e484ab1da3641256b723e4994", - "sha256:aff3656af2add93f290731a6b8930b23b35c0c09569150130a58192b3ec6fc61", - "sha256:b2f41261b648cf5dee425f37ff14f4ad151c2f24b827052b402637158fd056ef", - "sha256:b413117210fa6d92664c3d860571e8e8727c3e8f2ff197276c5d0cb365abd3ad", - "sha256:b7efc7e7049ef366777cfd35437c18a4166bb50a5606a1c840ee3b9624b54fc9", - "sha256:b8f94acd52e530a38f25e4d5bf7ddfdd4bea9193e718f58419def0d4406b58d3", - "sha256:d0a70151d7de8a3194cdc906bcc1a42e14594787c64b0c1c9c975e5a2af3e251", - "sha256:d360e5d5dd3d55bf5d1776964625018d85b937d1032bae1926dd52253decd0db", - "sha256:d4e62417e89b717a7bcd8576ac3108cd063225942cc91c5b37ff5465fdccd386", - "sha256:d65bac5f6724d9ea6f0b5a0f0e4952fbbf209adcf6b5583b54c54bd2fcd74dc0", - "sha256:e02beaab433fd1104b2804f909e694cfbdb6578020740a9051597adc1cd4e19f", - "sha256:e4b631688dfbdd61b5610e20b64b99d25771c6d52d9da73349342d2a0f11c46a", - "sha256:e4e9db78b71db2b1684ee4ecc3e32c4600f18cdf76e6b9ae03e338e52ee4b168", - "sha256:eb4d176394c37a76e8b0afe54b12d58614a67a60a7f8c0dd3a5afbb013c01092", - "sha256:f08665d3cc5abc2f770f472a9b5f720a9b3ab0b8b3bb97c7c1487515e5653d39", - "sha256:f3d851af3852f16ad4adc7ee054fd9c90a7a5063de94d815b7f6a88477b9f4c6", - "sha256:f4ba58157e8ae33ee86fadf9062c506e535afd904f07f9be32731f4410a23b7f", - "sha256:f664ed7613b8b18f0ce5696b146776266a038c19c5cd6efffa08ecc189b01b73", - "sha256:f947b359cc4769af8b49be7e37af01f05fcf15b401da2528021148e4a54426d1", - "sha256:fe4189846448df013cd9df11bba38ddf78043f8c290a9f06430732a7a8601cce", - "sha256:fea5cb1c63efe1399f0812532c7cf65458d38fd011be350bc5021dfcac39fba8", - "sha256:fedf0dee7a412ca6d1d6d92c158fe9cbaa8ea0cae90d268f9ccc0744de7a97d0", - "sha256:fffff7bfb6799a763d3742c59c6ee7ffadda21abed557637bc44ed1080876484" - ], - "version": "==3.11.4" + "sha256:02dc0b0f48ed3cd06c13b7e31b066bf91e00dac5f8147b0a0a45f9009bfab857", + "sha256:053b4ebf91c7395d1fcd2ce6a9edff0024575b7b2de6781554a4114448a8adc9", + "sha256:070a4ef689c9438a999ec3830e69b208ff0d12251846e064d947f97d819d1d05", + "sha256:072ba7cb65c8aa4d5c5659bf6722ee85781c9d7816dc00679b8b6f3dff1ddafc", + "sha256:0b6055e0ef451ff73c93d0348d122a0750dddf323b9361de5835dac2f6cf7fc1", + "sha256:11f9e0cfc84ade088a38df2708d0b958bb76360181df1b2e1e1a41beaa57952b", + "sha256:18290649759f9db660972442aa606f845c368db9b08c4c73770f6da14113569b", + "sha256:186104a94d39b8412f8e3de385acd990a628346a4402d4f3a288a82b8660bd22", + "sha256:1970cfe2aec1bf74b40cf30c130ad10cd968941694630386db33e1d044c22a2e", + "sha256:19d4bd0fc29aa405bb1781456c9cfff9fceabb68543741eb17234952dbc2bbb0", + "sha256:1bab889ae7640eba739f67fcbf8eff252dddc60d4495e6ddd3a87cd9a95fdb52", + "sha256:1bc6fe7279ff40c6818db002bf5284aa03ec181ea1b1ceaeee33c289d412afa7", + "sha256:208debdcf76ed39ebf24f38509f50dc1c100e31e8653817fedb8e1f867850a13", + "sha256:2399a85b54f68008e483b2871f4a458b4c980469c7fe921595ede073e4844f1e", + "sha256:246ec420e4c8744fceb4e259f906211b9c198e1f345e6158dcd7cbad3737e11e", + "sha256:24f8aeec4d6b894a6128844e50ff423dd02462ee83addf503c598ee3a80ddf3d", + "sha256:255a35bf29185f44b412e31a927d9dcedda7c2c380127ecc4fbf2f61b72fa978", + "sha256:2dbfbbded947a83a3dffc2bd1ec4750c17e40904692186e2c55a3ad314ca0222", + "sha256:2e92aa32300a0b5e4175caec7769f482b292769807024a86d674b3f19b8e3755", + "sha256:316c1b8723afa9870567cd6dff35d440b2afeda53aa13da6c5ab85f98ed6f5ca", + "sha256:333bfad77aa9cd11711febfb75eed0bb537a1d022e1c252714dad38993590240", + "sha256:39dafa2eaf577d1969f289dc9a44501859a1897eb45bd589e93ce843fc610800", + "sha256:3ce83f17f641a62a4dfb0ba1b8a3c1ced7c842f511b5450d90c030c7828e3693", + "sha256:46d5ec90276f71af3a29917b30f2aec2315a2759b5f8d45b3b63a07ca8a070a3", + "sha256:48d5bc80ab0af6b60c4163c5617f5cd23f2f880d7600940870ea5055816af024", + "sha256:4ba0def4abef058c0e5101e05e3d5266e6fffb9795bbf8be0fe912a7361a0209", + "sha256:5af390fa9faf56c93252dab09ea57cd020c9123aa921b63a0ed51832fdb492e7", + "sha256:5e574664f1468872cd40f74e4811e22b1aa4de9399d6bcfdf1ee6ea94c017fcf", + "sha256:625befa3bc9b40746a749115cc6a15bf20b9bd7597ca55d646205b479a2c99c7", + "sha256:6261bee7c5abadeac7497f8f1c43e521da78dd13b0a2439f526a7b0fc3788824", + "sha256:657ad80de8ec9ed656f28844efc801a0802961e8c6a85038d97ff6f555ef4919", + "sha256:6b89dc51206e4971c5568c797991eaaef5dc2a6118d67165858ad11752dba055", + "sha256:6e66780f14c2efaf989cd3ac613b03ee6a8e3a0ba7b96c0bb14adca71a427e55", + "sha256:6fb3f85870ae26896bb44e67db94045f2ebf00c5d41e6b66cdcbb5afd644fc18", + "sha256:701e08457183da70ed96b35a6b43e6ba1df0b47c837b063cde39a1fbe1aeda81", + "sha256:70761fd3c576b027eec882b43ee0a8e5b22ff9c20cdf4d0400e104bc29e53e34", + "sha256:73b400fdc22de84bae0dbf1a22613928a41612ec0a3d6ed47caf7ad4d3d0f2ff", + "sha256:7412a36798966624dc4c57d64aa43c2d1100b348abd98daaac8e99e57d87e1d7", + "sha256:78ecb8d42f50d393af912bfb1fb1dcc9aabe9967973efb49ee577e8f1cea494c", + "sha256:7c6a9948916a7bbcc6d3a9f6fb75db1acb5546078023bfb3db6efabcd5a67527", + "sha256:7c72d08acdf573455b2b9d2b75b8237654841d63a48bc2327dc102c6ee89b75a", + "sha256:7d98ce3c42921bb91566121b658e0d9d59a9082a9bd6f473190607ff25ab637f", + "sha256:845a8b83798b2fb11b09928413cb32692866bfbc28830a433d9fa4c8c3720dd0", + "sha256:94d38eba4d1b5eb3e6bfece0651b855a35c44f32fd91f512ab4ba41b8c0d3e66", + "sha256:9a13661681d17e43009bb3e85e837aa1ec5feeea1e3654682a01b8821940f8b3", + "sha256:a0e5dff6701fa615f165306e642709e1c1550d5b237c5a7a6ea299886828bd50", + "sha256:a2239556ff7241584ce57be1facf25081669bb457a9e5cbe68cce4aae6567aa1", + "sha256:a325600c83e61e3c9cebc0c2b1c8c4140fa887f789085075e8f44c8ff2547eb9", + "sha256:a3566acfbcde46911c52810374ecc0354fdb841284a3efef6ff7105bc007e9a8", + "sha256:a634a4730ce0b0934ed75e45beba730968e12b4dafbb22f69b3b2f616d9e644e", + "sha256:a6d055f01b83b1a4df8bb0c61983d3bdffa913764488910af3620e5c2450bf83", + "sha256:a752ecd1a26000a6d67be7c9a2e93801994a8b3f866ac95b672fbc00225ca91a", + "sha256:a9ba2a63777027b06b116e1ea8248e66fd1bedc2c644f93124b81a91ddbf6d88", + "sha256:aaa038eafb7186a4abbb311fcf20724be9363645882bbce540bef4797e812a7a", + "sha256:af586e85144023686fb0af09c8cdf672484ea182f352e7ceead3d832de381e1b", + "sha256:b0a0cf39f589e52d801fdef418305562bc030cdf8929217463c8433c65fd5c2f", + "sha256:b1c4874331ab960429caca81acb9d2932170d66d6d6f87e65dc4507a85aca152", + "sha256:b3b5b3cbc3fdf4fcfa292529df2a85b5d9c7053913a739d3069af1e12e12219f", + "sha256:b542d56ed1b8d5cf3bb36326f814bd2fbe8812dfd2582b80a15689ea433c0e35", + "sha256:b6ea08758b6673610b3c5bdf47189286cf9c58b1077558706a2f6f8744922527", + "sha256:b754240daafecd9d5fce426b0fbaaed03f4ebb130745c8a4ae9231fffb8d75e5", + "sha256:b772bab31cbd9cb911e41e1a611ebc9497f9a32a7348e2747c38210f75c00f41", + "sha256:b88d1742159bc93a078733f9789f563cef26f5e370eba810476a71aa98e5fbc2", + "sha256:b8bf42d3b32f586f4c9e37541769993783a534ad35531ce8a4379f6fa664fba9", + "sha256:bc9ac81e73573516070d24ce15da91281922811f385645df32bd3c8a45ab4684", + "sha256:c188db6cf9e14dbbb42f5254292be96f05374a35e7dfa087cc2140f0ff4f10f6", + "sha256:c55782a55f4a013a78ac5b6ee4b8731a192dea7ab09f1b6b3044c96d5128edd4", + "sha256:c5cab230e7cabdae9ff23c12271231283efefb944c1b79bed79a91beb65ba547", + "sha256:cbf8672edeb7b7128c4a939274801f0e32bbf5159987815e3d1eace625264a46", + "sha256:cc2894fe91f31a513860238ede69fe47fada21f9e7ddfe73f7f9fef93a971e41", + "sha256:cda9e628b1315beec8341e8c04aac9a0b910650b05e0751e42e399d5694aeacb", + "sha256:ceae3ab9e11a27aaab42878f1d203600dfd24f0e43678b47298219a0f10c0d30", + "sha256:ced944dcdd561476deef7cb7bfd4987c69fffbfeff6d02ca4d5d4fd592d559b7", + "sha256:d04ca462cb99077e6c059e97c072957caf2918e6e4191e3161c01c439e0193de", + "sha256:d1131562ddc2ea8a446f66c2648d7dabec2b3816fc818528eb978a75a6d23b2e", + "sha256:d1740776b70367277323fafb76bcf09753a5cc9824f5d705bac22a34ff3668ea", + "sha256:d6e11ffd43184d529d6752d6dcb62b994f903038a17ea2168ef1910c96324d26", + "sha256:d73e10772152605f6648ba4410318594f1043bbfe36d2fadee7c4b8912eff7c5", + "sha256:da8288bc4a7807c6715416deed1c57d94d5e03e93537889e002bf985be503f1a", + "sha256:db93608a246da44d728842b8fa9e45aa9782db76955f634a707739a8d53ff544", + "sha256:dcd3d0009fbb6e454d729f8b22d0063bd9171c31a55e0f0271119bd4f2700023", + "sha256:dd1f49f949a658c4e8f81ed73f9aad25fcc7d4f62f767f591e749e30038c4e1d", + "sha256:dd6ff2192f34bd622883c745a56f492b1c9ccd44e14953e8051c33024a2947d5", + "sha256:e018a4921657c2d3f89c720b7b90b9182e277178a04a7e9542cc79d7d787ca51", + "sha256:e2b7670c0c8c6b501464150dd49dd0d6be6cb7f049e064124911cec5514fa19e", + "sha256:e7a33322e08021c37e89cae8ff06327503e8a1719e97c69f32c31cbf6c30d72c", + "sha256:e8a82e35d52ad6f867e88096a1a2b9bdc7ec4d5e65c7b4976a248bf2d1a32a93", + "sha256:e9faf8d4712d5ea301d74abfcf6dafe4b7f4af7936e91f283b0ad7bf69ed3e3a", + "sha256:ec5ca7c0007ce268048bbe0ffc6846ed1616cf3d8628b136e81d5e64ff3f52a2", + "sha256:eee42a1cc06565f6b21caa1f504ec15e07de7ebfd520ab57f8cb3308bc118e22", + "sha256:f2acf9bbcd514e901f82c4ca6926bbd2ae61716728f110b4343eb0a69612d018", + "sha256:f55c1ddcc1f6050b07d468ce594f55dbf6107b459e16f735d26818d7be1e9538", + "sha256:f6977a520bd96e097c8a37a8cbb9faa1ea99d21bf84190195056e25f688af73d", + "sha256:f94c7d22fb36b184734dded7345a04ec5f95130421c775b8b0c65044ef073f34", + "sha256:fa8957e9a1b202cb45e6b839c241cd986c897be1e722b81d2f32e9c6aeee80b0", + "sha256:fd3854148005c808c485c754a184c71116372263709958b42aefbef2e5dd373a", + "sha256:fe5872ce6f9627deac8314bdffd3862624227c3de4c17ef0cc78bbf0402999eb", + "sha256:ffbae429ba9e42d0582d3ac63fdb410338892468a2107d8ff68228ec9a39a0ed" + ], + "version": "==3.12.0" }, "pyopenssl": { "hashes": [ @@ -2255,11 +2519,11 @@ }, "python-dateutil": { "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.1" + "version": "==2.8.2" }, "python-editor": { "hashes": [ @@ -2288,11 +2552,11 @@ }, "pytube": { "hashes": [ - "sha256:b3432b06d701b47af7793b194b57b5c121f293861874a37b86d832b7b8857b53", - "sha256:ed88d38e38206258ff74181f7776f5bfdb70fb835c32694b2c7e8131b51eb578" + "sha256:55df67d864436f8ddad7c91c37f5781793cd7b947be3d6e561282564a18f4d4c", + "sha256:d90f50889e0765a7ba819f139f30d5f77486de036b57622851ea148a7ff50baf" ], "index": "pypi", - "version": "==10.8.5" + "version": "==10.9.2" }, "pytz": { "hashes": [ @@ -2418,6 +2682,13 @@ "markers": "python_version >= '3.6'", "version": "==22.1.0" }, + "rarfile": { + "hashes": [ + "sha256:1094869119012f95c31a6f22cc3a9edbdca61861b805241116adbe2d737b68f8", + "sha256:67548769229c5bda0827c1663dce3f54644f9dbfba4ae86d4da2b2afd3e602a1" + ], + "version": "==4.0" + }, "rawpy": { "hashes": [ "sha256:0138672ffb7ba53d41ec80d792cd2c5bfbf46b45dc51574a38fd2205030833de", @@ -2437,56 +2708,60 @@ }, "regex": { "hashes": [ - "sha256:0e46c1191b2eb293a6912269ed08b4512e7e241bbf591f97e527492e04c77e93", - "sha256:18040755606b0c21281493ec309214bd61e41a170509e5014f41d6a5a586e161", - "sha256:1806370b2bef4d4193eebe8ee59a9fd7547836a34917b7badbe6561a8594d9cb", - "sha256:1ccbd41dbee3a31e18938096510b7d4ee53aa9fce2ee3dcc8ec82ae264f6acfd", - "sha256:1d386402ae7f3c9b107ae5863f7ecccb0167762c82a687ae6526b040feaa5ac6", - "sha256:210c359e6ee5b83f7d8c529ba3c75ba405481d50f35a420609b0db827e2e3bb5", - "sha256:268fe9dd1deb4a30c8593cabd63f7a241dfdc5bd9dd0233906c718db22cdd49a", - "sha256:361be4d311ac995a8c7ad577025a3ae3a538531b1f2cf32efd8b7e5d33a13e5a", - "sha256:3f7a92e60930f8fca2623d9e326c173b7cf2c8b7e4fdcf984b75a1d2fb08114d", - "sha256:444723ebaeb7fa8125f29c01a31101a3854ac3de293e317944022ae5effa53a4", - "sha256:494d0172774dc0beeea984b94c95389143db029575f7ca908edd74469321ea99", - "sha256:4b1999ef60c45357598935c12508abf56edbbb9c380df6f336de38a6c3a294ae", - "sha256:4fc86b729ab88fe8ac3ec92287df253c64aa71560d76da5acd8a2e245839c629", - "sha256:5049d00dbb78f9d166d1c704e93934d42cce0570842bb1a61695123d6b01de09", - "sha256:56bef6b414949e2c9acf96cb5d78de8b529c7b99752619494e78dc76f99fd005", - "sha256:59845101de68fd5d3a1145df9ea022e85ecd1b49300ea68307ad4302320f6f61", - "sha256:6b8b629f93246e507287ee07e26744beaffb4c56ed520576deac8b615bd76012", - "sha256:6c72ebb72e64e9bd195cb35a9b9bbfb955fd953b295255b8ae3e4ad4a146b615", - "sha256:7743798dfb573d006f1143d745bf17efad39775a5190b347da5d83079646be56", - "sha256:78a2a885345a2d60b5e68099e877757d5ed12e46ba1e87507175f14f80892af3", - "sha256:849802379a660206277675aa5a5c327f5c910c690649535863ddf329b0ba8c87", - "sha256:8cf6728f89b071bd3ab37cb8a0e306f4de897553a0ed07442015ee65fbf53d62", - "sha256:a1b6a3f600d6aff97e3f28c34192c9ed93fee293bd96ef327b64adb51a74b2f6", - "sha256:a548bb51c4476332ce4139df8e637386730f79a92652a907d12c696b6252b64d", - "sha256:a8a5826d8a1b64e2ff9af488cc179e1a4d0f144d11ce486a9f34ea38ccedf4ef", - "sha256:b024ee43ee6b310fad5acaee23e6485b21468718cb792a9d1693eecacc3f0b7e", - "sha256:b092754c06852e8a8b022004aff56c24b06310189186805800d09313c37ce1f8", - "sha256:b1dbeef938281f240347d50f28ae53c4b046a23389cd1fc4acec5ea0eae646a1", - "sha256:bf819c5b77ff44accc9a24e31f1f7ceaaf6c960816913ed3ef8443b9d20d81b6", - "sha256:c11f2fca544b5e30a0e813023196a63b1cb9869106ef9a26e9dae28bce3e4e26", - "sha256:ce269e903b00d1ab4746793e9c50a57eec5d5388681abef074d7b9a65748fca5", - "sha256:d0cf2651a8804f6325747c7e55e3be0f90ee2848e25d6b817aa2728d263f9abb", - "sha256:e07e92935040c67f49571779d115ecb3e727016d42fb36ee0d8757db4ca12ee0", - "sha256:e80d2851109e56420b71f9702ad1646e2f0364528adbf6af85527bc61e49f394", - "sha256:ed77b97896312bc2deafe137ca2626e8b63808f5bedb944f73665c68093688a7", - "sha256:f32f47fb22c988c0b35756024b61d156e5c4011cb8004aa53d93b03323c45657", - "sha256:fdad3122b69cdabdb3da4c2a4107875913ac78dab0117fc73f988ad589c66b66" - ], - "version": "==2021.7.1" + "sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f", + "sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad", + "sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a", + "sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf", + "sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59", + "sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d", + "sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895", + "sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4", + "sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3", + "sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222", + "sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0", + "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c", + "sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417", + "sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d", + "sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d", + "sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761", + "sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0", + "sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026", + "sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854", + "sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb", + "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d", + "sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068", + "sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde", + "sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d", + "sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec", + "sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa", + "sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd", + "sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b", + "sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26", + "sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2", + "sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f", + "sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694", + "sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0", + "sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407", + "sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874", + "sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035", + "sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d", + "sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c", + "sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5", + "sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985", + "sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58" + ], + "version": "==2021.7.6" }, "requests": { "extras": [ "socks" ], "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.25.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.26.0" }, "requests-oauthlib": { "hashes": [ @@ -2518,11 +2793,11 @@ }, "rich": { "hashes": [ - "sha256:6e8a3e2c61e6cf6193bfcffbb89865a0973af7779d3ead913fdbbbc33f457c2c", - "sha256:9fb2404c4e870d4de3837c11d0cd1f26c44725865535caba1379c2343a49f6a1" + "sha256:128261b3e2419a4ef9c97066ccc2abbfb49fa7c5e89c3fe4056d00aa5e9c1e65", + "sha256:d3f72827cd5df13b2ef7f1a97f81ec65548d4fdeb92cef653234f227580bbb2a" ], - "markers": "python_version >= '3.6' and python_version < '4.0'", - "version": "==10.4.0" + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==10.6.0" }, "rsa": { "hashes": [ @@ -2542,30 +2817,30 @@ }, "ruamel.yaml.clib": { "hashes": [ - "sha256:091a38f04f8a332ba7b3dba26197cd522bc29936943b3d1732ce3c463bb6b275", - "sha256:202e4751f038383241036e79640e7efd23d7272e3ce0cc8a11b9804ad604c5da", - "sha256:243941fe8f98053662f0394057b29d7146fe56e1b0011971302ea75e4b111529", - "sha256:2ae2f58c18991c8565d41018177548a91c2f1511d8a185254632388f142fbae9", - "sha256:2b9a62080d18c7fa17443e37f0d941d1be0a66ddcf5be5253f91cc59a15a9c1e", - "sha256:2d75c965c407fdef9d1b33cd39faf47aa106d3fa2cf83960ec9ed95c4c9a55bc", - "sha256:3271fb4a379050735f90177d1e61b5cc9acb5130baf995f3c775fa2aa2b113fb", - "sha256:329ac9064c1cfff9fc77fbecd90d07d698176fcd0720bfef9c2d27faa09dcc0e", - "sha256:3e506603394f5a678e9b924324bc1352c0493d7010ab4df687eb6d868631f9fb", - "sha256:650cc8e65e2568fac84dc14970a09fe21b013a90621fff1626ea6d656cc03dc4", - "sha256:729869106d5b7eb5e0260f7da4fcfef2cd9b324729fadc08edc27b1e86ad3013", - "sha256:769468005ce63bad78575b9d9f095f388ac1f45a331969e04135ac9626c3529d", - "sha256:83d72c5434151071cb67690be0034f9162ea282e58e47f9e8d23e8d14ca96584", - "sha256:a6d8749819403338093c61ee897b97d0f4aa73297e97feb1705d143c002b5bed", - "sha256:aa157cee912030d8abfb97b278295abbb7923dedfd892f2e94c22adbf5730398", - "sha256:b1772bff158f785085ebc8e635a0b9450f0072413bc89d8fc7f0ee803d1ab7f8", - "sha256:b9f95ae85986b53d6d0d253d570a9bb3a229e5319f1f76b2ba7809fa86cad890", - "sha256:c8a04c3f62a0b6a2696d003dd30e96e0b9d4a5ff450fe359c39a4a7466b9b935", - "sha256:f012b89c56f936e31f12a1484f08964c4681ae75488bc79c8909f37c517500f6", - "sha256:f997f13fd94e37e8b7d7dbe759088bb428adc6570da06b64a913d932d891ac8d", - "sha256:fd400bd19ea3e86bad9fb5176ab7efb6efb5e440cc2fd435c86de021620d8fa7" + "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd", + "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0", + "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277", + "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104", + "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd", + "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78", + "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99", + "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527", + "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84", + "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7", + "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468", + "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b", + "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94", + "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233", + "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb", + "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5", + "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe", + "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751", + "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502", + "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed", + "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c" ], "markers": "python_version < '3.10' and platform_python_implementation == 'CPython'", - "version": "==0.2.4" + "version": "==0.2.6" }, "scikit-image": { "hashes": [ @@ -2727,10 +3002,16 @@ }, "sentry-sdk": { "hashes": [ - "sha256:c1227d38dca315ba35182373f129c3e2722e8ed999e52584e6aca7d287870739", - "sha256:c7d380a21281e15be3d9f67a3c4fbb4f800c481d88ff8d8931f39486dd7b4ada" + "sha256:5210a712dd57d88d225c1fc3fe3a3626fee493637bcd54e204826cf04b8d769c", + "sha256:6864dcb6f7dec692635e5518c2a5c80010adf673c70340817f1a1b713d65bb41" ], - "version": "==1.1.0" + "version": "==1.3.0" + }, + "seqeval": { + "hashes": [ + "sha256:f28e97c3ab96d6fcd32b648f6438ff2e09cfba87f05939da9b3970713ec56e6f" + ], + "version": "==1.2.2" }, "shapely": { "hashes": [ @@ -2760,6 +3041,16 @@ ], "version": "==1.7.1" }, + "shellcheck-py": { + "hashes": [ + "sha256:8855607a09888a7fcc6d9289772a29847d19b9785fd57239993db487a861a977", + "sha256:9f0e0a6498102bb8a72d1e268b34615f5f2f0abdbb70196261fd9c2ac75cbb08", + "sha256:a45daaab5b3e60daca6c72935d847075aa1177f1d0e01a258268b17a88b5c7e0", + "sha256:d594a9750e322b23894f0dd1447542078ad7da6ad4cd3628e6f22707352abd42" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.2.1" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -2768,6 +3059,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, + "smmap": { + "hashes": [ + "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182", + "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2" + ], + "markers": "python_version >= '3.5'", + "version": "==4.0.0" + }, "sniffio": { "hashes": [ "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663", @@ -2788,39 +3087,39 @@ }, "sqlalchemy": { "hashes": [ - "sha256:0f6d467b67a7e5048f1408e8ea60d6caa70be5b386d0eebbf1185ab49cb8c7e4", - "sha256:238d78b3110b7f7cffdb70bf9cda686e0d876a849bc78ba4d471aa7b1461f306", - "sha256:25c0e0f3a7e8c19350086b3c0fe93c4def045cec053d749ef15da710c4d54c81", - "sha256:2f60a2e599cf5cf5e5327ce60f2918b897e42ad9f405d10dd01e37869c0ce6fc", - "sha256:38ee3a266afef2978e82824650457f70c5d74ec0cadec1b10fe5ed6f038eb5d0", - "sha256:46361690f1e1c5385994a4caeb6e8126063ff593a5c635700bbc1245de793c1e", - "sha256:46b99eab618cdc1c871ea707b7c52edc23cfea6c750740cd242ba62b5c84de7f", - "sha256:4a67371752fd86d1d03a3b82d4e75404608f6f4d579b9676124079a22a40c79f", - "sha256:525dd3c2205b11a2bc6d770bf1ec63bde0253fd754b4c19c399d27ddc9dad0d3", - "sha256:6c8406c3d8c1c7d15da454de15d77f7bb48d14ede5db994f74226c348cf1050e", - "sha256:6da83225a23eaf7b3f48f3d5f53c91b2cf00fbfa48b24a7a758160112dd3e123", - "sha256:7150e5b543b466f45f668b352f7abda27998cc8035f051d1b7e9524ca9eb2f5f", - "sha256:76fbc24311a3d039d6cd147d396719f606d96d1413f3816c028a48e29367f646", - "sha256:854a7b15750e617e16f8d65dbc004f065a7963544b253b923f16109557648777", - "sha256:86c079732328f1add097b0b8079cd532b5d28e207fac93e9d6ea5f487506deef", - "sha256:8d860c62e3f51623ccd528d8fac44580501df557d4b467cc5581587fcf057719", - "sha256:9675d5bc7e4f96a7bb2b54d14e9b269a5fb6e5d36ecc7d01f0f65bb9af3185f9", - "sha256:9841762d114018c49483c089fa2d47f7e612e57666323f615913d7d7f46e9606", - "sha256:9eb25bcf9161e2fcbe9eebe8e829719b2334e849183f0e496bf4b83722bcccfa", - "sha256:aad3234a41340e9cf6184e621694e2a7233ba3f8aef9b1e6de8cba431b45ebd2", - "sha256:b502b5e2f08500cc4b8d29bfc4f51d805adcbc00f8d149e98fda8aae85ddb644", - "sha256:b86d83fefc8a8c394f3490c37e1953bc16c311a3d1d1cf91518793bfb9847fb4", - "sha256:c0eb2cd3ad4967fcbdd9e066e8cd91fe2c23c671dbae9952f0b4d3d42832cc5f", - "sha256:e0d48456e1aa4f0537f9c9af7be71e1f0659ff68bc1cd538ebc785f6b007bd0d", - "sha256:eaee5dd378f6f0d7c3ec49aeeb26564d55ac0ad73b9b4688bf29e66deabddf73", - "sha256:f14acb0fd16d404fda9370f93aace682f284340c89c3442ac747c5466ac7e2b5", - "sha256:f6fc526bd70898489d02bf52c8f0632ab377592ae954d0c0a5bb38d618dddaa9", - "sha256:fcd84e4d46a86291495d131a7824ba38d2e8278bda9425c50661a04633174319", - "sha256:ff38ecf89c69a531a7326c2dae71982edfe2f805f3c016cdc5bfd1a04ebf80cb", - "sha256:ff8bebc7a9d297dff2003460e01db2c20c63818b45fb19170f388b1a72fe5a14" + "sha256:07e9054f4df612beadd12ca8a5342246bffcad74a1fa8df1368d1f2bb07d8fc7", + "sha256:0b7af10ecd1c3829ddf824e39129e026476af6a261388db4d26bf11525fd8d05", + "sha256:20a5ecd03134c7ed2c05dfdf5bd96d84480afeebe3484e416f7d7ec8c92596ae", + "sha256:2ad74f0a7ae8c4fa374d3be26cdf8c0897669ba3fd8bad4607710bc2fb7f132d", + "sha256:340fb8eda79e5b116f761c953879c98c423eca82481d5cdad762beb108ee763e", + "sha256:4c8dc1ca3330b716c48317b4d91911e00a54c0f2de486c9c25ec0c54ebf12b5f", + "sha256:5042a7d43a8e0a8ffc8d2acacbd5fad1edf8336c376714632a5c61eff56ac06e", + "sha256:538544799d537684e83e697298fd5078252ee68f23b44d8271f77647f225bca3", + "sha256:53b17656bacdb3b194bc6cff1bd2e044879cf015ab5352c932173c2172a4b99d", + "sha256:5dbcb3fd1d64d0835e383ea091037ca6aa70a43bd1cabb0c71c27796f2c5173f", + "sha256:628120ce7ef7f31824929c244894ee22a98d706d8879fb5441e1c572e02ca2ae", + "sha256:640fc3556a1022a781f3f07fd5dc9da842ef87f873139402d5d98d64d776360f", + "sha256:6774f2001e6359b041b8af3b9bc7669afc6adce39438fae99bfacf4b03490d54", + "sha256:6bc28702213988c96e394685ad4103a4e347305cf90569693bef8e3d12f233ae", + "sha256:70b978fb1bbb629e9ce41235511d89ef9d694e3933b5a52dd6d0a4040b6c7830", + "sha256:87cf4054632c20160592ca2917aec93bb83b12b3a39c865feab1ba44e0ed120d", + "sha256:89dbe4a792f28fd21d3319d26ceea32a3132f1c5ae578ec513f77e4c2adb9b91", + "sha256:8a98e38cb07b63459070c3a63abd5059f254d2ddec7afe77824e160f6b9e26c3", + "sha256:8f77ad5628e82f76ace2ff9a5b10ee87688bda0867f3e269cab5ed8be7e4ccc5", + "sha256:92c9f6dbe3b3d7059beea12e5601b0b37dd7a51f9bb29fbc98ab314e2a8ffdb7", + "sha256:ba84fb12826e4db193d5fbfdcf475f85c07fdfb76b84b3fb1504905f540db7ab", + "sha256:ba8fd99b546aacac74c97bb0676dd5270a1cd84c44fb67adc71d00ccabcb34a8", + "sha256:bee8b2a399c6be1642d5cfcfb9d0d438fcacdd5188e0b16366fa15dbd49ec667", + "sha256:cfa0c25e4c87517a679d97d0617ddaccb46337f558beac72e7d85c2f34365a35", + "sha256:da11e254ab264f515b59d16f5d1ff24f5f02fbf0b9de2d2981e704176a75c03a", + "sha256:dae7ab0c4d34d40895e92b71149bcd72a2f7c5971dc013d1c29393b6067448e3", + "sha256:decb9caf3a5695a8a4ebe7153b8ef7dcc57f85dc16896e3a33d5cf3e629ac396", + "sha256:e10be2b717979260db0f0fa6a531e6ddccf0d85cca11983b41d04049214fa0fc", + "sha256:eb418ec022538b24d73260b694ddb5f3878d554614a4611decb433d8eee69acd", + "sha256:ef998f03ee92e6c98acdfac464c145e0a9949301b6e83688d7194e746314fcba" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.4.20" + "version": "==1.4.21" }, "supervisor": { "hashes": [ @@ -2874,10 +3173,10 @@ }, "tensorflow-serving-api": { "hashes": [ - "sha256:11ebbc6a0f39542c10e6de80d187357c4c930c06a57a8a2ef539341be9a7c470" + "sha256:76114a89f973c9983096b0e70ce99bdfde230dad12ea987ded699815e440c04d" ], "index": "pypi", - "version": "==2.4.1" + "version": "==2.4.2" }, "termcolor": { "hashes": [ @@ -2903,17 +3202,17 @@ }, "texttable": { "hashes": [ - "sha256:ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436", - "sha256:f802f2ef8459058736264210f716c757cbf85007a30886d8541aa8c3404f1dda" + "sha256:42ee7b9e15f7b225747c3fa08f43c5d6c83bc899f80ff9bae9319334824076e9", + "sha256:dd2b0eaebb2a9e167d1cefedab4700e5dcbdb076114eed30b58b97ed6b37d6f2" ], - "version": "==1.6.3" + "version": "==1.6.4" }, "thamos": { "hashes": [ - "sha256:5010ae84b95bd63533a43b9dca693b7429fe6324424ecb028a4cfce303b78826", - "sha256:a0754b5bb896f224b027613ae0c0d5840ec65e8a7ee1685ad781c6719089ece7" + "sha256:055e29aa58abaf68a2c8324ef7001787e9585ff5ea3a4c5a24886e5e044308a7", + "sha256:462a3c2568645e7b77fccb8b7ed91ca12b5729fd5a7c25cc22aacf3aa0e4b6b6" ], - "version": "==1.18.4" + "version": "==1.19.0" }, "thoth-analyzer": { "hashes": [ @@ -2924,10 +3223,10 @@ }, "thoth-common": { "hashes": [ - "sha256:1587a7bdf3b302826abbf7584b7d7be4c07e9d8994e499ac577942ae4a6dc31e", - "sha256:18dc9c8ab68ccfa1dd1dfe132245019f3ab98891740597d32b80305240c5edc5" + "sha256:7f8f04d8013cfb7b41e170f46cbde683f9bb5b6db2b01d7c36a47c9d4ef29b7c", + "sha256:d2a8805fdaad8d304b1a6479d9460cef4c8aaa26785f900aa5adbf240e53198b" ], - "version": "==0.31.0" + "version": "==0.32.0" }, "thoth-python": { "hashes": [ @@ -2937,11 +3236,11 @@ }, "threadpoolctl": { "hashes": [ - "sha256:38b74ca20ff3bb42caca8b00055111d74159ee95c4370882bbff2b93d24da725", - "sha256:ddc57c96a38beb63db45d6c159b5ab07b6bced12c45a1f07b2b92f272aebfa6b" + "sha256:86d4b6801456d780e94681d155779058759eaef3c3564758b17b6c99db5f81cb", + "sha256:e5a995e3ffae202758fa8a90082e35783b9370699627ae2733cd1c3a73553616" ], - "markers": "python_version >= '3.5'", - "version": "==2.1.0" + "markers": "python_version >= '3.6'", + "version": "==2.2.0" }, "tifffile": { "hashes": [ @@ -3057,11 +3356,11 @@ }, "tqdm": { "hashes": [ - "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd", - "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2" + "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64", + "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a" ], "index": "pypi", - "version": "==4.61.1" + "version": "==4.61.2" }, "traitlets": { "hashes": [ @@ -3121,7 +3420,7 @@ "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4", "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.6" }, "vectormath": { @@ -3132,11 +3431,17 @@ }, "virtualenv": { "hashes": [ - "sha256:14fdf849f80dbb29a4eb6caa9875d476ee2a5cf76a5f5415fa2f1606010ab467", - "sha256:2b0126166ea7c9c3661f5b8e06773d28f83322de7a3ff7d06f0aed18c9de6a76" + "sha256:51df5d8a2fad5d1b13e088ff38a433475768ff61f202356bb9812c454c20ae45", + "sha256:e4fc84337dce37ba34ef520bf2d4392b392999dbe47df992870dc23230f6b758" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.7" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.6.0" + }, + "visualdl": { + "hashes": [ + "sha256:449f6ec1008a5d2bb8469ee3f1a0dbda71106c257d807d5c1b6674d2bef44e2e" + ], + "version": "==2.2.0" }, "vtk": { "hashes": [ @@ -3223,11 +3528,11 @@ }, "yamlloader": { "hashes": [ - "sha256:dc132ef450b10a73d51a89a4124cd8a0b76567ca938883e3ceb41222729589ed", - "sha256:e96dc3dc6895d814c330c054c966d993fc81ef1dbf5a30a4bdafeb256359e058" + "sha256:1dde3127e570ad60583711b8963ca3e06fe042e5272d17bea80f12a5366198dd", + "sha256:8a297c7a197683ba02e5e2b882ffd6c6180d01bdefb534b69cd3962df020bfe6" ], "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "version": "==1.1.0" }, "yarl": { "hashes": [ @@ -3277,7 +3582,7 @@ "sha256:0498039b3e110f53824417a9f59418a20843e8752b8b15c26bb81a659d4aec5c", "sha256:9da195db6630b76f0d37612f195dd7c325e280ad398dae4fcf30890a124ceb74" ], - "markers": "python_version < '4.0' and python_full_version >= '3.6.2'", + "markers": "python_version < '4' and python_full_version >= '3.6.2'", "version": "==2.0.0" }, "zope.interface": { diff --git a/.docker/builder/run b/.docker/builder/run index eca0c18c006..0f9e68e55d7 100755 --- a/.docker/builder/run +++ b/.docker/builder/run @@ -7,6 +7,7 @@ set -x # Generate htdigest password file for webdav access if it doesn't exist. JUPYTER_ENABLE_WEBDAV=${JUPYTER_ENABLE_WEBDAV:-false} +export HUB_HOME=/tmp export JUPYTER_ENABLE_WEBDAV diff --git a/notebooks/103-paddle-onnx-to-openvino/103-paddle-onnx-to-openvino-classification.ipynb b/notebooks/103-paddle-onnx-to-openvino/103-paddle-onnx-to-openvino-classification.ipynb new file mode 100644 index 00000000000..7f3c013c40b --- /dev/null +++ b/notebooks/103-paddle-onnx-to-openvino/103-paddle-onnx-to-openvino-classification.ipynb @@ -0,0 +1,435 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "545c60f5-afbd-41e8-bf1a-fe437c8e4f11", + "metadata": { + "id": "JwEAhQVzkAwA" + }, + "source": [ + "# Convert PaddlePaddle Classification Model to ONNX and OpenVINO IR\n", + "\n", + "This tutorial demonstrates step-by-step instructions to convert a PaddlePaddle classification model to OpenVINO IR, and do inference on the converted model.\n", + "\n", + "The model source is https://www.paddlepaddle.org.cn/hubdetail?name=mobilenet_v3_large_imagenet_ssld&en_category=ImageClassification" + ] + }, + { + "cell_type": "markdown", + "id": "aa1a7c38-bed0-4f61-8436-e7d53e1b8aed", + "metadata": {}, + "source": [ + "## Preparation\n", + "\n", + "### Install PaddlePaddle and Upgrade OpenVINO\n", + "\n", + "PaddlePaddle packages are not installed by the default OpenVINO Notebooks installation. Running the cell below checks if they are already installed in the current environment, and installs them if necessary. The Model Optimizer command in this notebook, `mo`, was introduced in OpenVINO 2021.4. If your OpenVINO version is lower, running this cell will upgrade openvino-dev. You can also upgrade all the packages in openvino_env by running `pip install --upgrade -r requirements.txt` in a terminal where you activated the openvino_env environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d6859fa3-f09a-4df5-9b22-9c8114663d28", + "metadata": {}, + "outputs": [], + "source": [ + "installed = !pip show paddlepaddle paddlehub paddle2onnx\n", + "if \"WARNING\" in installed.get_nlstr():\n", + " print(\"Installing PaddlePaddle requirements...\")\n", + " !pip install --upgrade \"paddlepaddle>=2.1.0\" \"paddlehub\" \"paddle2onnx>=0.6\"\n", + "else:\n", + " import paddle\n", + " import paddle2onnx\n", + " if paddle2onnx.__version__ < \"0.6\" or paddle.__version__ < \"2.1.0\":\n", + " print(\"Upgrading PaddlePaddle requirements...\")\n", + " !pip install --upgrade \"paddlepaddle>=2.1.0\" \"paddlehub\" \"paddle2onnx>=0.6\"\n", + "print(\"The PaddlePaddle requirements are installed\")\n", + "\n", + "import openvino.inference_engine\n", + "\n", + "if \"2021.4\" not in openvino.inference_engine.get_version():\n", + " print(\"Installing OpenVINO 2021.4. This may take a while...\")\n", + " print(\"It is recommended to restart the Jupyter Kernel after installation, \"\n", + " \"with Kernel->Restart Kernel\")\n", + " install_result = %sx python -m pip install --upgrade openvino-dev==2021.4.*\n", + " install_result = [line for line in install_result if \"Requirement already \" not in line]\n", + " print(\"\\n\".join(install_result))\n", + "else:\n", + " print(\"OpenVINO 2021.4 is installed.\")" + ] + }, + { + "cell_type": "markdown", + "id": "75e4d91f-8f97-4690-9c0d-aa8b9c84f4a9", + "metadata": {}, + "source": [ + "### Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db25c6f1-db8b-4b17-a6c7-6f351508ba90", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import time\n", + "\n", + "import cv2\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import paddlehub as hub\n", + "from IPython.display import Markdown, display\n", + "from openvino.inference_engine import IECore\n", + "from paddle.static import InputSpec\n", + "from PIL import Image\n", + "from scipy.special import softmax" + ] + }, + { + "cell_type": "markdown", + "id": "fb5d1b57-8cf5-493b-9cd6-b67800542ea8", + "metadata": {}, + "source": [ + "### Settings\n", + "\n", + "Set `IMAGE_FILENAME` to the filename of an image to use. Set `MODEL_NAME` to the PaddlePaddle model to download from PaddleHub. `MODEL_NAME` will also be the base name for the converted ONNX and IR models. The notebook is tested with the [mobilenet_v3_large_imagenet_ssld](https://www.paddlepaddle.org.cn/hubdetail?name=mobilenet_v3_large_imagenet_ssld&en_category=ImageClassification) model. Other models may use different preprocessing methods and therefore require some modification to get the same results on the original and converted model.\n", + "\n", + "`hub.config.server` is the URL to the PaddleHub server. You should not need to modify this setting." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3cf545ce-15c9-4bb6-9994-896019091b7f", + "metadata": {}, + "outputs": [], + "source": [ + "IMAGE_FILENAME = \"coco_close.jpg\"\n", + "\n", + "MODEL_NAME = \"mobilenet_v3_large_imagenet_ssld\"\n", + "hub.config.server = \"https://paddlepaddle.org.cn/paddlehub\"" + ] + }, + { + "cell_type": "markdown", + "id": "03046a49-b5dc-4309-891d-4fda3ec8a018", + "metadata": {}, + "source": [ + "## Show Inference on PaddlePaddle Model\n", + "\n", + "In the next cell, we load and download the model from PaddleHub, read and display an image, do inference on that image, and show the result.\n", + "\n", + "The first time you run this notebook, the PaddlePaddle model is downloaded from PaddleHub. This may take a while." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63cb401f-c0a4-4e11-a386-8b023c097c75", + "metadata": {}, + "outputs": [], + "source": [ + "classifier = hub.Module(name=MODEL_NAME)\n", + "# Load image in BGR format, as specified in model documentation\n", + "image = cv2.imread(IMAGE_FILENAME)\n", + "plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))\n", + "result = classifier.classification(images=[image])\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "id": "e02f54bf-b40f-4261-93d6-8618cc297a1b", + "metadata": {}, + "source": [ + "`classifier.classification()` takes an image as input and returns the class name of the image. Preprocessing the image and converting the network result to a class name is done behind the scenes. Uncomment the next cell to see the PaddlePaddle source code to load data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51263cfe-4d3d-4aa5-b920-0aec02177292", + "metadata": {}, + "outputs": [], + "source": [ + "# import mobilenet_v3_large_imagenet_ssld.data_feed\n", + "# %load $mobilenet_v3_large_imagenet_ssld.data_feed.__file__" + ] + }, + { + "cell_type": "markdown", + "id": "da21823e-60ce-494a-8c41-9418877cada5", + "metadata": {}, + "source": [ + "The `data_feed` module shows that images are normalized, resized and cropped and that the BGR image is converted to RGB before propagating through the network. In the next cell, we import the `process_image` function to it to do inference on the OpenVINO IR model with the same method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "64a4a36f-d7ed-4173-872a-fe545b4f0477", + "metadata": {}, + "outputs": [], + "source": [ + "from mobilenet_v3_large_imagenet_ssld.data_feed import process_image" + ] + }, + { + "cell_type": "markdown", + "id": "1fe900d4-02d5-4f4c-aca4-195efc4da3b8", + "metadata": {}, + "source": [ + "Show the effect of the `process_image()` function to show the effect of cropping and resizing. Because of the normalization, the colors will look strange, and matplotlib will warn about clipping values. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "09c84353-c6f0-4ff4-b90f-70bd90dd4dea", + "metadata": {}, + "outputs": [], + "source": [ + "pil_image = Image.open(IMAGE_FILENAME)\n", + "processed_image = process_image(pil_image)\n", + "print(f\"Processed image shape: {processed_image.shape}\")\n", + "# Processed image is in (C,H,W) format, convert to (H,W,C) to show the image\n", + "plt.imshow(np.transpose(processed_image, (1, 2, 0)))" + ] + }, + { + "cell_type": "markdown", + "id": "dc0cbe95-690c-4078-b8d5-f1b063357d26", + "metadata": {}, + "source": [ + "## Convert the Model to OpenVINO IR Format\n", + "\n", + "To Convert the PaddlePaddle model to IR, we first convert the model to ONNX, and then convert the ONNX model to IR." + ] + }, + { + "cell_type": "markdown", + "id": "2d5f3fce-c7ff-46d9-b964-90804a813cda", + "metadata": {}, + "source": [ + "#### Preparation\n", + "\n", + "PaddlePaddle's MobileNet model contains information about the input shape, mean and scale values that we can use to convert the model. The next cell shows how to get these values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89b84988-81b8-4ef8-8820-6167e08e4450", + "metadata": {}, + "outputs": [], + "source": [ + "input_shape = list(classifier.cpu_predictor.get_input_tensor_shape().values())\n", + "print(\"input shape:\", input_shape)\n", + "print(\"mean:\", classifier.get_pretrained_images_mean())\n", + "print(\"std:\", classifier.get_pretrained_images_std())" + ] + }, + { + "cell_type": "markdown", + "id": "e6b2f874-137b-4106-92b3-baecf371df09", + "metadata": {}, + "source": [ + "#### Convert PaddlePaddle Model to ONNX\n", + "\n", + "We convert the PaddlePaddle Model to ONNX with the `.export_onnx_model()` method. This uses [Paddle2ONNX](https://github.com/PaddlePaddle/paddle2onnx). We convert the model with the input shape found in the previous cell.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87d24ca2-ed9f-422d-b9b4-3caa83eaa725", + "metadata": {}, + "outputs": [], + "source": [ + "target_height, target_width = next(iter(input_shape))[2:]\n", + "x_spec = InputSpec([1, 3, target_height, target_width], \"float32\", \"x\")\n", + "print(\n", + " \"Exporting PaddlePaddle model to ONNX with target_height\"\n", + " f\"{target_height} and target_width {target_width}\"\n", + ")\n", + "classifier.export_onnx_model(\".\", input_spec=[x_spec], opset_version=11)" + ] + }, + { + "cell_type": "markdown", + "id": "1f369e47-9c83-4b81-bd91-41a80216453a", + "metadata": {}, + "source": [ + "#### Convert ONNX model to OpenVINO IR Format\n", + "\n", + "Call the OpenVINO Model Optimizer tool to convert the PaddlePaddle model to OpenVINO IR, with FP16 precision. The models are saved to the current directory. We can add the mean values to the model with `--mean_values` and scale the output with the standard deviation with `--scale_values`. With these options, it is not necessary to normalize input data before propagating it through the network. However, to get the exact same output as the PaddlePaddle model, it is necessary to preprocess in the image in the same way. For this tutorial, we therefore do not add the mean and scale values to the model, and we use the `process_image` function, as described in the previous section, to ensure that both the IR and the PaddlePaddle model use the same preprocessing methods. We do show how to get the mean and scale values of the PaddleGAN model, so you can add them to the Model Optimizer command if you want. See the [PyTorch/ONNX to OpenVINO](../102-pytorch-onnx-to-openvino/102-pytorch-onnx-to-openvino.ipynb) notebook for a notebook where these options are used.\n", + "\n", + "See the [Model Optimizer Developer Guide](https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html) for more information about Model Optimizer, including a description of the command line options. \n", + "\n", + "In the next cell, we first construct the command for Model Optimizer, and then execute this command in the notebook by prepending the command with a `!`. Model Optimization was succesful if the last lines of the output include `[ SUCCESS ] Generated IR version 10 model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08673c57-a703-4023-b031-18d5a484a7b8", + "metadata": {}, + "outputs": [], + "source": [ + "model_xml = f\"{MODEL_NAME}.xml\"\n", + "if not os.path.exists(model_xml):\n", + " mo_command = f'mo --input_model {MODEL_NAME}.onnx --input_shape \"[1,3,{target_height},{target_width}]\"'\n", + " display(Markdown(f\"Model Optimizer command to convert the ONNX model to IR: `{mo_command}`\"))\n", + " display(Markdown(\"_Converting model to IR. This may take a few minutes..._\"))\n", + " ! $mo_command\n", + "else:\n", + " print(f\"{model_xml} already exists.\")" + ] + }, + { + "cell_type": "markdown", + "id": "eae447ee-622c-44ae-8d31-27716acf3973", + "metadata": {}, + "source": [ + "## Show Inference on OpenVINO model\n", + "\n", + "Load the IR model, get model information, load the image, do inference, convert the inference to a meaningful result, and show the output. See the [Inference Engine API Notebook](../002-openvino-api/002-openvino-api.ipynb) for more information." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "764ed735-db44-47e7-a65d-f8b2e26c71de", + "metadata": {}, + "outputs": [], + "source": [ + "# Load Inference Engine and IR model\n", + "ie = IECore()\n", + "net = ie.read_network(f\"{MODEL_NAME}.xml\")\n", + "exec_net = ie.load_network(net, \"CPU\")\n", + "\n", + "# Get model input and outputs\n", + "input_layer = next(iter(net.input_info))\n", + "output_layer = next(iter(net.outputs))\n", + "\n", + "# Read, show, and preprocess input image\n", + "# See the \"Show Inference on PaddlePaddle Model\" section for source of process_image\n", + "image = Image.open(IMAGE_FILENAME)\n", + "plt.imshow(image)\n", + "input_image = process_image(image)\n", + "\n", + "# Do inference\n", + "ie_result = exec_net.infer({input_layer: input_image})[output_layer][0]\n", + "\n", + "# Convert inference result to a class name, using the same labels as the PaddlePaddle classifier\n", + "result_index = np.argmax(ie_result)\n", + "class_name = classifier.label_list[result_index]\n", + "\n", + "# Compute the softmax score of the result\n", + "softmax_result = softmax(ie_result)[result_index]\n", + "print(class_name, softmax_result)" + ] + }, + { + "cell_type": "markdown", + "id": "d9fe7a71-7c4e-4c05-9270-d8e4096d9ec8", + "metadata": {}, + "source": [ + "## Timing and Comparison\n", + "\n", + "Measure the time it takes to do inference on fifty images and compare the result. The timing information gives an indication of performance. For a fair comparison, we include the time it takes to preprocess the image. For more accurate benchmarking, use the [OpenVINO benchmark tool](https://github.com/openvinotoolkit/openvino/tree/master/inference-engine/tools/benchmark_tool). Note that many optimizations are possible to improve the performance." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "427993c9-8877-4776-bd3d-0430ff9b8e1d", + "metadata": {}, + "outputs": [], + "source": [ + "num_images = 50\n", + "# PaddlePaddle's classification method expects a BGR numpy array\n", + "image = cv2.imread(IMAGE_FILENAME)\n", + "# The process_image function expects a PIL image\n", + "pil_image = Image.open(IMAGE_FILENAME)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33a04541-9e17-4352-949e-5e9f7e9926be", + "metadata": {}, + "outputs": [], + "source": [ + "start = time.perf_counter()\n", + "for _ in range(num_images):\n", + " paddle_result = classifier.classification(images=[image])\n", + "end = time.perf_counter()\n", + "time_ir = end - start\n", + "print(\n", + " f\"PaddlePaddle model on CPU: {time_ir/num_images:.4f} \"\n", + " f\"seconds per image, FPS: {num_images/time_ir:.2f}\"\n", + ")\n", + "print(f\"PaddlePaddle result: {paddle_result}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26bc8d4d-6c5e-4c25-82cd-74199cd9e9d5", + "metadata": {}, + "outputs": [], + "source": [ + "start = time.perf_counter()\n", + "for _ in range(num_images):\n", + " input_image = process_image(pil_image)\n", + " ie_result = exec_net.infer(inputs={input_layer: input_image})[output_layer][0]\n", + "end = time.perf_counter()\n", + "time_ir = end - start\n", + "\n", + "\n", + "# Convert the inference result to a class name, using the same labels as the PaddlePaddle classifier\n", + "result_index = np.argmax(ie_result)\n", + "class_name = classifier.label_list[np.argmax(ie_result)]\n", + "softmax_result = softmax(ie_result)[result_index]\n", + "\n", + "print(\n", + " f\"IR model in Inference Engine/CPU: {time_ir/num_images:.4f} \"\n", + " f\"seconds per image, FPS: {num_images/time_ir:.2f}\"\n", + ")\n", + "print(f\"OpenVINO result: {[class_name, softmax_result]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa835da6-373a-482c-b69f-d7440f7d33ff", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "openvino_env", + "language": "python", + "name": "openvino_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/103-paddle-onnx-to-openvino/coco_close.jpg b/notebooks/103-paddle-onnx-to-openvino/coco_close.jpg new file mode 100644 index 0000000000000000000000000000000000000000..186eba723a0e2d7b9fb7f11da5039434163c4bda GIT binary patch literal 25907 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 W&yP=PTdLYZ&^BWSjL|iq5C7Rbkvs4J literal 0 HcmV?d00001