py2ls 0.1.10.23__tar.gz → 0.1.10.24__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/PKG-INFO +1 -1
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/ips.py +72 -17
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/netfinder.py +2 -2
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/ocr.py +45 -34
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/plot.py +46 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/pyproject.toml +1 -1
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/README.md +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.DS_Store +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/COMMIT_EDITMSG +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/FETCH_HEAD +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/HEAD +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/config +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/description +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/commit-msg.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/post-update.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-commit.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-push.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-rebase.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/pre-receive.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/hooks/update.sample +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/index +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/info/exclude +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/logs/HEAD +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/logs/refs/heads/main +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/logs/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/logs/refs/remotes/origin/main +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/6d/c2cdf4a84e538e5d4777486aeff87e42f41799 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/72/245a05b0966011cb381e6b32b0465000e969ab +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/72/e4179337639859678ddaecf38b16f33aaec8e1 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/78/063f4c863fc371ec0313303c0a81283b35d9b6 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/82/70b319ce4046854fbe7dc41054b6c2d112dab2 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/85/aee46f478e9afdb84d50a05242c53b04ed2e21 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/86/e288b46f8fe179907e4413f665aeb5053fddb1 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/94/f7dbe88e80c4205a901b71eb8f181974376bba +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/9b/ec5ee2236ee2d5532c36bfd132e23c58fdb69c +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/a1/906da89d1174f74867800c74c43af36253bd5e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b3/4f7f271c6d6105e35a6556ffda71d03afe8c96 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b3/69579064bde9de9a19d114fc33e4e48cc8c0e4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/bf/b54d65922ce1dfda1aaa014913a54e7172d0bc +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/c1/397c6ed72c4e20ef6b9ab83163e9a6baba5b45 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/cc/45df1d317a2eb63ff1ff3a5f3b4a9f98fd92b5 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d2/992df305f4b56a466a2f221aeb182ddd20f418 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d6/39e8af592cd75a318d8affddd1bcc70c2095f2 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/db/3f2cd643292057936230b95cf7ec3046affe11 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/dc/c2bdbafb3296e09d9ee4955cfa55d275825f94 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/dc/cdbd4266765d840be2ae35ab1752a0fa312c16 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/de/214c626ac2dd2685bfaa0bc0fc20f528d014d7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e2/f2f8f4c25e62a297fc55f36acc6b01cfbab76f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e4/6c715352db9fe3c887a635f1916df4ca1f4ff9 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e5/0580a0bd1e1b3d29f834382b80fceb61d5cf0c +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/ea/3a18cc75e53792744ef754e05d3f4481768c13 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/ec/40fd8bf8e4c342534a9fc020289e402ba6bc9d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/ec/d980279432b13f0374b90ca439a6329cdece0f +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/ee/cee64eacaff022dcdc509c0c2b1da492f21060 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f4/ba7f815b886797b73fede071d86e0c134d2bc7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f5/61c3c1bf1c9ea9c9d1f556a7be2869f71f3bdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f6/44a8ff56fa035105fc517cbb1ac46c3d8e349a +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/refs/heads/main +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/refs/remotes/origin/main +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.gitattributes +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.gitignore +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/LICENSE +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/README.md +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/__init__.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/batman.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/brain_atlas.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/chat.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/correlators.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/.DS_Store +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/db2ls_sql_chtsht.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/docs_links.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/lang_code_iso639.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style1.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style2.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style3.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style4.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style5.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style6.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style7.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style8.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/example/style9.pdf +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style1.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style10.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style11.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style12.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style2.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style3.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style4.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style5.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style6.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style7.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style8.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/data/styles/style9.json +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/db2ls.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/doc.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/export_requirements.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/freqanalysis.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/ich2ls.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/sleep_events_detectors.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/stats.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/translator.py +0 -0
- {py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/wb_detector.py +0 -0
@@ -1443,10 +1443,21 @@ def fappend(fpath, content=None):
|
|
1443
1443
|
file.write(content)
|
1444
1444
|
|
1445
1445
|
|
1446
|
+
def filter_kwargs(kws, valid_kwargs):
|
1447
|
+
if isinstance(valid_kwargs, dict):
|
1448
|
+
kwargs_filtered = {
|
1449
|
+
key: value for key, value in kws.items() if key in valid_kwargs.keys()
|
1450
|
+
}
|
1451
|
+
elif isinstance(valid_kwargs, list):
|
1452
|
+
kwargs_filtered = {
|
1453
|
+
key: value for key, value in kws.items() if key in valid_kwargs
|
1454
|
+
}
|
1455
|
+
return kwargs_filtered
|
1456
|
+
|
1457
|
+
|
1446
1458
|
def fsave(
|
1447
1459
|
fpath,
|
1448
1460
|
content,
|
1449
|
-
mode="w",
|
1450
1461
|
how="overwrite",
|
1451
1462
|
kind=None,
|
1452
1463
|
font_name="Times",
|
@@ -1468,7 +1479,7 @@ def fsave(
|
|
1468
1479
|
None
|
1469
1480
|
"""
|
1470
1481
|
|
1471
|
-
def save_content(fpath, content, mode=
|
1482
|
+
def save_content(fpath, content, mode="w", how="overwrite"):
|
1472
1483
|
if "wri" in how.lower():
|
1473
1484
|
with open(fpath, mode, encoding="utf-8") as file:
|
1474
1485
|
file.write(content)
|
@@ -1515,13 +1526,36 @@ def fsave(
|
|
1515
1526
|
pdf.output(fpath, "F")
|
1516
1527
|
|
1517
1528
|
def save_csv(fpath, data, **kwargs):
|
1529
|
+
# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html
|
1530
|
+
kwargs_csv = dict(
|
1531
|
+
path_or_buf=None,
|
1532
|
+
sep=",",
|
1533
|
+
na_rep="",
|
1534
|
+
float_format=None,
|
1535
|
+
columns=None,
|
1536
|
+
header=True,
|
1537
|
+
index=True,
|
1538
|
+
index_label=None,
|
1539
|
+
mode="w",
|
1540
|
+
encoding=None,
|
1541
|
+
compression="infer",
|
1542
|
+
quoting=None,
|
1543
|
+
quotechar='"',
|
1544
|
+
lineterminator=None,
|
1545
|
+
chunksize=None,
|
1546
|
+
date_format=None,
|
1547
|
+
doublequote=True,
|
1548
|
+
escapechar=None,
|
1549
|
+
decimal=".",
|
1550
|
+
errors="strict",
|
1551
|
+
storage_options=None,
|
1552
|
+
)
|
1553
|
+
kwargs_valid = filter_kwargs(kwargs, kwargs_csv)
|
1518
1554
|
df = pd.DataFrame(data)
|
1519
|
-
df.to_csv(fpath, **
|
1555
|
+
df.to_csv(fpath, **kwargs_valid)
|
1520
1556
|
|
1521
1557
|
def save_xlsx(fpath, data, **kwargs):
|
1522
|
-
|
1523
|
-
if format:
|
1524
|
-
kwargs.pop("format", None)
|
1558
|
+
if any(kwargs):
|
1525
1559
|
format_excel(df=data, filename=fpath, **kwargs)
|
1526
1560
|
else:
|
1527
1561
|
kwargs.pop("format", None)
|
@@ -1618,7 +1652,7 @@ def fsave(
|
|
1618
1652
|
print(
|
1619
1653
|
f"Warning:\n{kind} is not in the supported list ['docx', 'txt', 'md', 'html', 'pdf', 'csv', 'xlsx', 'json', 'xml', 'yaml']"
|
1620
1654
|
)
|
1621
|
-
|
1655
|
+
mode = kwargs.get("mode", "w")
|
1622
1656
|
if kind == "docx" or kind == "doc":
|
1623
1657
|
save_docx(fpath, content, font_name, font_size, spacing)
|
1624
1658
|
elif kind == "txt":
|
@@ -3186,7 +3220,13 @@ def hex2argb(hex_color):
|
|
3186
3220
|
# Otherwise, assume it's in RRGGBB format and prepend FF for opaque
|
3187
3221
|
if len(hex_color) == 6:
|
3188
3222
|
return f"FF{hex_color}"
|
3189
|
-
|
3223
|
+
if len(hex_color) == 7:
|
3224
|
+
return f"F{hex_color}"
|
3225
|
+
else:
|
3226
|
+
if len(hex_color) > 8:
|
3227
|
+
return hex_color[-9:]
|
3228
|
+
else:
|
3229
|
+
return "F" * (9 - len(hex_color)) + hex_color
|
3190
3230
|
raise ValueError(
|
3191
3231
|
"Invalid hex color format. Use RRGGBB, #RRGGBB, or aARRGGBB format."
|
3192
3232
|
)
|
@@ -3540,7 +3580,6 @@ def format_excel(
|
|
3540
3580
|
number_format=None, # dict: e.g., {1:"0.00", 2:"#,##0",3:"0%",4:"$#,##0.00"}
|
3541
3581
|
data_validation=None, # dict
|
3542
3582
|
conditional_format=None, # dict
|
3543
|
-
index_default=False,
|
3544
3583
|
**kwargs,
|
3545
3584
|
):
|
3546
3585
|
if not isinstance(df, pd.DataFrame):
|
@@ -3711,15 +3750,29 @@ format_excel(
|
|
3711
3750
|
print(func_xample)
|
3712
3751
|
return None
|
3713
3752
|
kwargs.pop("format", None) # 更好地跟fsave结合使用
|
3753
|
+
kwargs.pop("sheet_name", None) # 更好地跟df.to_excel结合使用
|
3754
|
+
sheet_name_corr = (
|
3755
|
+
sheet_name if isinstance(sheet_name, str) else f"Sheet_{sheet_name}"
|
3756
|
+
)
|
3714
3757
|
|
3715
|
-
#
|
3716
|
-
|
3717
|
-
|
3718
|
-
|
3719
|
-
|
3758
|
+
# 只有openpyxl才支持 append
|
3759
|
+
mode = strcmp(kwargs.get("mode", "w"), ["a", "w"])[0]
|
3760
|
+
kwargs.pop("mode", None)
|
3761
|
+
engine = strcmp(kwargs.get("engine", "openpyxl"), ["xlsxwriter", "openpyxl"])[0]
|
3762
|
+
# 通常是不需要保存index的
|
3763
|
+
index = kwargs.get("index", False)
|
3764
|
+
kwargs.pop("index", None)
|
3765
|
+
# save file
|
3766
|
+
with pd.ExcelWriter(filename, mode=mode, engine=engine) as writer:
|
3767
|
+
df.to_excel(writer, sheet_name=sheet_name_corr, index=index, **kwargs)
|
3720
3768
|
|
3721
3769
|
wb = load_workbook(filename)
|
3722
|
-
|
3770
|
+
if isinstance(sheet_name, str):
|
3771
|
+
ws = wb[sheet_name]
|
3772
|
+
elif isinstance(sheet_name, int):
|
3773
|
+
ws = wb.worksheets[sheet_name]
|
3774
|
+
else:
|
3775
|
+
ws = wb.worksheets[sheet_name] # the index of worksheets
|
3723
3776
|
|
3724
3777
|
# !Apply cell formatting
|
3725
3778
|
if cell:
|
@@ -3812,7 +3865,9 @@ format_excel(
|
|
3812
3865
|
comment = [comment]
|
3813
3866
|
for comment_ in comment:
|
3814
3867
|
for (row, col), comment_str in comment_.items():
|
3815
|
-
ws.cell(row=row, column=col).comment = Comment(
|
3868
|
+
ws.cell(row=row + 1, column=col + 1).comment = Comment(
|
3869
|
+
comment_str, "Author"
|
3870
|
+
)
|
3816
3871
|
|
3817
3872
|
# !Add link
|
3818
3873
|
if link:
|
@@ -3820,7 +3875,7 @@ format_excel(
|
|
3820
3875
|
link = [link]
|
3821
3876
|
for link_ in link:
|
3822
3877
|
for (row, col), link_str in link_.items():
|
3823
|
-
ws.cell(row=row, column=col).hyperlink = link_str
|
3878
|
+
ws.cell(row=row + 1, column=col + 1).hyperlink = link_str
|
3824
3879
|
|
3825
3880
|
# !Apply data validation
|
3826
3881
|
if data_validation:
|
@@ -582,7 +582,7 @@ def find_links(url, driver="request", booster=False):
|
|
582
582
|
if all(exclusion not in link_href for exclusion in cond_ex):
|
583
583
|
links_href.append(link_href)
|
584
584
|
|
585
|
-
unique_links =
|
585
|
+
unique_links = ips.unique(links_href) # Remove duplicates
|
586
586
|
|
587
587
|
if booster:
|
588
588
|
for link in unique_links:
|
@@ -590,7 +590,7 @@ def find_links(url, driver="request", booster=False):
|
|
590
590
|
sub_links = find_links(link, driver=driver, booster=False)
|
591
591
|
if sub_links:
|
592
592
|
links_href.extend(sub_links)
|
593
|
-
links_href =
|
593
|
+
links_href = ips.unique(links_href) # Remove duplicates again
|
594
594
|
|
595
595
|
return links_href
|
596
596
|
|
@@ -286,14 +286,16 @@ def add_text_pil(
|
|
286
286
|
text,
|
287
287
|
position,
|
288
288
|
font_size=12,
|
289
|
-
color=(
|
290
|
-
bg_color=(
|
289
|
+
color=(0, 0, 0),
|
290
|
+
bg_color=(133, 203, 245, 100),
|
291
291
|
):
|
292
292
|
# Convert the image to PIL format
|
293
|
-
pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
|
294
|
-
# Create a drawing context
|
295
|
-
draw = ImageDraw.Draw(pil_image)
|
293
|
+
pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)).convert("RGBA")
|
296
294
|
# Define the font (make sure to use a font that supports Chinese characters)
|
295
|
+
overlay = Image.new("RGBA", pil_image.size, (255, 255, 255, 0))
|
296
|
+
# Create a drawing context
|
297
|
+
draw = ImageDraw.Draw(overlay)
|
298
|
+
|
297
299
|
try:
|
298
300
|
font = ImageFont.truetype(
|
299
301
|
"/System/Library/Fonts/Supplemental/Songti.ttc", font_size
|
@@ -328,8 +330,14 @@ def add_text_pil(
|
|
328
330
|
draw.rectangle(background_rect, fill=bg_color)
|
329
331
|
# Add text to the image
|
330
332
|
draw.text(adjusted_position, text, font=font, fill=color)
|
333
|
+
# Ensure both images are in RGBA mode for alpha compositing
|
334
|
+
if pil_image.mode != "RGBA":
|
335
|
+
pil_image = pil_image.convert("RGBA")
|
336
|
+
if overlay.mode != "RGBA":
|
337
|
+
overlay = overlay.convert("RGBA")
|
338
|
+
combined = Image.alpha_composite(pil_image, overlay)
|
331
339
|
# Convert the image back to OpenCV format
|
332
|
-
image = cv2.cvtColor(np.array(
|
340
|
+
image = cv2.cvtColor(np.array(combined), cv2.COLOR_RGBA2BGR)
|
333
341
|
return image
|
334
342
|
|
335
343
|
|
@@ -382,12 +390,15 @@ def preprocess_img(
|
|
382
390
|
image = cv2.imread(image)
|
383
391
|
if not isinstance(image, np.ndarray):
|
384
392
|
image = np.array(image)
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
393
|
+
try:
|
394
|
+
if image.shape[1] == 4: # Check if it has an alpha channel
|
395
|
+
# Drop the alpha channel (if needed), or handle it as required
|
396
|
+
image = cv2.cvtColor(image, cv2.COLOR_RGBA2RGB)
|
397
|
+
else:
|
398
|
+
# Convert RGB to BGR for OpenCV compatibility
|
399
|
+
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
|
400
|
+
except:
|
401
|
+
pass
|
391
402
|
|
392
403
|
# Rotate image
|
393
404
|
if rotate == "auto":
|
@@ -532,7 +543,7 @@ def get_text(
|
|
532
543
|
thr=0.1,
|
533
544
|
gpu=True,
|
534
545
|
decoder="wordbeamsearch", #'greedy', 'beamsearch' and 'wordbeamsearch'(hightly accurate)
|
535
|
-
output="
|
546
|
+
output="txt",
|
536
547
|
preprocess=None,
|
537
548
|
postprocess="not ready",
|
538
549
|
show=True,
|
@@ -541,9 +552,9 @@ def get_text(
|
|
541
552
|
font=cv2.FONT_HERSHEY_SIMPLEX,
|
542
553
|
font_scale=0.8,
|
543
554
|
thickness_text=2, # Line thickness of 2 px
|
544
|
-
|
545
|
-
|
546
|
-
bg_color=(
|
555
|
+
box_color=(0, 255, 0), # draw_box
|
556
|
+
font_color=(0, 0, 0),
|
557
|
+
bg_color=(133, 203, 245, 100),
|
547
558
|
usage=False,
|
548
559
|
**kwargs,
|
549
560
|
):
|
@@ -559,8 +570,8 @@ def get_text(
|
|
559
570
|
show: 是否显示结果图像。
|
560
571
|
ax: 用于显示图像的 Matplotlib 子图。
|
561
572
|
cmap: 用于显示图像的颜色映射。
|
562
|
-
|
563
|
-
|
573
|
+
box_color: 边界框的颜色。
|
574
|
+
font_color: 文本的颜色。
|
564
575
|
kwargs: 传递给 EasyOCR readtext 函数的其他参数。
|
565
576
|
|
566
577
|
# Uage
|
@@ -632,19 +643,19 @@ def get_text(
|
|
632
643
|
if score > thr:
|
633
644
|
top_left = tuple(map(int, bbox[0]))
|
634
645
|
bottom_right = tuple(map(int, bbox[2]))
|
635
|
-
image = cv2.rectangle(image, top_left, bottom_right,
|
646
|
+
image = cv2.rectangle(image, top_left, bottom_right, box_color, 2)
|
636
647
|
# image = cv2.putText(
|
637
|
-
# image, text, top_left, font, font_scale,
|
648
|
+
# image, text, top_left, font, font_scale, font_color, thickness_text
|
638
649
|
# )
|
639
650
|
image = add_text_pil(
|
640
651
|
image,
|
641
652
|
text,
|
642
653
|
top_left,
|
643
654
|
font_size=font_scale * 32,
|
644
|
-
color=
|
655
|
+
color=font_color,
|
645
656
|
)
|
646
|
-
img_cmp = cv2.cvtColor(image, cmap)
|
647
|
-
ax.imshow(
|
657
|
+
# img_cmp = cv2.cvtColor(image, cmap)
|
658
|
+
ax.imshow(image)
|
648
659
|
ax.axis("off")
|
649
660
|
# plt.show()
|
650
661
|
# 根据输出类型返回相应的结果
|
@@ -720,20 +731,20 @@ def get_text(
|
|
720
731
|
map(int, bbox[1])
|
721
732
|
) # Bottom-left for more accurate placement
|
722
733
|
bottom_right = tuple(map(int, bbox[2]))
|
723
|
-
image = cv2.rectangle(image, top_left, bottom_right,
|
734
|
+
image = cv2.rectangle(image, top_left, bottom_right, box_color, 2)
|
724
735
|
# image = cv2.putText(
|
725
|
-
# image, text, top_left, font, font_scale,
|
736
|
+
# image, text, top_left, font, font_scale, font_color, thickness_text
|
726
737
|
# )
|
727
738
|
image = add_text_pil(
|
728
739
|
image,
|
729
740
|
text,
|
730
741
|
top_left,
|
731
742
|
font_size=font_scale * 32,
|
732
|
-
color=
|
743
|
+
color=font_color,
|
733
744
|
bg_color=bg_color,
|
734
745
|
)
|
735
746
|
img_cmp = cv2.cvtColor(image, cmap)
|
736
|
-
ax.imshow(
|
747
|
+
ax.imshow(image)
|
737
748
|
ax.axis("off")
|
738
749
|
# plt.show()
|
739
750
|
# 根据输出类型返回相应的结果
|
@@ -797,13 +808,13 @@ def get_text(
|
|
797
808
|
bottom_right = (right, h - bottom)
|
798
809
|
|
799
810
|
# Draw the bounding box
|
800
|
-
image = cv2.rectangle(image, top_left, bottom_right,
|
811
|
+
image = cv2.rectangle(image, top_left, bottom_right, box_color, 2)
|
801
812
|
image = add_text_pil(
|
802
813
|
image,
|
803
814
|
char,
|
804
815
|
left,
|
805
816
|
font_size=font_scale * 32,
|
806
|
-
color=
|
817
|
+
color=font_color,
|
807
818
|
)
|
808
819
|
img_cmp = cv2.cvtColor(image, cmap)
|
809
820
|
ax.imshow(img_cmp)
|
@@ -838,8 +849,8 @@ def draw_box(
|
|
838
849
|
detections=None,
|
839
850
|
thr=0.25,
|
840
851
|
cmap=cv2.COLOR_BGR2RGB,
|
841
|
-
|
842
|
-
|
852
|
+
box_color=(0, 255, 0), # draw_box
|
853
|
+
font_color=(0, 0, 255), # draw_box
|
843
854
|
font_scale=0.8,
|
844
855
|
show=True,
|
845
856
|
ax=None,
|
@@ -857,12 +868,12 @@ def draw_box(
|
|
857
868
|
if score > thr:
|
858
869
|
top_left = tuple(map(int, bbox[0]))
|
859
870
|
bottom_right = tuple(map(int, bbox[2]))
|
860
|
-
image = cv2.rectangle(image, top_left, bottom_right,
|
871
|
+
image = cv2.rectangle(image, top_left, bottom_right, box_color, 2)
|
861
872
|
# image = cv2.putText(
|
862
|
-
# image, text, top_left, font, font_scale,
|
873
|
+
# image, text, top_left, font, font_scale, font_color, thickness_text
|
863
874
|
# )
|
864
875
|
image = add_text_pil(
|
865
|
-
image, text, top_left, font_size=font_scale * 32, color=
|
876
|
+
image, text, top_left, font_size=font_scale * 32, color=font_color
|
866
877
|
)
|
867
878
|
|
868
879
|
img_cmp = cv2.cvtColor(image, cmap)
|
@@ -2391,3 +2391,49 @@ def style_examples(
|
|
2391
2391
|
dir_save,
|
2392
2392
|
f"{f.name[i]}.pdf",
|
2393
2393
|
)
|
2394
|
+
|
2395
|
+
|
2396
|
+
import matplotlib.pyplot as plt
|
2397
|
+
from PIL import Image
|
2398
|
+
|
2399
|
+
|
2400
|
+
def thumbnail(dir_img_list: list, figsize=(10, 10), dpi=100, show=False, usage=False):
|
2401
|
+
"""
|
2402
|
+
Display a thumbnail figure of all images in the specified directory.
|
2403
|
+
|
2404
|
+
Args:
|
2405
|
+
dir_img_list (list): List of image file paths to display.
|
2406
|
+
figsize (tuple): Size of the figure (width, height) in inches.
|
2407
|
+
dpi (int): Dots per inch for the figure.
|
2408
|
+
"""
|
2409
|
+
if usage:
|
2410
|
+
print(
|
2411
|
+
'thumbnail(listdir("./img-innere-medizin-ii", ["jpeg", "jpg", "png"]).fpath.tolist(),figsize=[5,5],dpi=200)'
|
2412
|
+
)
|
2413
|
+
num_images = len(dir_img_list)
|
2414
|
+
if num_images == 0:
|
2415
|
+
print("No images found to display.")
|
2416
|
+
return None
|
2417
|
+
|
2418
|
+
# Calculate the number of rows and columns for the grid
|
2419
|
+
cols = int(num_images**0.5)
|
2420
|
+
rows = (num_images // cols) + (num_images % cols > 0)
|
2421
|
+
|
2422
|
+
fig, axs = plt.subplots(rows, cols, figsize=figsize, dpi=dpi)
|
2423
|
+
axs = axs.flatten() # Flatten the grid for easy iteration
|
2424
|
+
|
2425
|
+
for ax, image_file in zip(axs, dir_img_list):
|
2426
|
+
try:
|
2427
|
+
img = Image.open(image_file)
|
2428
|
+
ax.imshow(img)
|
2429
|
+
ax.axis("off") # Hide axes
|
2430
|
+
except (IOError, FileNotFoundError) as e:
|
2431
|
+
ax.axis("off") # Still hide axes if image can't be loaded
|
2432
|
+
|
2433
|
+
# Hide any remaining unused axes
|
2434
|
+
for ax in axs[len(dir_img_list) :]:
|
2435
|
+
ax.axis("off")
|
2436
|
+
|
2437
|
+
plt.tight_layout()
|
2438
|
+
if show:
|
2439
|
+
plt.show()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/12/c2808a1b3a4d0892a4154dfba1e2ae3770fa73
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1c/9314c5f69b9390068a2a8616875d974849d71f
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/27/aa6074f652bc6f7078f8647489d9ee8e24f0e2
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/28/c2969d785c1b892c2a96b3f00eba63a59811b3
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/2a/ae95d517d213b660bf4f65a4e0cfae7bb893eb
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/2a/fdf45791a26d42ccead35ace76a8f0b2a56561
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/34/9e31b6a3634cea102ce5588b98c11cc1738605
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/34/b6f3a2ee84f39bed4eee57f2c0e0afb994feb1
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/35/1a5f491ab97eee9d1ee699478d75a8bb5d3dc2
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/39/b13be65125556784e44c7a1d9821703c7ab67e
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3b/507acc7f23391644cc0b824b1e79fd2677a362
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3d/9d10d27724657a436c65a6254bfd213d4b3562
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/45/b1b6178bacbfc997811a998b5cc60c1ea7fac8
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/47/6cbd5a7c5e35cddef2f8a38bdc4896d403b095
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/57/63d0c52f5c9c69e89d514a1f96034947abe21a
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/59/380c4c26bdcd4d9b71ae3e2e35f05b3f26c5ab
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/66/6227eeeba24073e63811e89f1449f3d958f183
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/66/c998778721d424bd0aae80602dabbffa93af2e
RENAMED
File without changes
|
{py2ls-0.1.10.23 → py2ls-0.1.10.24}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9
RENAMED
File without changes
|