easyidp 2.0.0.dev3__tar.gz → 2.0.1__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.
Files changed (199) hide show
  1. easyidp-2.0.1/.gitattributes +2 -0
  2. easyidp-2.0.1/.github/workflows/pytest.yml +38 -0
  3. easyidp-2.0.1/.github/workflows/uv-publish.yml +34 -0
  4. easyidp-2.0.1/.gitignore +18 -0
  5. easyidp-2.0.1/.python-version +1 -0
  6. easyidp-2.0.1/.readthedocs.yaml +29 -0
  7. easyidp-2.0.0.dev3/README.md → easyidp-2.0.1/PKG-INFO +129 -202
  8. easyidp-2.0.0.dev3/PKG-INFO → easyidp-2.0.1/README.md +90 -229
  9. easyidp-2.0.1/docs/Makefile +20 -0
  10. easyidp-2.0.1/docs/_static/anime.pptx +0 -0
  11. easyidp-2.0.1/docs/_static/images/data/2017_tanashi_lotus.png +0 -0
  12. easyidp-2.0.1/docs/_static/images/data/2022_florida_forestbirds.png +0 -0
  13. easyidp-2.0.1/docs/_static/images/geotiff_transparency/crop_png.png +0 -0
  14. easyidp-2.0.1/docs/_static/images/geotiff_transparency/ref_rgb.png +0 -0
  15. easyidp-2.0.1/docs/_static/images/header_v2.0.png +0 -0
  16. easyidp-2.0.1/docs/_static/images/jupyter/backward.png +0 -0
  17. easyidp-2.0.1/docs/_static/images/jupyter/crop.png +0 -0
  18. easyidp-2.0.1/docs/_static/images/jupyter/forward.png +0 -0
  19. easyidp-2.0.1/docs/_static/images/jupyter/shp_icon.png +0 -0
  20. easyidp-2.0.1/docs/_static/images/jupyter/zval.png +0 -0
  21. easyidp-2.0.1/docs/_static/images/metashape_multi_chunks.png +0 -0
  22. easyidp-2.0.1/docs/_static/images/metashape_single_chunk.png +0 -0
  23. easyidp-2.0.1/docs/_static/images/python_api/back2raw_ignore_todo.png +0 -0
  24. easyidp-2.0.1/docs/_static/images/python_api/back2raw_save.png +0 -0
  25. easyidp-2.0.1/docs/_static/images/python_api/back2raw_sort.png +0 -0
  26. easyidp-2.0.1/docs/_static/images/python_api/percentile_mean.png +0 -0
  27. easyidp-2.0.1/docs/_static/images/python_api/roi_crop_mode.png +0 -0
  28. easyidp-2.0.1/docs/_static/images/python_api/save_geotiff_offset.png +0 -0
  29. easyidp-2.0.1/docs/_static/images/roi_marking/cc_mark_txt.gif +0 -0
  30. easyidp-2.0.1/docs/_static/images/roi_marking/gimp_coord.jpg +0 -0
  31. easyidp-2.0.1/docs/_static/images/roi_marking/labelme_cancel_save_img_data.png +0 -0
  32. easyidp-2.0.1/docs/_static/images/roi_marking/labelme_demo_img.JPG +0 -0
  33. easyidp-2.0.1/docs/_static/images/roi_marking/labelme_demo_preview.png +0 -0
  34. easyidp-2.0.1/docs/_static/images/roi_marking/labelme_mark.gif +0 -0
  35. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_activate_toolbar.png +0 -0
  36. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_add_roi.gif +0 -0
  37. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_adv_roi.gif +0 -0
  38. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_init_shp.gif +0 -0
  39. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_load_map.png +0 -0
  40. easyidp-2.0.1/docs/_static/images/roi_marking/qgis_mv_roi.gif +0 -0
  41. easyidp-2.0.1/docs/_static/images/roi_types.png +0 -0
  42. easyidp-2.0.1/docs/_static/images/visualize/draw_backward_one_roi.png +0 -0
  43. easyidp-2.0.1/docs/_static/images/visualize/p4d_back2raw_single_view.png +0 -0
  44. easyidp-2.0.1/docs/_static/images/visualize/p4d_back2raw_single_view2.png +0 -0
  45. easyidp-2.0.1/docs/_static/jsons/roi_marking/labelme_demo_img.json +34 -0
  46. easyidp-2.0.1/docs/backgrounds/geotiff_transparency.rst +90 -0
  47. easyidp-2.0.1/docs/backgrounds/roi_marking.rst +253 -0
  48. easyidp-2.0.1/docs/backgrounds/virtualenv.rst +116 -0
  49. easyidp-2.0.1/docs/conf.py +94 -0
  50. easyidp-2.0.1/docs/contribute.rst +304 -0
  51. easyidp-2.0.1/docs/index.rst +442 -0
  52. easyidp-2.0.1/docs/install.rst +125 -0
  53. easyidp-2.0.1/docs/jupyter/backward_projection.ipynb +761 -0
  54. easyidp-2.0.1/docs/jupyter/crop_outputs.ipynb +521 -0
  55. easyidp-2.0.1/docs/jupyter/forward_projection.ipynb +1785 -0
  56. easyidp-2.0.1/docs/jupyter/get_z_from_dsm.ipynb +97 -0
  57. easyidp-2.0.1/docs/jupyter/load_roi.ipynb +1156 -0
  58. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/backgrounds.po +472 -0
  59. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/contribute.po +260 -0
  60. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/index.po +581 -0
  61. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/install.po +163 -0
  62. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/jupyter.po +833 -0
  63. easyidp-2.0.1/docs/locale/ja/LC_MESSAGES/python_api.po +7326 -0
  64. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/backgrounds.po +496 -0
  65. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/contribute.po +277 -0
  66. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/index.po +528 -0
  67. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/install.po +161 -0
  68. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/jupyter.po +735 -0
  69. easyidp-2.0.1/docs/locale/zh_CN/LC_MESSAGES/python_api.po +6680 -0
  70. easyidp-2.0.1/docs/make.bat +35 -0
  71. easyidp-2.0.1/docs/python_api/autodoc/easyidp.cvtools.imarray_crop.rst +6 -0
  72. easyidp-2.0.1/docs/python_api/autodoc/easyidp.cvtools.poly2mask.rst +6 -0
  73. easyidp-2.0.1/docs/python_api/autodoc/easyidp.cvtools.rgb2gray.rst +6 -0
  74. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.EasyidpDataSet.rst +25 -0
  75. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.ForestBirds.rst +33 -0
  76. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.Lotus.rst +33 -0
  77. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.TestData.rst +33 -0
  78. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.download_all.rst +6 -0
  79. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.show_data_dir.rst +6 -0
  80. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.url_checker.rst +6 -0
  81. easyidp-2.0.1/docs/python_api/autodoc/easyidp.data.user_data_dir.rst +6 -0
  82. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.GeoTiff.rst +47 -0
  83. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.geo2pixel.rst +6 -0
  84. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.get_header.rst +6 -0
  85. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.get_imarray.rst +6 -0
  86. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.pixel2geo.rst +6 -0
  87. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.point_query.rst +6 -0
  88. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.save_geotiff.rst +6 -0
  89. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotiff.tifffile_crop.rst +6 -0
  90. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotools.convert_proj.rst +6 -0
  91. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotools.convert_proj3d.rst +6 -0
  92. easyidp-2.0.1/docs/python_api/autodoc/easyidp.geotools.is_single_point.rst +6 -0
  93. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.dict2json.rst +6 -0
  94. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.read_geojson.rst +6 -0
  95. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.read_json.rst +6 -0
  96. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.save_json.rst +6 -0
  97. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.show_geojson_fields.rst +6 -0
  98. easyidp-2.0.1/docs/python_api/autodoc/easyidp.jsonfile.write_json.rst +6 -0
  99. easyidp-2.0.1/docs/python_api/autodoc/easyidp.metashape.Metashape.rst +49 -0
  100. easyidp-2.0.1/docs/python_api/autodoc/easyidp.metashape.apply_transform_matrix.rst +6 -0
  101. easyidp-2.0.1/docs/python_api/autodoc/easyidp.metashape.read_chunk_zip.rst +6 -0
  102. easyidp-2.0.1/docs/python_api/autodoc/easyidp.metashape.read_project_zip.rst +6 -0
  103. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.Pix4D.rst +47 -0
  104. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.parse_p4d_param_folder.rst +6 -0
  105. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.parse_p4d_project.rst +6 -0
  106. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_cam_ssk.rst +6 -0
  107. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_campos_geo.rst +6 -0
  108. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_ccp.rst +6 -0
  109. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_cicp.rst +6 -0
  110. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_pmat.rst +6 -0
  111. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pix4d.read_xyz.rst +6 -0
  112. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.PointCloud.rst +44 -0
  113. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.read_las.rst +6 -0
  114. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.read_laz.rst +6 -0
  115. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.read_ply.rst +6 -0
  116. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.write_las.rst +6 -0
  117. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.write_laz.rst +6 -0
  118. easyidp-2.0.1/docs/python_api/autodoc/easyidp.pointcloud.write_ply.rst +6 -0
  119. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.Calibration.rst +48 -0
  120. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.ChunkTransform.rst +32 -0
  121. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.Photo.rst +39 -0
  122. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.Recons.rst +36 -0
  123. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.Sensor.rst +40 -0
  124. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.save_back2raw_json_and_png.rst +6 -0
  125. easyidp-2.0.1/docs/python_api/autodoc/easyidp.reconstruct.sort_img_by_distance.rst +6 -0
  126. easyidp-2.0.1/docs/python_api/autodoc/easyidp.roi.read_cc_txt.rst +6 -0
  127. easyidp-2.0.1/docs/python_api/autodoc/easyidp.shp.read_proj.rst +6 -0
  128. easyidp-2.0.1/docs/python_api/autodoc/easyidp.shp.read_shp.rst +6 -0
  129. easyidp-2.0.1/docs/python_api/autodoc/easyidp.shp.show_shp_fields.rst +6 -0
  130. easyidp-2.0.1/docs/python_api/autodoc/easyidp.visualize.draw_backward_one_roi.rst +6 -0
  131. easyidp-2.0.1/docs/python_api/autodoc/easyidp.visualize.draw_polygon_on_img.rst +6 -0
  132. easyidp-2.0.1/docs/python_api/cvtools.rst +20 -0
  133. easyidp-2.0.1/docs/python_api/data.rst +95 -0
  134. easyidp-2.0.1/docs/python_api/geotiff.rst +36 -0
  135. easyidp-2.0.1/docs/python_api/geotools.rst +19 -0
  136. easyidp-2.0.1/docs/python_api/index.rst +49 -0
  137. easyidp-2.0.1/docs/python_api/json.rst +29 -0
  138. easyidp-2.0.1/docs/python_api/manualdoc/easyidp.roi.ROI.rst +37 -0
  139. easyidp-2.0.1/docs/python_api/metashape.rst +34 -0
  140. easyidp-2.0.1/docs/python_api/pix4d.rst +37 -0
  141. easyidp-2.0.1/docs/python_api/pointcloud.rst +36 -0
  142. easyidp-2.0.1/docs/python_api/reconstruct.rst +110 -0
  143. easyidp-2.0.1/docs/python_api/roi.rst +33 -0
  144. easyidp-2.0.1/docs/python_api/shp.rst +21 -0
  145. easyidp-2.0.1/docs/python_api/visualize.rst +17 -0
  146. easyidp-2.0.1/pyproject.toml +71 -0
  147. easyidp-2.0.1/src/easyidp/__init__.py +273 -0
  148. easyidp-2.0.1/src/easyidp/cvtools.py +323 -0
  149. easyidp-2.0.1/src/easyidp/data.py +889 -0
  150. {easyidp-2.0.0.dev3 → easyidp-2.0.1/src}/easyidp/geotiff.py +1743 -1130
  151. easyidp-2.0.1/src/easyidp/geotools.py +280 -0
  152. easyidp-2.0.1/src/easyidp/jsonfile.py +592 -0
  153. easyidp-2.0.1/src/easyidp/metashape.py +1999 -0
  154. easyidp-2.0.1/src/easyidp/pix4d.py +1903 -0
  155. easyidp-2.0.1/src/easyidp/pointcloud.py +1304 -0
  156. easyidp-2.0.1/src/easyidp/py.typed +0 -0
  157. easyidp-2.0.1/src/easyidp/reconstruct.py +776 -0
  158. easyidp-2.0.1/src/easyidp/roi.py +1184 -0
  159. {easyidp-2.0.0.dev3 → easyidp-2.0.1/src}/easyidp/shp.py +165 -104
  160. easyidp-2.0.1/src/easyidp/visualize.py +349 -0
  161. easyidp-2.0.1/tests/__init__.py +33 -0
  162. easyidp-2.0.1/tests/test_cvtools.py +273 -0
  163. easyidp-2.0.1/tests/test_data.py +205 -0
  164. {easyidp-2.0.0.dev3 → easyidp-2.0.1}/tests/test_geotiff.py +170 -42
  165. easyidp-2.0.1/tests/test_init_class_func.py +135 -0
  166. easyidp-2.0.1/tests/test_jsonfile.py +132 -0
  167. easyidp-2.0.1/tests/test_metashape.py +852 -0
  168. {easyidp-2.0.0.dev3 → easyidp-2.0.1}/tests/test_pix4d.py +70 -35
  169. {easyidp-2.0.0.dev3 → easyidp-2.0.1}/tests/test_pointcloud.py +14 -20
  170. easyidp-2.0.1/tests/test_reconstruct.py +328 -0
  171. {easyidp-2.0.0.dev3 → easyidp-2.0.1}/tests/test_roi.py +138 -39
  172. {easyidp-2.0.0.dev3 → easyidp-2.0.1}/tests/test_shp.py +87 -46
  173. easyidp-2.0.1/tests/test_visualize.py +117 -0
  174. easyidp-2.0.1/uv.lock +2312 -0
  175. easyidp-2.0.0.dev3/LICENSE +0 -21
  176. easyidp-2.0.0.dev3/easyidp/__init__.py +0 -157
  177. easyidp-2.0.0.dev3/easyidp/cvtools.py +0 -237
  178. easyidp-2.0.0.dev3/easyidp/data.py +0 -533
  179. easyidp-2.0.0.dev3/easyidp/jsonfile.py +0 -268
  180. easyidp-2.0.0.dev3/easyidp/metashape.py +0 -1134
  181. easyidp-2.0.0.dev3/easyidp/pix4d.py +0 -1012
  182. easyidp-2.0.0.dev3/easyidp/pointcloud.py +0 -534
  183. easyidp-2.0.0.dev3/easyidp/reconstruct.py +0 -470
  184. easyidp-2.0.0.dev3/easyidp/roi.py +0 -455
  185. easyidp-2.0.0.dev3/easyidp/visualize.py +0 -109
  186. easyidp-2.0.0.dev3/easyidp.egg-info/PKG-INFO +0 -229
  187. easyidp-2.0.0.dev3/easyidp.egg-info/SOURCES.txt +0 -33
  188. easyidp-2.0.0.dev3/easyidp.egg-info/dependency_links.txt +0 -1
  189. easyidp-2.0.0.dev3/easyidp.egg-info/requires.txt +0 -31
  190. easyidp-2.0.0.dev3/easyidp.egg-info/top_level.txt +0 -2
  191. easyidp-2.0.0.dev3/setup.cfg +0 -7
  192. easyidp-2.0.0.dev3/setup.py +0 -64
  193. easyidp-2.0.0.dev3/tests/__init__.py +0 -16
  194. easyidp-2.0.0.dev3/tests/test_cvtools.py +0 -167
  195. easyidp-2.0.0.dev3/tests/test_data.py +0 -29
  196. easyidp-2.0.0.dev3/tests/test_jsonfile.py +0 -40
  197. easyidp-2.0.0.dev3/tests/test_metashape.py +0 -342
  198. easyidp-2.0.0.dev3/tests/test_pathtools.py +0 -31
  199. easyidp-2.0.0.dev3/tests/test_reconstruct.py +0 -224
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
@@ -0,0 +1,38 @@
1
+ name: pytest
2
+
3
+ on:
4
+ push:
5
+ branches: [ v2.0 ]
6
+ pull_request:
7
+ branches: [ v2.0 ]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ python-version: ["3.10", "3.11", "3.12"]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+
28
+ - name: Install project + test dependencies
29
+ run: |
30
+ python -m pip install --upgrade pip
31
+ pip install -e . --group test
32
+
33
+ - name: Download TestData
34
+ run: |
35
+ python ./tests/__init__.py
36
+ - name: Run pytest
37
+ run: |
38
+ pytest -n auto
@@ -0,0 +1,34 @@
1
+ # copied and modified from: https://blog.ringsaturn.me/amp/posts/better-python-project-maintenance/
2
+ name: publish by uv
3
+
4
+ on:
5
+ push:
6
+ tags:
7
+ - "v*"
8
+
9
+ jobs:
10
+ pypi-publish:
11
+ name: upload release to PyPI
12
+ runs-on: ubuntu-latest
13
+ environment:
14
+ name: PyPI
15
+ url: https://pypi.org/p/easyidp
16
+ permissions:
17
+ id-token: write
18
+ env:
19
+ TRUSTED_PUBLISHING: always
20
+ steps:
21
+ - name: Checkout Actions
22
+ uses: actions/checkout@v4
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v6
25
+ with:
26
+ enable-cache: true
27
+ cache-dependency-glob: |
28
+ **/pyproject.toml
29
+ - name: nv venv create
30
+ run: uv sync
31
+ - name: uv build
32
+ run: uv build
33
+ - name: uv publish
34
+ run: uv publish
@@ -0,0 +1,18 @@
1
+ __pycache__
2
+ d
3
+ *.mo
4
+ *.DS_Store
5
+ .archive/*
6
+ .idea/*
7
+ .ipynb_checkpoints/*
8
+ .pytest_cache/*
9
+ .vscode/*
10
+ _install.md
11
+ build/*
12
+ docs/_build/*
13
+ docs/jupyter/.ipynb_checkpoints/*
14
+ dist/*
15
+ easyidp.egg-info/*
16
+ dev.notes/*
17
+ tests/out/*
18
+ .pypirc
@@ -0,0 +1 @@
1
+ 3.10
@@ -0,0 +1,29 @@
1
+ # .readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Set the version of Python and other tools you might need
9
+ build:
10
+ os: ubuntu-20.04
11
+ tools:
12
+ python: "3.10"
13
+ # You can also specify other tool versions:
14
+ # nodejs: "16"
15
+ # rust: "1.55"
16
+ # golang: "1.17"
17
+ jobs:
18
+ install:
19
+ - python -m pip install --upgrade pip
20
+ - pip install .
21
+ - pip install --group docs
22
+
23
+ # Build documentation in the docs/ directory with Sphinx
24
+ sphinx:
25
+ configuration: docs/conf.py
26
+
27
+ # If using Sphinx, optionally build your docs in additional formats such as PDF
28
+ # formats:
29
+ # - pdf
@@ -1,202 +1,129 @@
1
- <div align="center">
2
-
3
- <p>
4
- <!-- <a align="left" href="https://ultralytics.com/yolov5" target="_blank"> -->
5
- <img width="850" src="https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/raw/v2.0/docs/_static/images/header_v2.0.png"></a>
6
- </p>
7
-
8
- <p align="center">
9
- <img alt="GitHub code size in bytes" src="https://img.shields.io/tokei/lines/github/UTokyo-FieldPhenomics-Lab/EasyIDP?style=plastic">
10
- <img alt="GitHub" src="https://img.shields.io/github/license/UTokyo-FieldPhenomics-Lab/EasyIDP?style=plastic">
11
- <img alt="GitHub top language" src="https://img.shields.io/github/languages/top/UTokyo-FieldPhenomics-Lab/EasyIDP?style=plastic">
12
- <img alt="GitHub Downloads" src="https://img.shields.io/github/downloads/UTokyo-FieldPhenomics-Lab/EasyIDP/total?label=github%20downloads&style=plastic">
13
- <img alt="GitHub Downloads" src="https://img.shields.io/pypi/dm/easyidp?color=%233775A9&label=pypi%20downloads&style=plastic">
14
- </p>
15
-
16
- <a href="README_CN.md">中文</a>
17
-
18
- </div>
19
-
20
- EasyIDP (Easy Intermediate Data Processor), A handy tool for dealing with region of interest (ROI) on the image reconstruction (Metashape & Pix4D) outputs, mainly in agriculture applications. It provides the following functions:
21
-
22
- 1. Backward Projection ROI to original images (`Backward Projector`).
23
- 2. Crop ROI on GeoTiff Maps (DOM & DSM) and Point Cloud (`ROI Cropper`).
24
- 3. Save cropped results to corresponding files (`ROI Saver`).
25
-
26
- This project tried to use packges based on pure-python, instead of installing some heavy packages (Open3D, OpenCV) and hard to install packages (GDAL dependices) for one or two individual functions. This may cause efficiency loss and differences in coding habit.
27
-
28
- ## <div align="center">Documentation</div>
29
-
30
- Please check [Official Documents](https://easyidp.readthedocs.io/en/latest/) for full documentations. And please also use the [Github Discussion](https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/discussions) when you meet any problems.
31
-
32
-
33
- ## <div align="center">Quick Start Examples (Processing)</div>
34
-
35
- You can install the packages by PyPi:
36
-
37
- ```bash
38
- pip install easyidp
39
- ```
40
-
41
- And import the packages in your python code:
42
-
43
- ```python
44
- import easyidp as idp
45
- ```
46
-
47
- ---
48
-
49
- Before doing the following example, please understand the basic pipeline for image 3D reconstruction by Pix4D or Metashape. And know how to export the DOM, DSM (\*.tiff), and Point cloud (\*.ply). Also require some basic knowledge about GIS shapefile format (\*.shp).
50
-
51
- > Please note, if you see this sentence, it means the following examples are not suppported yet.
52
-
53
- <details close>
54
- <summary>1. Read ROI</summary>
55
-
56
- ```python
57
- roi = idp.ROI("xxxx.shp") # lon and lat 2D info
58
-
59
- # get z values from DSM
60
- roi.get_z_from_dsm("xxxx_dsm.tiff") # add height 3D info
61
- ```
62
-
63
- The 2D roi can be used to crop the DOM, DSM, and point cloud (`2.crop by ROI`). While the 3D roi can be used for Backward projection (`4. Backward projection`)
64
- </details>
65
-
66
- <details close>
67
- <summary>2. Crop by ROI</summary>
68
-
69
- Read the DOM and DSM Geotiff Maps
70
- ```python
71
- dom = idp.GeoTiff("xxx_dom.tif")
72
- dsm = idp.GeoTiff("xxx_dsm.tif")
73
- ```
74
-
75
- Read point cloud data
76
- ```python
77
- ply = idp.PointCloud("xxx_pcd.ply")
78
- ```
79
-
80
- crop the region of interest from ROI:
81
- ```python
82
- dom_parts = roi.crop(dom)
83
- dsm_parts = roi.crop(dsm)
84
- pcd_parts = roi.crop(ply)
85
- ```
86
-
87
- If you want to save these crops to given folder:
88
- ```python
89
- dom_parts = roi.crop(dom, save_folder="./crop_dom")
90
- dsm_parts = roi.crop(dsm, save_folder="./crop_dsm")
91
- pcd_parts = roi.crop(ply, save_folder="./crop_pcd")
92
- ```
93
-
94
-
95
- </details>
96
-
97
- <details close>
98
- <summary>3. Read Reconstruction projects</summary>
99
-
100
- Add the reconstruction projects to processing pools (different flight time for the same field):
101
-
102
- ```python
103
- proj = idp.ProjectPool()
104
- proj.add_pix4d(["date1.p4d", "date2.p4d", ...])
105
- proj.add_metashape(["date1.psx", "date2.psx", ...])
106
- ```
107
-
108
- Then you can specify each chunk by:
109
-
110
- ```python
111
- p1 = proj[0]
112
- # or
113
- p1 = proj["chunk_or_project_name"]
114
- ```
115
-
116
- </details>
117
-
118
- <details close>
119
- <summary>4. Backward Projection</summary>
120
-
121
- ```python
122
- >>> img_dict = roi.back2raw(chunk1)
123
- ```
124
-
125
- Then check the results:
126
- ```python
127
- # find the raw image name list
128
- >>> img_dict.keys()
129
- dict_keys(['DJI_0177.JPG', 'DJI_0178.JPG', 'DJI_0179.JPG', 'DJI_0180.JPG', ... ]
130
-
131
- # the roi pixel coordinate on that image
132
- >>> img_dict['DJI_0177.JPG']
133
- array([[ 779, 902],
134
- [1043, 846],
135
- [1099, 1110],
136
- [ 834, 1166],
137
- [ 779, 902]])
138
- ```
139
-
140
- Save backward projected images
141
-
142
- ```python
143
- img_dict = roi.back2raw(chunk1, save_folder="folder/to/put/results/")
144
- ```
145
-
146
- </details>
147
-
148
- ## <div align="center">References</div>
149
-
150
- Please cite this paper if this project helps you:
151
-
152
- ```latex
153
- @Article{wang_easyidp_2021,
154
- AUTHOR = {Wang, Haozhou and Duan, Yulin and Shi, Yun and Kato, Yoichiro and Ninomiya, Seish and Guo, Wei},
155
- TITLE = {EasyIDP: A Python Package for Intermediate Data Processing in UAV-Based Plant Phenotyping},
156
- JOURNAL = {Remote Sensing},
157
- VOLUME = {13},
158
- YEAR = {2021},
159
- NUMBER = {13},
160
- ARTICLE-NUMBER = {2622},
161
- URL = {https://www.mdpi.com/2072-4292/13/13/2622},
162
- ISSN = {2072-4292},
163
- DOI = {10.3390/rs13132622}
164
- }
165
- ```
166
-
167
- We also thanks the benefits from the following open source projects:
168
-
169
- * package main (**for users**)
170
- * numpy: [https://numpy.org/](https://numpy.org/)
171
- * matplotlib:[https://matplotlib.org/](https://matplotlib.org/)
172
- * pillow: [https://github.com/python-pillow/Pillow](https://github.com/python-pillow/Pillow)
173
- * pyproj: [https://github.com/pyproj4/pyproj](https://github.com/pyproj4/pyproj)
174
- * tifffile: [https://github.com/cgohlke/tifffile](https://github.com/cgohlke/tifffile)
175
- * imagecodecs: [https://github.com/cgohlke/imagecodecs](https://github.com/cgohlke/imagecodecs)
176
- * shapely: [https://github.com/shapely/shapely](https://github.com/shapely/shapely)
177
- * laspy/lasrs/lasio: [https://github.com/laspy/laspy](https://github.com/laspy/laspy)
178
- * plyfile: [https://github.com/dranjan/python-plyfile](https://github.com/dranjan/python-plyfile)
179
- * pyshp: [https://github.com/GeospatialPython/pyshp](https://github.com/GeospatialPython/pyshp)
180
- * tabulate: [https://github.com/astanin/python-tabulate](https://github.com/astanin/python-tabulate)
181
- * tqdm: [https://github.com/tqdm/tqdm](https://github.com/tqdm/tqdm)
182
- * gdown: [https://github.com/wkentaro/gdown](https://github.com/wkentaro/gdown)
183
- * package documentation (**for developers**)
184
- * sphinx: [https://github.com/sphinx-doc/sphinx](https://github.com/sphinx-doc/sphinx)
185
- * nbsphinx: [https://github.com/spatialaudio/nbsphinx](https://github.com/spatialaudio/nbsphinx)
186
- * sphinx-gallery: [https://github.com/sphinx-gallery/sphinx-gallery](https://github.com/sphinx-gallery/sphinx-gallery)
187
- * sphinx-inline-tabs: [https://github.com/pradyunsg/sphinx-inline-tabs](https://github.com/pradyunsg/sphinx-inline-tabs)
188
- * sphinx-intl: [https://github.com/sphinx-doc/sphinx-intl](https://github.com/sphinx-doc/sphinx-intl)
189
- * sphinx-rtc-theme: [https://github.com/readthedocs/sphinx_rtd_theme](https://github.com/readthedocs/sphinx_rtd_theme)
190
- * furo: [https://github.com/pradyunsg/furo](https://github.com/pradyunsg/furo)
191
- * package testing and releasing (**for developers**)
192
- * pytest: [https://github.com/pytest-dev/pytest](https://github.com/pytest-dev/pytest)
193
- * packaging: [https://github.com/pypa/packaging](https://github.com/pypa/packaging)
194
- * wheel: [https://github.com/pypa/wheel](https://github.com/pypa/wheel)
195
-
196
- This project was partially funded by:
197
-
198
- * the JST AIP Acceleration Research “Studies of CPS platform to raise big-data-driven AI agriculture”;
199
- * the SICORP Program JPMJSC16H2;
200
- * CREST Programs JPMJCR16O2 and JPMJCR16O1;
201
- * the International Science & Technology Innovation Program of Chinese Academy of Agricultural Sciences (CAASTIP);
202
- * the National Natural Science Foundation of China U19A2061.
1
+ Metadata-Version: 2.4
2
+ Name: easyidp
3
+ Version: 2.0.1
4
+ Summary: A handy tool for dealing with region of interest (ROI) on the image reconstruction (Metashape & Pix4D) outputs, mainly in agriculture applications
5
+ Project-URL: documentation, https://easyidp.readthedocs.io/en/latest/
6
+ Project-URL: source, https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP
7
+ Project-URL: issues, https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/issues
8
+ Project-URL: forum, https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/discussions
9
+ Author-email: Haozhou Wang <howcanoewang@gmail.com>
10
+ License: MIT
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering :: GIS
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: chardet>=5.2.0
23
+ Requires-Dist: gdown>=5.2.0
24
+ Requires-Dist: geojson>=3.2.0
25
+ Requires-Dist: imagecodecs>=2025.3.30
26
+ Requires-Dist: laspy>=2.5.4
27
+ Requires-Dist: lazrs>=0.6.3
28
+ Requires-Dist: matplotlib>=3.10.3
29
+ Requires-Dist: numpy>=2.2.5
30
+ Requires-Dist: plyfile>=1.1
31
+ Requires-Dist: pyproj>=3.7.1
32
+ Requires-Dist: pyshp>=2.3.1
33
+ Requires-Dist: scikit-image>=0.25.2
34
+ Requires-Dist: shapely>=2.1.0
35
+ Requires-Dist: tabulate>=0.9.0
36
+ Requires-Dist: tifffile>=2025.5.10
37
+ Requires-Dist: tqdm>=4.67.1
38
+ Description-Content-Type: text/markdown
39
+
40
+ <div align="center">
41
+
42
+ <p>
43
+ <!-- <a align="left" href="https://ultralytics.com/yolov5" target="_blank"> -->
44
+ <img width="850" src="https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/raw/v2.0/docs/_static/images/header_v2.0.png"></a>
45
+ </p>
46
+
47
+ <p align="center">
48
+ <img alt="GitHub Actions Badge" src="https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/actions/workflows/pytest.yml/badge.svg?style=plastic">
49
+ <img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/easyidp?style=plastic">
50
+ <img alt="GitHub" src="https://img.shields.io/github/license/UTokyo-FieldPhenomics-Lab/EasyIDP?style=plastic">
51
+ <img alt="GitHub top language" src="https://img.shields.io/github/languages/top/UTokyo-FieldPhenomics-Lab/EasyIDP?style=plastic">
52
+ <img alt="GitHub Downloads" src="https://img.shields.io/github/downloads/UTokyo-FieldPhenomics-Lab/EasyIDP/total?label=github%20downloads&style=plastic">
53
+ <img alt="GitHub Downloads" src="https://img.shields.io/pypi/dm/easyidp?color=%233775A9&label=pypi%20downloads&style=plastic">
54
+ </p>
55
+
56
+ </div>
57
+
58
+ EasyIDP (Easy Intermediate Data Processor), A handy tool for dealing with region of interest (ROI) on the image reconstruction (Metashape & Pix4D) outputs, mainly in agriculture applications. It provides the following functions:
59
+
60
+ 1. Backward Projection ROI to original images (`Backward Projector`).
61
+ 2. Crop ROI on GeoTiff Maps (DOM & DSM) and Point Cloud (`ROI Cropper`).
62
+ 3. Save cropped results to corresponding files (`ROI Saver`).
63
+
64
+ This project tried to use packges based on pure-python, instead of installing some heavy packages (Open3D, OpenCV) and hard to install packages (GDAL dependices) for one or two individual functions. This may cause efficiency loss and differences in coding habit.
65
+
66
+ <p align="center">
67
+ <img alt="GitHub Downloads" height="400px" src="https://api.star-history.com/svg?repos=UTokyo-FieldPhenomics-Lab/EasyIDP&type=Date">
68
+ </p>
69
+
70
+ ## <div align="center">Documentation</div>
71
+
72
+ Please check [Official Documents](https://easyidp.readthedocs.io/en/latest/) ( [中文](https://easyidp.readthedocs.io/zh_CN/latest/) | [日本語(翻訳募集)](https://easyidp.readthedocs.io/ja/latest/) ) for full documentations. And please also use the [Github Discussion](https://github.com/UTokyo-FieldPhenomics-Lab/EasyIDP/discussions) when you meet any problems.
73
+
74
+ ## <div align="center">References</div>
75
+
76
+ Please cite this paper if this project helps you:
77
+
78
+ ```latex
79
+ @Article{wang_easyidp_2021,
80
+ AUTHOR = {Wang, Haozhou and Duan, Yulin and Shi, Yun and Kato, Yoichiro and Ninomiya, Seish and Guo, Wei},
81
+ TITLE = {EasyIDP: A Python Package for Intermediate Data Processing in UAV-Based Plant Phenotyping},
82
+ JOURNAL = {Remote Sensing},
83
+ VOLUME = {13},
84
+ YEAR = {2021},
85
+ NUMBER = {13},
86
+ ARTICLE-NUMBER = {2622},
87
+ URL = {https://www.mdpi.com/2072-4292/13/13/2622},
88
+ ISSN = {2072-4292},
89
+ DOI = {10.3390/rs13132622}
90
+ }
91
+ ```
92
+
93
+ We also thanks the benefits from the following open source projects:
94
+
95
+ * package main (**for users**)
96
+ * numpy: [https://numpy.org/](https://numpy.org/)
97
+ * matplotlib:[https://matplotlib.org/](https://matplotlib.org/)
98
+ * scikit-image: [https://github.com/scikit-image/scikit-image](https://github.com/scikit-image/scikit-image)
99
+ * pyproj: [https://github.com/pyproj4/pyproj](https://github.com/pyproj4/pyproj)
100
+ * tifffile: [https://github.com/cgohlke/tifffile](https://github.com/cgohlke/tifffile)
101
+ * imagecodecs: [https://github.com/cgohlke/imagecodecs](https://github.com/cgohlke/imagecodecs)
102
+ * shapely: [https://github.com/shapely/shapely](https://github.com/shapely/shapely)
103
+ * laspy/lasrs/lasio: [https://github.com/laspy/laspy](https://github.com/laspy/laspy)
104
+ * geojson: [https://github.com/jazzband/geojson](https://github.com/jazzband/geojson)
105
+ * plyfile: [https://github.com/dranjan/python-plyfile](https://github.com/dranjan/python-plyfile)
106
+ * pyshp: [https://github.com/GeospatialPython/pyshp](https://github.com/GeospatialPython/pyshp)
107
+ * tabulate: [https://github.com/astanin/python-tabulate](https://github.com/astanin/python-tabulate)
108
+ * tqdm: [https://github.com/tqdm/tqdm](https://github.com/tqdm/tqdm)
109
+ * gdown: [https://github.com/wkentaro/gdown](https://github.com/wkentaro/gdown)
110
+ * package documentation (**for developers**)
111
+ * sphinx: [https://github.com/sphinx-doc/sphinx](https://github.com/sphinx-doc/sphinx)
112
+ * nbsphinx: [https://github.com/spatialaudio/nbsphinx](https://github.com/spatialaudio/nbsphinx)
113
+ * sphinx-gallery: [https://github.com/sphinx-gallery/sphinx-gallery](https://github.com/sphinx-gallery/sphinx-gallery)
114
+ * sphinx-inline-tabs: [https://github.com/pradyunsg/sphinx-inline-tabs](https://github.com/pradyunsg/sphinx-inline-tabs)
115
+ * sphinx-intl: [https://github.com/sphinx-doc/sphinx-intl](https://github.com/sphinx-doc/sphinx-intl)
116
+ * sphinx-rtc-theme: [https://github.com/readthedocs/sphinx_rtd_theme](https://github.com/readthedocs/sphinx_rtd_theme)
117
+ * furo: [https://github.com/pradyunsg/furo](https://github.com/pradyunsg/furo)
118
+ * package testing and releasing (**for developers**)
119
+ * pytest: [https://github.com/pytest-dev/pytest](https://github.com/pytest-dev/pytest)
120
+ * packaging: [https://github.com/pypa/packaging](https://github.com/pypa/packaging)
121
+ * wheel: [https://github.com/pypa/wheel](https://github.com/pypa/wheel)
122
+
123
+ This project was partially funded by:
124
+
125
+ * the JST AIP Acceleration Research “Studies of CPS platform to raise big-data-driven AI agriculture”;
126
+ * the SICORP Program JPMJSC16H2;
127
+ * CREST Programs JPMJCR16O2 and JPMJCR16O1;
128
+ * the International Science & Technology Innovation Program of Chinese Academy of Agricultural Sciences (CAASTIP);
129
+ * the National Natural Science Foundation of China U19A2061.