{ "info": { "author": "Luke Miller", "author_email": "dodgyville@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "## About\nPython library for reading, modifying and writing Agisoft Photoscan/Metashape PSX projects. Unofficial.\n\nPretty rough at the moment. \n\nQuestions? Contributions? Bug reports? Open an issue on the [gitlab page for the project](https://gitlab.com/dodgyville/pypsxlib).\nI am very interested in hearing your use cases for `pypsxlib` to help drive the roadmap.\n\n### Contributors\n* Luke Miller\n\n### Thanks\n\n`pypsxlib` made for 'Project 39', a creative art project supported by Creative Victoria. \n\n### Roadmap\n* Test suite to find where the psx specification is unsupported\n* Create transformation objects for manipulation instead of strings\n* Add texture support\n* Add mask support\n* Add dense cloud support\n* Add depth maps support\n* Copy images+masks across chunks\n\n## Quickstart\n\n### Installing\n```\npip install pypsxlib\n```\n\n### How do I...\n\n#### Load a .PSX project\n```python3\nfrom pypsxlib import Project \n\nproject = Project().load_psx(\"myProject.psx\") # not all features supported\n```\n\n#### Save a .PSX project\n```python3\nproject = Project(\"myProject\")\nproject.path = \"/path/for/project\"\nproject.save() # project.name and project.path must be set\n```\n\n\n#### Add a Chunk\n```python3\np = Project(\"myProject\")\np.defaults() # create a new app and document\np.add_chunk() # add an empty chunk\n```\n\n#### Access a chunk\n```python3\nchunk = p.apps[0].documents[0].chunks[0]\n```\n\n#### Access thumbnails\n```python3\nchunk.frames[0].thumbnails\n```\n\n#### Copy a chunk's bounding box to all other chunks\n```python3\ndoc = project.apps[0].documents[0] # or project.document shortcut\nboundingbox = copy.copy(doc.chunks[0].region)\nfor chunk in doc.chunks[1:]:\n chunk.region = boundingbox\n```\n\n#### Duplicate a Chunk\n```python3\nfrom pypsxlib import utils\np = Project().load(\"projects/sample.psx\")\nassert len(p.document.chunks) == 1\nutils.duplicate_chunk(p, 0)\nassert len(p.document.chunks) == 2\n```\n\n\n#### Access the point data of a mesh\n```python3\ndoc = project.apps[0].documents[0]\nmesh = doc.chunks[0].frames[0].model.mesh\nprint(mesh.faceCount)\n# uses plyfile module to load data\nprint([x for x in doc.plydata]) # all the vertices\n```\n\n### Source\n```\ngit clone https://gitlab.com/dodgyville/pypsxlib.git\n```\n\n## Reference\n\n### .psx project layout\n\n```\nmyProject.psx\nmyProject.files/\nmyProject.files/project.zip\nmyProject.files//\nmyProject.files//chunk.zip\nmyProject.files///\nmyProject.files///frame.zip\nmyProject.files///thumbnails/\nmyProject.files///thumbnails/thumbnails.zip\n```\n\n## Changelog\n### v0.1.8\n* improved handling for single images\n* add `num_of_repeats` arg to `utils.duplicate_chunk` \n\n### v0.1.8\n* fix bugs\n* add better path support\n* add utils\n* add `utils.duplicate_chunk`\n* add `Project.delete` and `Project.document`\n\n### v0.1.5\n* fix packaging issue\n\n### v0.1.4\n* add calibration support to Sensor\n* add params support to Sensor\n* add loading and saving for model and mesh data\n* fix minor bugs\n\n### v0.1.3\n* add loading and saving for point cloud data\n* add covariance support to Sensor\n* fix minor bugs\n\n### v0.1.2\n* improve support for loading and saving thumbnails\n* add loading and saving for camera transformations\n* add loading and saving of bounding boxes\n* add chunk transform, region and meta saving\n* fix bugs\n\n### v0.1.1\n* improve support for loading project with multiple chunks and cameras\n* improve support for loading models\n* improve support for loading frames\n* improve support for loading aligned photos\n\n### v0.1.0\n* initial release", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/dodgyville/pypsxlib", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pypsxlib", "package_url": "https://pypi.org/project/pypsxlib/", "platform": "", "project_url": "https://pypi.org/project/pypsxlib/", "project_urls": { "Homepage": "https://gitlab.com/dodgyville/pypsxlib" }, "release_url": "https://pypi.org/project/pypsxlib/0.1.9/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Library for reading, modifying and writing Agisoft Photoscan/Metashape PSX projects.", "version": "0.1.9" }, "last_serial": 5844243, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "39292ae0d83fdeaac548d7108917186f", "sha256": "aaa1674f084e95acb6ab9c3b5c970cb25ee403b2e7c669b52c9538b1ccd061a7" }, "downloads": -1, "filename": "pypsxlib-0.1.0.tar.gz", "has_sig": false, "md5_digest": "39292ae0d83fdeaac548d7108917186f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7480, "upload_time": "2019-06-10T06:17:43", "url": "https://files.pythonhosted.org/packages/21/f0/0c8723686099570ea4c1cbba09256f404f694e6670bb593fc336c6e1076e/pypsxlib-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d64758f95447cd35fa9600bbdf46be1f", "sha256": "6b0c3a9d7d03cd987881aafbce9e79d18c120ba080335571f006f68b27c79159" }, "downloads": -1, "filename": "pypsxlib-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d64758f95447cd35fa9600bbdf46be1f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9857, "upload_time": "2019-06-10T12:31:11", "url": "https://files.pythonhosted.org/packages/e5/6b/693232ea03e07898c201126d2b4aea1dd7d30f536efd67c1125d10276a13/pypsxlib-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a006fb215d18785c6bebb9599a90f976", "sha256": "35a8243ff7a3e8796a24de47b1ccda2579c633a74694822f055696ad474f5558" }, "downloads": -1, "filename": "pypsxlib-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a006fb215d18785c6bebb9599a90f976", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11886, "upload_time": "2019-06-11T13:14:17", "url": "https://files.pythonhosted.org/packages/49/55/ae7c16083bfd07d25f7b82db9e5cd0f8e368bb262773b06b1bd0e95c1148/pypsxlib-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c653703a6f3ad0fbd2f9b302dd587007", "sha256": "165cab5b0131c58c9401288fcbde28cb9052c7263c982ecc44398b398b417627" }, "downloads": -1, "filename": "pypsxlib-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c653703a6f3ad0fbd2f9b302dd587007", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13368, "upload_time": "2019-06-13T09:27:27", "url": "https://files.pythonhosted.org/packages/18/89/8d5d0002ed566eede591609de2f18b25714bfa2dcbd8ca88f429b9754593/pypsxlib-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "56efaed0e3c5b3671624f70f900fb36d", "sha256": "b0872b0e084081b9c0b2155fe1320381a0e1d2640b88a6d9d694091ad34b6f5a" }, "downloads": -1, "filename": "pypsxlib-0.1.4.tar.gz", "has_sig": false, "md5_digest": "56efaed0e3c5b3671624f70f900fb36d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14666, "upload_time": "2019-06-19T12:13:32", "url": "https://files.pythonhosted.org/packages/76/aa/11db5238fa42a43c310907fcbbd5d3e00b4c09e403c872bcd0ee7459634b/pypsxlib-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "dc71cfb3af107ef418e910190d6b139d", "sha256": "1a6d787218b255fd0f3255eb6df6641818907fb9bd37b84e30f4d13d1b8ef034" }, "downloads": -1, "filename": "pypsxlib-0.1.5.tar.gz", "has_sig": false, "md5_digest": "dc71cfb3af107ef418e910190d6b139d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14914, "upload_time": "2019-07-14T00:34:42", "url": "https://files.pythonhosted.org/packages/7a/2d/4d21488f94e8eef1cfc881f40f92c75f6482f4fcb4227d9c6973c613503a/pypsxlib-0.1.5.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "6fdd954a2a9ec5416fd1424b738ecee4", "sha256": "9d641d3a1305b0f0e1f89a0d66d7ce7acee56087e8bea4b1e58c6c04fee8d1e2" }, "downloads": -1, "filename": "pypsxlib-0.1.8.tar.gz", "has_sig": false, "md5_digest": "6fdd954a2a9ec5416fd1424b738ecee4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18673, "upload_time": "2019-09-17T12:56:14", "url": "https://files.pythonhosted.org/packages/e5/00/f0d7de3e77fd53ea571e4f4f05de4434c565dfd9197a6571662bdd02159d/pypsxlib-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "4895c811c13c6a72a6ec9dc196cfbc8f", "sha256": "98c5f0f118c473b2aaf8c6c97810eaef4e28eacddad6d705b0cab94a746cb51c" }, "downloads": -1, "filename": "pypsxlib-0.1.9.tar.gz", "has_sig": false, "md5_digest": "4895c811c13c6a72a6ec9dc196cfbc8f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19026, "upload_time": "2019-09-17T21:55:39", "url": "https://files.pythonhosted.org/packages/bc/61/71c0802dff89d418c8adb3a5fd5f18a56974c071b00b54fcb66462a39244/pypsxlib-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4895c811c13c6a72a6ec9dc196cfbc8f", "sha256": "98c5f0f118c473b2aaf8c6c97810eaef4e28eacddad6d705b0cab94a746cb51c" }, "downloads": -1, "filename": "pypsxlib-0.1.9.tar.gz", "has_sig": false, "md5_digest": "4895c811c13c6a72a6ec9dc196cfbc8f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19026, "upload_time": "2019-09-17T21:55:39", "url": "https://files.pythonhosted.org/packages/bc/61/71c0802dff89d418c8adb3a5fd5f18a56974c071b00b54fcb66462a39244/pypsxlib-0.1.9.tar.gz" } ] }