{"id":352729,"name":"LeafMachine2","description":"A modular suite of computer vision and machine learning algorithms that enables efficient identification, location, and measurement of vegetative, reproductive, and archival components from digital plant datasets.","url":"https://github.com/gene-weaver/leafmachine2","last_synced_at":"2026-05-15T07:01:49.870Z","repository":{"id":148711933,"uuid":"539219375","full_name":"Gene-Weaver/LeafMachine2","owner":"Gene-Weaver","description":"LeafMachine2 is a modular suite of computer vision and machine learning algorithms that enables efficient identification, location, and measurement of vegetative, reproductive, and archival components from digital plant datasets.","archived":false,"fork":false,"pushed_at":"2026-04-06T22:51:12.000Z","size":149721,"stargazers_count":36,"open_issues_count":9,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-24T16:39:31.945Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://leafmachine.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gene-Weaver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-20T22:53:40.000Z","updated_at":"2026-04-24T13:40:47.000Z","dependencies_parsed_at":"2024-12-10T21:33:09.009Z","dependency_job_id":null,"html_url":"https://github.com/Gene-Weaver/LeafMachine2","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/Gene-Weaver/LeafMachine2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gene-Weaver","download_url":"https://codeload.github.com/Gene-Weaver/LeafMachine2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32554777,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T00:31:16.350Z","status":"ssl_error","status_checked_at":"2026-05-03T00:31:15.546Z","response_time":132,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"Gene-Weaver","name":"Will","uuid":"30776938","kind":"user","description":"PhD Candidate in Ecology and Evolutionary Biology","email":"","website":"williamweaver.xyz","location":null,"twitter":"phyloforfun","company":null,"icon_url":"https://avatars.githubusercontent.com/u/30776938?u=77045b960dd76b112f6c0964c5718de9f9862898\u0026v=4","repositories_count":19,"last_synced_at":"2024-05-08T00:18:45.822Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/Gene-Weaver","funding_links":[],"total_stars":52,"followers":11,"following":18,"created_at":"2023-03-29T12:59:52.230Z","updated_at":"2024-05-08T00:18:49.508Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gene-Weaver","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gene-Weaver/repositories"},"packages":[],"commits":{"id":11726324,"full_name":"Gene-Weaver/LeafMachine2","default_branch":"master","total_commits":204,"total_committers":2,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":102.0,"dds":0.009803921568627416,"past_year_total_commits":23,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":23.0,"past_year_dds":0.0,"last_synced_at":"2026-05-13T06:02:45.691Z","last_synced_commit":"c5003798dfe716f176a4d87714260449664ec4a6","created_at":"2026-04-24T16:23:48.482Z","updated_at":"2026-05-13T06:02:45.636Z","committers":[{"name":"Gene-Weaver","email":"willwe@umich.edu","login":"Gene-Weaver","count":202},{"name":"Mark Pitblado","email":"116753126+mpitblado","login":"mpitblado","count":2}],"past_year_committers":[{"name":"phyloforfun","email":"willwe@umich.edu","login":"Gene-Weaver","count":23}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-15T00:00:35.990Z","repositories_count":6234369,"commits_count":894367520,"contributors_count":34898395,"owners_count":1153168,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"Gene-Weaver/LeafMachine2","html_url":"https://github.com/Gene-Weaver/LeafMachine2","last_synced_at":"2026-04-04T17:30:30.735Z","status":"active","issues_count":18,"pull_requests_count":11,"avg_time_to_close_issue":3854630.888888889,"avg_time_to_close_pull_request":1036.125,"issues_closed_count":9,"pull_requests_closed_count":8,"pull_request_authors_count":4,"issue_authors_count":9,"avg_comments_per_issue":0.7777777777777778,"avg_comments_per_pull_request":0.09090909090909091,"merged_pull_requests_count":8,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":4,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":1196181.0,"past_year_avg_time_to_close_pull_request":17.0,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":0.25,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"created_at":"2024-05-08T00:18:44.345Z","updated_at":"2026-04-04T17:30:30.735Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gene-Weaver%2FLeafMachine2/issues","issue_labels_count":{"bug":4,"documentation":2,"question":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":11,"OWNER":4,"CONTRIBUTOR":3},"pull_request_author_associations_count":{"OWNER":4,"CONTRIBUTOR":4,"NONE":3},"issue_authors":{"Gene-Weaver":4,"mpitblado":3,"lalulalulearing":3,"raibdd":2,"LittleAri":2,"nickynicolson":1,"vgastaldi":1,"Eamonn26632":1,"Chamaesyce2112":1},"pull_request_authors":{"mpitblado":5,"Gene-Weaver":4,"KaterinaRain":1,"YashM8":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-09T00:00:07.995Z","repositories_count":14538430,"issues_count":34221873,"pull_requests_count":112166917,"authors_count":11257824,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":4},"past_year_pull_request_author_associations_count":{"OWNER":1},"past_year_issue_authors":{"raibdd":2,"Eamonn26632":1,"vgastaldi":1},"past_year_pull_request_authors":{"Gene-Weaver":1},"maintainers":[{"login":"Gene-Weaver","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Gene-Weaver"}],"active_maintainers":[{"login":"Gene-Weaver","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Gene-Weaver"}]},"events":{"total":{"DeleteEvent":1,"PullRequestEvent":1,"ForkEvent":4,"IssuesEvent":8,"WatchEvent":2,"IssueCommentEvent":10,"PushEvent":38,"CreateEvent":1},"last_year":{"DeleteEvent":1,"ForkEvent":3,"IssuesEvent":1,"WatchEvent":1,"IssueCommentEvent":1,"PushEvent":9,"CreateEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"docker","filepath":"leafmachine2/component_detector/utils/docker/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.160Z","updated_at":"2023-05-28T19:15:41.160Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/component_detector/utils/docker/Dockerfile","dependencies":[{"id":10096978235,"package_name":"nvcr.io/nvidia/pytorch","ecosystem":"docker","requirements":"21.10-py3","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"leafmachine2/component_detector/utils/google_app_engine/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.178Z","updated_at":"2023-05-28T19:15:41.178Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/component_detector/utils/google_app_engine/Dockerfile","dependencies":[{"id":10096978241,"package_name":"gcr.io/google-appengine/python","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"leafmachine2/segmentation/detectron2/docker/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.191Z","updated_at":"2023-05-28T19:15:41.191Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/docker/Dockerfile","dependencies":[{"id":10096978248,"package_name":"nvidia/cuda","ecosystem":"docker","requirements":"11.1.1-cudnn8-devel-ubuntu18.04","direct":true,"kind":"build","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/component_detector/utils/google_app_engine/additional_requirements.txt","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.221Z","updated_at":"2023-05-28T19:15:41.221Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/component_detector/utils/google_app_engine/additional_requirements.txt","dependencies":[{"id":10096978264,"package_name":"pip","ecosystem":"pypi","requirements":"==21.1","direct":true,"kind":"runtime","optional":false},{"id":10096978265,"package_name":"Flask","ecosystem":"pypi","requirements":"==1.0.2","direct":true,"kind":"runtime","optional":false},{"id":10096978266,"package_name":"gunicorn","ecosystem":"pypi","requirements":"==19.9.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/machine/DocEnTR/requirements.txt","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.244Z","updated_at":"2023-05-28T19:15:41.244Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/machine/DocEnTR/requirements.txt","dependencies":[{"id":10096978271,"package_name":"einops","ecosystem":"pypi","requirements":"==0.3.2","direct":true,"kind":"runtime","optional":false},{"id":10096978272,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.5.0","direct":true,"kind":"runtime","optional":false},{"id":10096978273,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.21.5","direct":true,"kind":"runtime","optional":false},{"id":10096978274,"package_name":"opencv_python","ecosystem":"pypi","requirements":"==4.5.4.60","direct":true,"kind":"runtime","optional":false},{"id":10096978275,"package_name":"Pillow","ecosystem":"pypi","requirements":"==9.0.0","direct":true,"kind":"runtime","optional":false},{"id":10096978276,"package_name":"thinc","ecosystem":"pypi","requirements":"==8.0.13","direct":true,"kind":"runtime","optional":false},{"id":10096978277,"package_name":"torch","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":10096978278,"package_name":"torchvision","ecosystem":"pypi","requirements":"==0.11.1","direct":true,"kind":"runtime","optional":false},{"id":10096978279,"package_name":"tqdm","ecosystem":"pypi","requirements":"==4.62.3","direct":true,"kind":"runtime","optional":false},{"id":10096978280,"package_name":"vit_pytorch","ecosystem":"pypi","requirements":"==0.24.3","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/segmentation/detectron2/docs/requirements.txt","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.276Z","updated_at":"2023-05-28T19:15:41.276Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/docs/requirements.txt","dependencies":[{"id":10096978283,"package_name":"docutils","ecosystem":"pypi","requirements":"==0.16","direct":true,"kind":"runtime","optional":false},{"id":10096978284,"package_name":"sphinx","ecosystem":"pypi","requirements":"==3.2.0","direct":true,"kind":"runtime","optional":false},{"id":10096978285,"package_name":"recommonmark","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":10096978286,"package_name":"sphinx_rtd_theme","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978287,"package_name":"termcolor","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978288,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978289,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978290,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978291,"package_name":"yacs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978292,"package_name":"tabulate","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978293,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978294,"package_name":"Pillow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978295,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978296,"package_name":"omegaconf","ecosystem":"pypi","requirements":"\u003e=2.1.0.dev24","direct":true,"kind":"runtime","optional":false},{"id":10096978297,"package_name":"hydra-core","ecosystem":"pypi","requirements":"\u003e=1.1.0.dev5","direct":true,"kind":"runtime","optional":false},{"id":10096978298,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978299,"package_name":"timm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978300,"package_name":"fairscale","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/segmentation/detectron2/projects/DensePose/setup.py","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.293Z","updated_at":"2023-05-28T19:15:41.293Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/projects/DensePose/setup.py","dependencies":[{"id":10096978309,"package_name":"av","ecosystem":"pypi","requirements":"\u003e=8.0.3","direct":true,"kind":"runtime","optional":false},{"id":10096978310,"package_name":"detectron2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978311,"package_name":"opencv-python-headless","ecosystem":"pypi","requirements":"\u003e=4.5.3.56","direct":true,"kind":"runtime","optional":false},{"id":10096978312,"package_name":"scipy","ecosystem":"pypi","requirements":"\u003e=1.5.4","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/segmentation/detectron2/setup.py","sha":null,"kind":"manifest","created_at":"2023-05-28T19:15:41.301Z","updated_at":"2023-05-28T19:15:41.301Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/setup.py","dependencies":[{"id":10096978315,"package_name":"These","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978316,"package_name":"In","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978317,"package_name":"guaranteed","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978318,"package_name":"To","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978319,"package_name":"Pillow","ecosystem":"pypi","requirements":"\u003e=7.1","direct":true,"kind":"runtime","optional":false},{"id":10096978320,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978321,"package_name":"pycocotools","ecosystem":"pypi","requirements":"\u003e=2.0.2","direct":true,"kind":"runtime","optional":false},{"id":10096978322,"package_name":"Do","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978323,"package_name":"opencv","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978324,"package_name":"choosing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978325,"package_name":"The","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978326,"package_name":"termcolor","ecosystem":"pypi","requirements":"\u003e=1.1","direct":true,"kind":"runtime","optional":false},{"id":10096978327,"package_name":"yacs","ecosystem":"pypi","requirements":"\u003e=0.1.8","direct":true,"kind":"runtime","optional":false},{"id":10096978328,"package_name":"tabulate","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978329,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978330,"package_name":"tqdm","ecosystem":"pypi","requirements":"\u003e4.29.0","direct":true,"kind":"runtime","optional":false},{"id":10096978331,"package_name":"tensorboard","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978332,"package_name":"Lock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978333,"package_name":"NOTE","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978335,"package_name":"on","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978336,"package_name":"fvcore","ecosystem":"pypi","requirements":"\u003e=0.1.5,\u003c0.1.6","direct":true,"kind":"runtime","optional":false},{"id":10096978337,"package_name":"iopath","ecosystem":"pypi","requirements":"\u003e=0.1.7,\u003c0.1.10","direct":true,"kind":"runtime","optional":false},{"id":10096978338,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978339,"package_name":"pydot","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978340,"package_name":"dataclasses","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978341,"package_name":"omegaconf","ecosystem":"pypi","requirements":"\u003e=2.1","direct":true,"kind":"runtime","optional":false},{"id":10096978342,"package_name":"hydra-core","ecosystem":"pypi","requirements":"\u003e=1.1","direct":true,"kind":"runtime","optional":false},{"id":10096978343,"package_name":"black","ecosystem":"pypi","requirements":"==22.3.0","direct":true,"kind":"runtime","optional":false},{"id":10096978344,"package_name":"timm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978345,"package_name":"fairscale","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978346,"package_name":"packaging","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978347,"package_name":"If","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":10096978348,"package_name":"probably","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"leafmachine2/segmentation/detectron2/docker/docker-compose.yml","sha":null,"kind":"manifest","created_at":"2024-03-19T07:11:47.095Z","updated_at":"2024-03-19T07:11:47.095Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/docker/docker-compose.yml","dependencies":[]},{"ecosystem":"pypi","filepath":"leafmachine2/segmentation/detectron2/projects/TensorMask/setup.py","sha":null,"kind":"manifest","created_at":"2024-03-19T07:11:47.343Z","updated_at":"2024-03-19T07:11:47.343Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/segmentation/detectron2/projects/TensorMask/setup.py","dependencies":[]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2024-03-19T07:11:47.699Z","updated_at":"2024-03-19T07:11:47.699Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/requirements.txt","dependencies":[{"id":16907387872,"package_name":"streamlit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907387873,"package_name":"memory-profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389157,"package_name":"objgraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389363,"package_name":"memory_profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389364,"package_name":"astropy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389365,"package_name":"asttokens","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389366,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907389367,"package_name":"colour-science","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390099,"package_name":"cachetools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390100,"package_name":"certifi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390101,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390102,"package_name":"colorama","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390103,"package_name":"contourpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390104,"package_name":"cycler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390105,"package_name":"Cython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390106,"package_name":"dask","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390107,"package_name":"dataclasses","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390108,"package_name":"debugpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390109,"package_name":"decorator","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390110,"package_name":"einops","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390111,"package_name":"entrypoints","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390112,"package_name":"executing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390113,"package_name":"fairscale","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390114,"package_name":"filelock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390115,"package_name":"fonttools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390116,"package_name":"fsspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390117,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390118,"package_name":"fuzzywuzzy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390119,"package_name":"fvcore","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390120,"package_name":"geojson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390121,"package_name":"gitdb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390122,"package_name":"GitPython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390123,"package_name":"grpcio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390124,"package_name":"huggingface-hub","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390125,"package_name":"hydra-core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390126,"package_name":"idna","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390127,"package_name":"imageio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390128,"package_name":"imagesize","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390129,"package_name":"imutils","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390170,"package_name":"iopath","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390171,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390172,"package_name":"ipython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390173,"package_name":"jedi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390174,"package_name":"joblib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390175,"package_name":"jsonpatch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390176,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390177,"package_name":"jupyter_client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390178,"package_name":"jupyter_core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390179,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907390180,"package_name":"labelbox","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393198,"package_name":"Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393199,"package_name":"locket","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393200,"package_name":"Markdown","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393201,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393202,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393203,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393204,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393205,"package_name":"ndjson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393217,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393218,"package_name":"networkx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393219,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393220,"package_name":"oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393221,"package_name":"omegaconf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393222,"package_name":"packaging","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393223,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393224,"package_name":"parso","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393225,"package_name":"partd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393226,"package_name":"pathspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393227,"package_name":"pathtools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393228,"package_name":"pickleshare","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393229,"package_name":"Pillow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393230,"package_name":"platformdirs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393231,"package_name":"pooch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393232,"package_name":"portalocker","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393233,"package_name":"promise","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393352,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393353,"package_name":"protobuf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393354,"package_name":"psutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393355,"package_name":"pure-eval","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393356,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393357,"package_name":"pyamg","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393375,"package_name":"pyasn1","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393376,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393377,"package_name":"pydantic","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393378,"package_name":"pydot","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393379,"package_name":"pyefd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393672,"package_name":"pyerfa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907393673,"package_name":"pyGeoTile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394237,"package_name":"Pygments","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394238,"package_name":"pyparsing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394239,"package_name":"pyproj","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394240,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394241,"package_name":"python-Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394242,"package_name":"pytz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394243,"package_name":"PyWavelets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394244,"package_name":"PyYAML","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394245,"package_name":"pyzenodo3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394624,"package_name":"pyzmq","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394625,"package_name":"QtPy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907394626,"package_name":"rapidfuzz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907395958,"package_name":"rawpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397114,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397131,"package_name":"reportlab","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397132,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397133,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397134,"package_name":"rsa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397135,"package_name":"scikit-image","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397136,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397137,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397138,"package_name":"seaborn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397139,"package_name":"sentry-sdk","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397140,"package_name":"setproctitle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397141,"package_name":"Shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397142,"package_name":"shortuuid","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397361,"package_name":"SimpleITK","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397362,"package_name":"six","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397363,"package_name":"smmap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397364,"package_name":"soupsieve","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397365,"package_name":"stack-data","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397366,"package_name":"tabulate","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397367,"package_name":"tensorboard","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397368,"package_name":"tensorboard-data-server","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397369,"package_name":"tensorboard-plugin-wit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397370,"package_name":"termcolor","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397371,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397372,"package_name":"tifffile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397373,"package_name":"timm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397374,"package_name":"tomli","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397375,"package_name":"toolz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397376,"package_name":"tornado","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397377,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397378,"package_name":"traitlets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397379,"package_name":"typing_extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397380,"package_name":"urllib3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397381,"package_name":"wandb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397382,"package_name":"wcwidth","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397383,"package_name":"websocket-client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397384,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397385,"package_name":"wget","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397578,"package_name":"yacs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397579,"package_name":"zenodo-get","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":16907397580,"package_name":"pycococreatortools","ecosystem":"pypi","requirements":"fba8f4098f3c7aaa05fe119dc93bbe4063afdab8","direct":true,"kind":"runtime","optional":false},{"id":16907397675,"package_name":"pycocotools","ecosystem":"pypi","requirements":"\u003e=2.0.5","direct":true,"kind":"runtime","optional":false},{"id":16907397676,"package_name":"opencv-contrib-python","ecosystem":"pypi","requirements":"\u003e=4.7.0.68","direct":true,"kind":"runtime","optional":false},{"id":16907398294,"package_name":"vit-pytorch","ecosystem":"pypi","requirements":"==0.37.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_deprecated/requirements copy.txt","sha":null,"kind":"manifest","created_at":"2024-03-27T17:44:14.130Z","updated_at":"2024-03-27T17:44:14.130Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/requirements_deprecated/requirements copy.txt","dependencies":[{"id":17076064492,"package_name":"streamlit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064495,"package_name":"memory-profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064625,"package_name":"objgraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064640,"package_name":"memory_profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064641,"package_name":"astropy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064642,"package_name":"asttokens","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064643,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064644,"package_name":"colour-science","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064645,"package_name":"cachetools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064646,"package_name":"certifi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064647,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064648,"package_name":"colorama","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064649,"package_name":"contourpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064650,"package_name":"cycler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064651,"package_name":"Cython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064652,"package_name":"dask","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064653,"package_name":"dataclasses","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064654,"package_name":"debugpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064655,"package_name":"decorator","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064656,"package_name":"einops","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064657,"package_name":"entrypoints","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064658,"package_name":"executing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064659,"package_name":"fairscale","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064660,"package_name":"filelock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064661,"package_name":"fonttools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064662,"package_name":"fsspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064663,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064664,"package_name":"fuzzywuzzy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064665,"package_name":"fvcore","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064666,"package_name":"geojson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064692,"package_name":"gitdb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064693,"package_name":"GitPython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064694,"package_name":"grpcio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064695,"package_name":"huggingface-hub","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064696,"package_name":"hydra-core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064697,"package_name":"idna","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064698,"package_name":"imageio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064699,"package_name":"imagesize","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064700,"package_name":"imutils","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064701,"package_name":"iopath","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064702,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064703,"package_name":"ipython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064704,"package_name":"jedi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064705,"package_name":"joblib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064706,"package_name":"jsonpatch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064707,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064708,"package_name":"jupyter_client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064709,"package_name":"jupyter_core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064710,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064711,"package_name":"labelbox","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064712,"package_name":"Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064713,"package_name":"locket","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064714,"package_name":"Markdown","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064715,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064716,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064717,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064718,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064719,"package_name":"ndjson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064720,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064721,"package_name":"networkx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064722,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064723,"package_name":"oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064724,"package_name":"omegaconf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064725,"package_name":"packaging","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064726,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064727,"package_name":"parso","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064728,"package_name":"partd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064729,"package_name":"pathspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064730,"package_name":"pathtools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064731,"package_name":"pickleshare","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064732,"package_name":"Pillow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064733,"package_name":"platformdirs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064734,"package_name":"pooch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064735,"package_name":"portalocker","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064736,"package_name":"promise","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064737,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064738,"package_name":"protobuf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064739,"package_name":"psutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064740,"package_name":"pure-eval","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064741,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064742,"package_name":"pyamg","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064745,"package_name":"pyasn1","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064746,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064747,"package_name":"pydantic","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064748,"package_name":"pydot","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064749,"package_name":"pyefd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064756,"package_name":"pyerfa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064757,"package_name":"pyGeoTile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064758,"package_name":"Pygments","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064759,"package_name":"pyparsing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064760,"package_name":"pyproj","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064761,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064762,"package_name":"python-Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064763,"package_name":"pytz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064764,"package_name":"PyWavelets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064765,"package_name":"PyYAML","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064766,"package_name":"pyzenodo3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064767,"package_name":"pyzmq","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064768,"package_name":"QtPy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064769,"package_name":"rapidfuzz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064770,"package_name":"rawpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064776,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064777,"package_name":"reportlab","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064778,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064779,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064780,"package_name":"rsa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064781,"package_name":"scikit-image","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064782,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064783,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064784,"package_name":"seaborn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064785,"package_name":"sentry-sdk","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064786,"package_name":"setproctitle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064787,"package_name":"Shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064788,"package_name":"shortuuid","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064789,"package_name":"SimpleITK","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064790,"package_name":"six","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064791,"package_name":"smmap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064792,"package_name":"soupsieve","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064793,"package_name":"stack-data","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064794,"package_name":"tabulate","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064795,"package_name":"tensorboard","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064796,"package_name":"tensorboard-data-server","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064797,"package_name":"tensorboard-plugin-wit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064798,"package_name":"termcolor","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064799,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064800,"package_name":"tifffile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064801,"package_name":"timm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064802,"package_name":"tomli","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064803,"package_name":"toolz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064804,"package_name":"tornado","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064805,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064806,"package_name":"traitlets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064807,"package_name":"typing_extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064808,"package_name":"urllib3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064809,"package_name":"wandb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064810,"package_name":"wcwidth","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064811,"package_name":"websocket-client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064812,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064813,"package_name":"wget","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064814,"package_name":"yacs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064815,"package_name":"zenodo-get","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064816,"package_name":"pycocotools","ecosystem":"pypi","requirements":"\u003e=2.0.5","direct":true,"kind":"runtime","optional":false},{"id":17076064817,"package_name":"opencv-contrib-python","ecosystem":"pypi","requirements":"\u003e=4.7.0.68","direct":true,"kind":"runtime","optional":false},{"id":17076064818,"package_name":"vit-pytorch","ecosystem":"pypi","requirements":"==0.37.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_deprecated/requirements_all.txt","sha":null,"kind":"manifest","created_at":"2024-03-27T17:44:19.912Z","updated_at":"2024-03-27T17:44:19.912Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/requirements_deprecated/requirements_all.txt","dependencies":[{"id":17076064819,"package_name":"absl-py","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064820,"package_name":"antlr4-python3-runtime","ecosystem":"pypi","requirements":"==4.9.3","direct":true,"kind":"runtime","optional":false},{"id":17076064821,"package_name":"appdirs","ecosystem":"pypi","requirements":"==1.4.4","direct":true,"kind":"runtime","optional":false},{"id":17076064822,"package_name":"astropy","ecosystem":"pypi","requirements":"==5.1","direct":true,"kind":"runtime","optional":false},{"id":17076064823,"package_name":"asttokens","ecosystem":"pypi","requirements":"==2.0.8","direct":true,"kind":"runtime","optional":false},{"id":17076064824,"package_name":"backcall","ecosystem":"pypi","requirements":"==0.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064825,"package_name":"backoff","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":17076064826,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.11.1","direct":true,"kind":"runtime","optional":false},{"id":17076064827,"package_name":"black","ecosystem":"pypi","requirements":"==22.3.0","direct":true,"kind":"runtime","optional":false},{"id":17076064828,"package_name":"cachetools","ecosystem":"pypi","requirements":"==5.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064829,"package_name":"certifi","ecosystem":"pypi","requirements":"==2022.9.24","direct":true,"kind":"runtime","optional":false},{"id":17076064830,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":17076064831,"package_name":"click","ecosystem":"pypi","requirements":"==8.1.3","direct":true,"kind":"runtime","optional":false},{"id":17076064832,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"==2.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064833,"package_name":"colorama","ecosystem":"pypi","requirements":"==0.4.5","direct":true,"kind":"runtime","optional":false},{"id":17076064834,"package_name":"contourpy","ecosystem":"pypi","requirements":"==1.0.5","direct":true,"kind":"runtime","optional":false},{"id":17076064835,"package_name":"cycler","ecosystem":"pypi","requirements":"==0.11.0","direct":true,"kind":"runtime","optional":false},{"id":17076064836,"package_name":"Cython","ecosystem":"pypi","requirements":"==0.29.32","direct":true,"kind":"runtime","optional":false},{"id":17076064837,"package_name":"dask","ecosystem":"pypi","requirements":"==2022.9.2","direct":true,"kind":"runtime","optional":false},{"id":17076064838,"package_name":"dataclasses","ecosystem":"pypi","requirements":"==0.6","direct":true,"kind":"runtime","optional":false},{"id":17076064839,"package_name":"debugpy","ecosystem":"pypi","requirements":"==1.6.3","direct":true,"kind":"runtime","optional":false},{"id":17076064840,"package_name":"decorator","ecosystem":"pypi","requirements":"==5.1.1","direct":true,"kind":"runtime","optional":false},{"id":17076064841,"package_name":"docker-pycreds","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":17076064842,"package_name":"einops","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":17076064843,"package_name":"entrypoints","ecosystem":"pypi","requirements":"==0.4","direct":true,"kind":"runtime","optional":false},{"id":17076064844,"package_name":"executing","ecosystem":"pypi","requirements":"==1.1.1","direct":true,"kind":"runtime","optional":false},{"id":17076064845,"package_name":"fairscale","ecosystem":"pypi","requirements":"==0.4.12","direct":true,"kind":"runtime","optional":false},{"id":17076064846,"package_name":"filelock","ecosystem":"pypi","requirements":"==3.8.0","direct":true,"kind":"runtime","optional":false},{"id":17076064847,"package_name":"fonttools","ecosystem":"pypi","requirements":"==4.37.4","direct":true,"kind":"runtime","optional":false},{"id":17076064848,"package_name":"fsspec","ecosystem":"pypi","requirements":"==2022.8.2","direct":true,"kind":"runtime","optional":false},{"id":17076064849,"package_name":"future","ecosystem":"pypi","requirements":"==0.18.2","direct":true,"kind":"runtime","optional":false},{"id":17076064850,"package_name":"fuzzywuzzy","ecosystem":"pypi","requirements":"==0.18.0","direct":true,"kind":"runtime","optional":false},{"id":17076064851,"package_name":"fvcore","ecosystem":"pypi","requirements":"==0.1.5.post20220512","direct":true,"kind":"runtime","optional":false},{"id":17076064852,"package_name":"geojson","ecosystem":"pypi","requirements":"==2.5.0","direct":true,"kind":"runtime","optional":false},{"id":17076064853,"package_name":"gitdb","ecosystem":"pypi","requirements":"==4.0.9","direct":true,"kind":"runtime","optional":false},{"id":17076064854,"package_name":"GitPython","ecosystem":"pypi","requirements":"==3.1.28","direct":true,"kind":"runtime","optional":false},{"id":17076064855,"package_name":"google-api-core","ecosystem":"pypi","requirements":"==2.10.2","direct":true,"kind":"runtime","optional":false},{"id":17076064856,"package_name":"google-auth","ecosystem":"pypi","requirements":"==2.12.0","direct":true,"kind":"runtime","optional":false},{"id":17076064857,"package_name":"google-auth-oauthlib","ecosystem":"pypi","requirements":"==0.4.6","direct":true,"kind":"runtime","optional":false},{"id":17076064858,"package_name":"googleapis-common-protos","ecosystem":"pypi","requirements":"==1.57.0","direct":true,"kind":"runtime","optional":false},{"id":17076064859,"package_name":"grpcio","ecosystem":"pypi","requirements":"==1.49.1","direct":true,"kind":"runtime","optional":false},{"id":17076064860,"package_name":"huggingface-hub","ecosystem":"pypi","requirements":"==0.10.0","direct":true,"kind":"runtime","optional":false},{"id":17076064861,"package_name":"hydra-core","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064862,"package_name":"idna","ecosystem":"pypi","requirements":"==3.4","direct":true,"kind":"runtime","optional":false},{"id":17076064863,"package_name":"imageio","ecosystem":"pypi","requirements":"==2.22.0","direct":true,"kind":"runtime","optional":false},{"id":17076064864,"package_name":"imagesize","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":17076064865,"package_name":"imutils","ecosystem":"pypi","requirements":"==0.5.4","direct":true,"kind":"runtime","optional":false},{"id":17076064866,"package_name":"iopath","ecosystem":"pypi","requirements":"==0.1.9","direct":true,"kind":"runtime","optional":false},{"id":17076064867,"package_name":"ipykernel","ecosystem":"pypi","requirements":"==6.16.2","direct":true,"kind":"runtime","optional":false},{"id":17076064868,"package_name":"ipython","ecosystem":"pypi","requirements":"==8.5.0","direct":true,"kind":"runtime","optional":false},{"id":17076064869,"package_name":"jedi","ecosystem":"pypi","requirements":"==0.18.1","direct":true,"kind":"runtime","optional":false},{"id":17076064870,"package_name":"joblib","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064871,"package_name":"jsonpatch","ecosystem":"pypi","requirements":"==1.32","direct":true,"kind":"runtime","optional":false},{"id":17076064872,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"==2.3","direct":true,"kind":"runtime","optional":false},{"id":17076064873,"package_name":"jupyter_client","ecosystem":"pypi","requirements":"==7.4.4","direct":true,"kind":"runtime","optional":false},{"id":17076064874,"package_name":"jupyter_core","ecosystem":"pypi","requirements":"==4.11.2","direct":true,"kind":"runtime","optional":false},{"id":17076064875,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"==1.4.4","direct":true,"kind":"runtime","optional":false},{"id":17076064876,"package_name":"labelbox","ecosystem":"pypi","requirements":"==3.34.0","direct":true,"kind":"runtime","optional":false},{"id":17076064877,"package_name":"Levenshtein","ecosystem":"pypi","requirements":"==0.20.9","direct":true,"kind":"runtime","optional":false},{"id":17076064878,"package_name":"locket","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":17076064879,"package_name":"Markdown","ecosystem":"pypi","requirements":"==3.4.1","direct":true,"kind":"runtime","optional":false},{"id":17076064880,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":17076064881,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.6.0","direct":true,"kind":"runtime","optional":false},{"id":17076064882,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"==0.1.6","direct":true,"kind":"runtime","optional":false},{"id":17076064883,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"==0.4.3","direct":true,"kind":"runtime","optional":false},{"id":17076064884,"package_name":"ndjson","ecosystem":"pypi","requirements":"==0.3.1","direct":true,"kind":"runtime","optional":false},{"id":17076064885,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"==1.5.6","direct":true,"kind":"runtime","optional":false},{"id":17076064886,"package_name":"networkx","ecosystem":"pypi","requirements":"==2.8.6","direct":true,"kind":"runtime","optional":false},{"id":17076064887,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.23.3","direct":true,"kind":"runtime","optional":false},{"id":17076064888,"package_name":"oauthlib","ecosystem":"pypi","requirements":"==3.2.1","direct":true,"kind":"runtime","optional":false},{"id":17076064889,"package_name":"omegaconf","ecosystem":"pypi","requirements":"==2.2.3","direct":true,"kind":"runtime","optional":false},{"id":17076064890,"package_name":"opencv-contrib-python","ecosystem":"pypi","requirements":"==4.7.0.68","direct":true,"kind":"runtime","optional":false},{"id":17076064891,"package_name":"packaging","ecosystem":"pypi","requirements":"==21.3","direct":true,"kind":"runtime","optional":false},{"id":17076064892,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.5.0","direct":true,"kind":"runtime","optional":false},{"id":17076064893,"package_name":"parso","ecosystem":"pypi","requirements":"==0.8.3","direct":true,"kind":"runtime","optional":false},{"id":17076064894,"package_name":"partd","ecosystem":"pypi","requirements":"==1.3.0","direct":true,"kind":"runtime","optional":false},{"id":17076064895,"package_name":"pathspec","ecosystem":"pypi","requirements":"==0.10.1","direct":true,"kind":"runtime","optional":false},{"id":17076064896,"package_name":"pathtools","ecosystem":"pypi","requirements":"==0.1.2","direct":true,"kind":"runtime","optional":false},{"id":17076064897,"package_name":"pickleshare","ecosystem":"pypi","requirements":"==0.7.5","direct":true,"kind":"runtime","optional":false},{"id":17076064898,"package_name":"Pillow","ecosystem":"pypi","requirements":"==9.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064899,"package_name":"platformdirs","ecosystem":"pypi","requirements":"==2.5.2","direct":true,"kind":"runtime","optional":false},{"id":17076064900,"package_name":"pooch","ecosystem":"pypi","requirements":"==1.6.0","direct":true,"kind":"runtime","optional":false},{"id":17076064901,"package_name":"portalocker","ecosystem":"pypi","requirements":"==2.5.1","direct":true,"kind":"runtime","optional":false},{"id":17076064902,"package_name":"promise","ecosystem":"pypi","requirements":"==2.3","direct":true,"kind":"runtime","optional":false},{"id":17076064903,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"==3.0.31","direct":true,"kind":"runtime","optional":false},{"id":17076064904,"package_name":"protobuf","ecosystem":"pypi","requirements":"==3.19.6","direct":true,"kind":"runtime","optional":false},{"id":17076064905,"package_name":"psutil","ecosystem":"pypi","requirements":"==5.9.4","direct":true,"kind":"runtime","optional":false},{"id":17076064906,"package_name":"pure-eval","ecosystem":"pypi","requirements":"==0.2.2","direct":true,"kind":"runtime","optional":false},{"id":17076064907,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"==9.0.0","direct":true,"kind":"runtime","optional":false},{"id":17076064908,"package_name":"pyamg","ecosystem":"pypi","requirements":"==4.2.3","direct":true,"kind":"runtime","optional":false},{"id":17076064909,"package_name":"pyasn1","ecosystem":"pypi","requirements":"==0.4.8","direct":true,"kind":"runtime","optional":false},{"id":17076064910,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"==0.2.8","direct":true,"kind":"runtime","optional":false},{"id":17076064911,"package_name":"pycocotools","ecosystem":"pypi","requirements":"==2.0.5","direct":true,"kind":"runtime","optional":false},{"id":17076064912,"package_name":"pydantic","ecosystem":"pypi","requirements":"==1.10.2","direct":true,"kind":"runtime","optional":false},{"id":17076064913,"package_name":"pydot","ecosystem":"pypi","requirements":"==1.4.2","direct":true,"kind":"runtime","optional":false},{"id":17076064914,"package_name":"pyefd","ecosystem":"pypi","requirements":"==1.6.0","direct":true,"kind":"runtime","optional":false},{"id":17076064915,"package_name":"pyerfa","ecosystem":"pypi","requirements":"==2.0.0.1","direct":true,"kind":"runtime","optional":false},{"id":17076064916,"package_name":"pyGeoTile","ecosystem":"pypi","requirements":"==1.0.6","direct":true,"kind":"runtime","optional":false},{"id":17076064917,"package_name":"Pygments","ecosystem":"pypi","requirements":"==2.13.0","direct":true,"kind":"runtime","optional":false},{"id":17076064918,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.0.9","direct":true,"kind":"runtime","optional":false},{"id":17076064919,"package_name":"pyproj","ecosystem":"pypi","requirements":"==3.4.0","direct":true,"kind":"runtime","optional":false},{"id":17076064920,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":17076064921,"package_name":"python-Levenshtein","ecosystem":"pypi","requirements":"==0.20.9","direct":true,"kind":"runtime","optional":false},{"id":17076064922,"package_name":"pytz","ecosystem":"pypi","requirements":"==2022.2.1","direct":true,"kind":"runtime","optional":false},{"id":17076064923,"package_name":"PyWavelets","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":17076064924,"package_name":"pywin32","ecosystem":"pypi","requirements":"==304","direct":true,"kind":"runtime","optional":false},{"id":17076064925,"package_name":"PyYAML","ecosystem":"pypi","requirements":"==6.0","direct":true,"kind":"runtime","optional":false},{"id":17076064926,"package_name":"pyzenodo3","ecosystem":"pypi","requirements":"==1.0.2","direct":true,"kind":"runtime","optional":false},{"id":17076064927,"package_name":"pyzmq","ecosystem":"pypi","requirements":"==24.0.1","direct":true,"kind":"runtime","optional":false},{"id":17076064928,"package_name":"QtPy","ecosystem":"pypi","requirements":"==2.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064929,"package_name":"rapidfuzz","ecosystem":"pypi","requirements":"==2.13.7","direct":true,"kind":"runtime","optional":false},{"id":17076064930,"package_name":"rawpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064931,"package_name":"reportlab","ecosystem":"pypi","requirements":"==3.6.12","direct":true,"kind":"runtime","optional":false},{"id":17076064932,"package_name":"requests","ecosystem":"pypi","requirements":"==2.28.1","direct":true,"kind":"runtime","optional":false},{"id":17076064933,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"==1.3.1","direct":true,"kind":"runtime","optional":false},{"id":17076064934,"package_name":"rsa","ecosystem":"pypi","requirements":"==4.9","direct":true,"kind":"runtime","optional":false},{"id":17076064935,"package_name":"scikit-image","ecosystem":"pypi","requirements":"==0.19.3","direct":true,"kind":"runtime","optional":false},{"id":17076064936,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"==1.1.3","direct":true,"kind":"runtime","optional":false},{"id":17076064937,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.9.1","direct":true,"kind":"runtime","optional":false},{"id":17076064938,"package_name":"seaborn","ecosystem":"pypi","requirements":"==0.12.0","direct":true,"kind":"runtime","optional":false},{"id":17076064939,"package_name":"sentry-sdk","ecosystem":"pypi","requirements":"==1.9.10","direct":true,"kind":"runtime","optional":false},{"id":17076064940,"package_name":"setproctitle","ecosystem":"pypi","requirements":"==1.3.2","direct":true,"kind":"runtime","optional":false},{"id":17076064941,"package_name":"Shapely","ecosystem":"pypi","requirements":"==1.8.5.post1","direct":true,"kind":"runtime","optional":false},{"id":17076064942,"package_name":"shortuuid","ecosystem":"pypi","requirements":"==1.0.9","direct":true,"kind":"runtime","optional":false},{"id":17076064943,"package_name":"SimpleITK","ecosystem":"pypi","requirements":"==2.2.0","direct":true,"kind":"runtime","optional":false},{"id":17076064944,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":true,"kind":"runtime","optional":false},{"id":17076064945,"package_name":"sklearn","ecosystem":"pypi","requirements":"==0.0.post1","direct":true,"kind":"runtime","optional":false},{"id":17076064946,"package_name":"smmap","ecosystem":"pypi","requirements":"==5.0.0","direct":true,"kind":"runtime","optional":false},{"id":17076064947,"package_name":"soupsieve","ecosystem":"pypi","requirements":"==2.3.2.post1","direct":true,"kind":"runtime","optional":false},{"id":17076064948,"package_name":"stack-data","ecosystem":"pypi","requirements":"==0.5.1","direct":true,"kind":"runtime","optional":false},{"id":17076064949,"package_name":"tabulate","ecosystem":"pypi","requirements":"==0.9.0","direct":true,"kind":"runtime","optional":false},{"id":17076064950,"package_name":"tensorboard","ecosystem":"pypi","requirements":"==2.10.1","direct":true,"kind":"runtime","optional":false},{"id":17076064951,"package_name":"tensorboard-data-server","ecosystem":"pypi","requirements":"==0.6.1","direct":true,"kind":"runtime","optional":false},{"id":17076064952,"package_name":"tensorboard-plugin-wit","ecosystem":"pypi","requirements":"==1.8.1","direct":true,"kind":"runtime","optional":false},{"id":17076064953,"package_name":"termcolor","ecosystem":"pypi","requirements":"==2.0.1","direct":true,"kind":"runtime","optional":false},{"id":17076064954,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"==3.1.0","direct":true,"kind":"runtime","optional":false},{"id":17076064955,"package_name":"tifffile","ecosystem":"pypi","requirements":"==2022.8.12","direct":true,"kind":"runtime","optional":false},{"id":17076064956,"package_name":"timm","ecosystem":"pypi","requirements":"==0.6.11","direct":true,"kind":"runtime","optional":false},{"id":17076064957,"package_name":"tomli","ecosystem":"pypi","requirements":"==2.0.1","direct":true,"kind":"runtime","optional":false},{"id":17076064958,"package_name":"toolz","ecosystem":"pypi","requirements":"==0.12.0","direct":true,"kind":"runtime","optional":false},{"id":17076064959,"package_name":"torch","ecosystem":"pypi","requirements":"==1.11.0","direct":true,"kind":"runtime","optional":false},{"id":17076064960,"package_name":"torchaudio","ecosystem":"pypi","requirements":"==0.11.0","direct":true,"kind":"runtime","optional":false},{"id":17076064961,"package_name":"torchvision","ecosystem":"pypi","requirements":"==0.12.0","direct":true,"kind":"runtime","optional":false},{"id":17076064962,"package_name":"tornado","ecosystem":"pypi","requirements":"==6.2","direct":true,"kind":"runtime","optional":false},{"id":17076064963,"package_name":"tqdm","ecosystem":"pypi","requirements":"==4.64.1","direct":true,"kind":"runtime","optional":false},{"id":17076064964,"package_name":"traitlets","ecosystem":"pypi","requirements":"==5.5.0","direct":true,"kind":"runtime","optional":false},{"id":17076064965,"package_name":"typing_extensions","ecosystem":"pypi","requirements":"==4.3.0","direct":true,"kind":"runtime","optional":false},{"id":17076064966,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.12","direct":true,"kind":"runtime","optional":false},{"id":17076064967,"package_name":"visdom","ecosystem":"pypi","requirements":"==0.2.4","direct":true,"kind":"runtime","optional":false},{"id":17076064968,"package_name":"vit-pytorch","ecosystem":"pypi","requirements":"==0.37.1","direct":true,"kind":"runtime","optional":false},{"id":17076064969,"package_name":"wandb","ecosystem":"pypi","requirements":"==0.13.4","direct":true,"kind":"runtime","optional":false},{"id":17076064970,"package_name":"wcwidth","ecosystem":"pypi","requirements":"==0.2.5","direct":true,"kind":"runtime","optional":false},{"id":17076064971,"package_name":"websocket-client","ecosystem":"pypi","requirements":"==1.5.1","direct":true,"kind":"runtime","optional":false},{"id":17076064972,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"==2.2.2","direct":true,"kind":"runtime","optional":false},{"id":17076064973,"package_name":"wget","ecosystem":"pypi","requirements":"==3.2","direct":true,"kind":"runtime","optional":false},{"id":17076064974,"package_name":"yacs","ecosystem":"pypi","requirements":"==0.1.8","direct":true,"kind":"runtime","optional":false},{"id":17076064975,"package_name":"zenodo-get","ecosystem":"pypi","requirements":"==1.3.4","direct":true,"kind":"runtime","optional":false},{"id":17076064976,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064977,"package_name":"colour-science","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064978,"package_name":"objgraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064979,"package_name":"memory_profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_deprecated/requirements_cleaned.txt","sha":null,"kind":"manifest","created_at":"2024-03-27T17:44:19.983Z","updated_at":"2024-03-27T17:44:19.983Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/requirements_deprecated/requirements_cleaned.txt","dependencies":[{"id":17076064980,"package_name":"astropy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064981,"package_name":"asttokens","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064982,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064983,"package_name":"cachetools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064984,"package_name":"certifi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064985,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064986,"package_name":"colorama","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064987,"package_name":"contourpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064988,"package_name":"cycler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064989,"package_name":"Cython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064990,"package_name":"dask","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064991,"package_name":"dataclasses","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064992,"package_name":"debugpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064993,"package_name":"decorator","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064994,"package_name":"einops","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064995,"package_name":"entrypoints","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064996,"package_name":"executing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064997,"package_name":"fairscale","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064998,"package_name":"filelock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076064999,"package_name":"fonttools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065000,"package_name":"fsspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065001,"package_name":"future","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065002,"package_name":"fuzzywuzzy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065003,"package_name":"fvcore","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065004,"package_name":"geojson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065005,"package_name":"gitdb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065006,"package_name":"GitPython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065007,"package_name":"grpcio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065008,"package_name":"huggingface-hub","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065009,"package_name":"hydra-core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065010,"package_name":"idna","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065011,"package_name":"imageio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065012,"package_name":"imagesize","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065013,"package_name":"imutils","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065014,"package_name":"iopath","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065015,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065016,"package_name":"ipython","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065017,"package_name":"jedi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065018,"package_name":"joblib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065019,"package_name":"jsonpatch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065020,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065021,"package_name":"jupyter_client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065022,"package_name":"jupyter_core","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065023,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065024,"package_name":"labelbox","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065025,"package_name":"Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065026,"package_name":"locket","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065027,"package_name":"Markdown","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065028,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065029,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065030,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065031,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065032,"package_name":"ndjson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065033,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065034,"package_name":"networkx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065035,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065036,"package_name":"oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065037,"package_name":"omegaconf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065038,"package_name":"packaging","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065039,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065040,"package_name":"parso","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065041,"package_name":"partd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065042,"package_name":"pathspec","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065043,"package_name":"pathtools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065044,"package_name":"pickleshare","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065045,"package_name":"Pillow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065046,"package_name":"platformdirs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065047,"package_name":"pooch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065048,"package_name":"portalocker","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065049,"package_name":"promise","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065050,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065051,"package_name":"protobuf","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065052,"package_name":"psutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065053,"package_name":"pure-eval","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065054,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065055,"package_name":"pyamg","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065056,"package_name":"pyasn1","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065057,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065058,"package_name":"pydantic","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065059,"package_name":"pydot","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065060,"package_name":"pyefd","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065061,"package_name":"pyerfa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065062,"package_name":"pyGeoTile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065063,"package_name":"Pygments","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065064,"package_name":"pyparsing","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065065,"package_name":"pyproj","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065066,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065067,"package_name":"python-Levenshtein","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065068,"package_name":"pytz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065069,"package_name":"PyWavelets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065070,"package_name":"pywin32","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065071,"package_name":"PyYAML","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065072,"package_name":"pyzenodo3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065073,"package_name":"pyzmq","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065074,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065075,"package_name":"colour-science","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065076,"package_name":"QtPy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065077,"package_name":"rapidfuzz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065078,"package_name":"rawpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065079,"package_name":"reportlab","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065080,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065081,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065082,"package_name":"rsa","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065083,"package_name":"scikit-image","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065084,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065085,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065086,"package_name":"seaborn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065087,"package_name":"sentry-sdk","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065088,"package_name":"setproctitle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065089,"package_name":"Shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065090,"package_name":"shortuuid","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065091,"package_name":"SimpleITK","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065092,"package_name":"six","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065093,"package_name":"sklearn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065094,"package_name":"smmap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065095,"package_name":"soupsieve","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065096,"package_name":"stack-data","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065097,"package_name":"tabulate","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065098,"package_name":"tensorboard","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065099,"package_name":"tensorboard-data-server","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065100,"package_name":"tensorboard-plugin-wit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065101,"package_name":"termcolor","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065102,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065103,"package_name":"tifffile","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065104,"package_name":"timm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065105,"package_name":"tomli","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065106,"package_name":"toolz","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065107,"package_name":"tornado","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065108,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065109,"package_name":"traitlets","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065110,"package_name":"typing_extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065111,"package_name":"urllib3","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065112,"package_name":"wandb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065113,"package_name":"wcwidth","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065114,"package_name":"websocket-client","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065115,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065116,"package_name":"wget","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065117,"package_name":"yacs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065118,"package_name":"zenodo-get","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065119,"package_name":"objgraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065120,"package_name":"memory_profiler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_deprecated/requirements_manual.txt","sha":null,"kind":"manifest","created_at":"2024-03-27T17:44:20.133Z","updated_at":"2024-03-27T17:44:20.133Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/requirements_deprecated/requirements_manual.txt","dependencies":[{"id":17076065121,"package_name":"pipinstallnumpy-U","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065128,"package_name":"pipinstallPIL","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17076065315,"package_name":"vit-pytorch","ecosystem":"pypi","requirements":"==0.37.1","direct":true,"kind":"runtime","optional":false},{"id":17076065316,"package_name":"pycocotools","ecosystem":"pypi","requirements":"==2.0.5","direct":true,"kind":"runtime","optional":false},{"id":17076065317,"package_name":"opencv-contrib-python","ecosystem":"pypi","requirements":"==4.7.0.68","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"leafmachine2/keypoint_detector/ultralytics/docker/Dockerfile","sha":null,"kind":"manifest","created_at":"2024-08-21T20:44:09.624Z","updated_at":"2024-08-21T20:44:09.624Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/keypoint_detector/ultralytics/docker/Dockerfile","dependencies":[{"id":19837344975,"package_name":"pytorch/pytorch","ecosystem":"docker","requirements":"2.0.1-cuda11.7-cudnn8-runtime","direct":true,"kind":"build","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/keypoint_detector/ultralytics/requirements.txt","sha":null,"kind":"manifest","created_at":"2024-08-21T20:44:10.247Z","updated_at":"2024-08-21T20:44:10.247Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/keypoint_detector/ultralytics/requirements.txt","dependencies":[{"id":19837345115,"package_name":"matplotlib","ecosystem":"pypi","requirements":"\u003e=3.2.2","direct":true,"kind":"runtime","optional":false},{"id":19837345116,"package_name":"numpy","ecosystem":"pypi","requirements":"\u003e=1.22.2","direct":true,"kind":"runtime","optional":false},{"id":19837345117,"package_name":"opencv-python","ecosystem":"pypi","requirements":"\u003e=4.6.0","direct":true,"kind":"runtime","optional":false},{"id":19837345118,"package_name":"pillow","ecosystem":"pypi","requirements":"\u003e=7.1.2","direct":true,"kind":"runtime","optional":false},{"id":19837345119,"package_name":"pyyaml","ecosystem":"pypi","requirements":"\u003e=5.3.1","direct":true,"kind":"runtime","optional":false},{"id":19837345120,"package_name":"requests","ecosystem":"pypi","requirements":"\u003e=2.23.0","direct":true,"kind":"runtime","optional":false},{"id":19837345121,"package_name":"scipy","ecosystem":"pypi","requirements":"\u003e=1.4.1","direct":true,"kind":"runtime","optional":false},{"id":19837345122,"package_name":"torch","ecosystem":"pypi","requirements":"\u003e=1.8.0","direct":true,"kind":"runtime","optional":false},{"id":19837345123,"package_name":"torchvision","ecosystem":"pypi","requirements":"\u003e=0.9.0","direct":true,"kind":"runtime","optional":false},{"id":19837345124,"package_name":"tqdm","ecosystem":"pypi","requirements":"\u003e=4.64.0","direct":true,"kind":"runtime","optional":false},{"id":19837345125,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=1.1.4","direct":true,"kind":"runtime","optional":false},{"id":19837345126,"package_name":"seaborn","ecosystem":"pypi","requirements":"\u003e=0.11.0","direct":true,"kind":"runtime","optional":false},{"id":19837345127,"package_name":"psutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":19837345128,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"leafmachine2/keypoint_detector/ultralytics/setup.py","sha":null,"kind":"manifest","created_at":"2024-08-21T20:44:10.501Z","updated_at":"2024-08-21T20:44:10.501Z","repository_link":"https://github.com/Gene-Weaver/LeafMachine2/blob/main/leafmachine2/keypoint_detector/ultralytics/setup.py","dependencies":[]}],"score":4.499809670330265,"created_at":"2026-04-24T16:23:49.119Z","updated_at":"2026-05-15T07:01:49.872Z","avatar_url":"https://github.com/Gene-Weaver.png","language":"Python","category":"Biosphere","sub_category":"Plants and Vegetation","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"[![LeafMachine2](https://LeafMachine.org/img/LM2_Desktop_Narrow2.jpg \"LeafMachine2\")](https://LeafMachine.org/)\n\nTable of Contents\n=================\n\n* [Updates](#updates)\n* [Installing LeafMachine2](#installing-leafmachine2)\n   * [Prerequisites](#prerequisites)\n   * [Hardware](#hardware)\n   * [Installation - Cloning the LeafMachine2 Repository](#installation---cloning-the-leafmachine2-repository)\n   * [About Python Virtual Environments](#about-python-virtual-environments)\n   * [Installation - Ubuntu 20.04+](#installation---ubuntu-2004)\n      * [Virtual Environment](#virtual-environment)\n      * [Installing Packages](#installing-packages)\n   * [Installation - Windows 10+](#installation---windows-10)\n      * [Virtual Environment](#virtual-environment-1)\n      * [Installing Packages](#installing-packages-1)\n   * [Troubleshooting CUDA](#troubleshooting-cuda)\n* [Testing the LeafMachine2 Installation](#testing-the-leafmachine2-installation)\n* [Using LeafMachine2 GUI](#using-leafmachine2-gui)\n* [Creating a Desktop Shortcut](#creating-a-desktop-shortcut)\n* [Using LeafMachine2](#using-leafmachine2)\n   * [LeafMachine2 Data Cleaning and Prep (preprocessing steps to be aware of)](#leafmachine2-data-cleaning-and-prep-preprocessing-steps-to-be-aware-of)\n   * [LeafMachine2 Configuration File](#leafmachine2-configuration-file)\n      * [Quick Start](#quick-start)\n      * [Primary options (project)](#primary-options-project)\n      * [Secondary (project)](#secondary-project)\n      * [Primary options (cropped_components)](#primary-options-cropped_components)\n      * [Primary options (data)](#primary-options-data)\n      * [Primary options (overlay)](#primary-options-overlay)\n      * [Primary options (plant_component_detector)](#primary-options-plant_component_detector)\n      * [Primary options (archival_component_detector)](#primary-options-archival_component_detector)\n      * [Primary options (landmark_detector)](#primary-options-landmark_detector)\n      * [Primary options (ruler_detection)](#primary-options-ruler_detection)\n      * [Primary options (leaf_segmentation)](#primary-options-leaf_segmentation)\n   * [SpecimenCrop Configuration Guide](#specimencrop-configuration-guide)\n      * [Before and After](#before-and-after)\n      * [Example Workflow](#example-workflow)\n      * [Important Arguments](#important-arguments)\n      * [Configuration Settings](#configuration-settings)\n   * [Downloading Images from GBIF](#downloading-images-from-gbif)\n      * [An interactive Streamlit GUI is in the works, stay tuned!](#an-interactive-streamlit-gui-is-in-the-works-stay-tuned)\n\n\n---\n\n# Updates\n\n* November 27, 2024\n    * Added instrutions for installing/running CPU-only mode\n    * All Mac users should install using CPU only\n    * I have not validated this with M-chip Macs. If it is working, please let me know\n    * AMD Radeon GPUs are NOT supported, but it is possible if you want to modify the pytorch installation yourself. I don't have access to any AMD GPUs for testing\n    * To test in CPU only mode, run the `test_cpu_only.py` file\n\n* August 14, 2024\n    * Added newest version of keypoint detector\n    * Automatic vertical alignment (rotate leaves to have lamina tip at at top, petiole at bottom)\n    * Store segmentations in a simple txt file, normalized\n\n* March 25, 2024 :rocket:\n    * Many, many changes. I recommend creating a new venv to use the updated LM2.\n    * Added a Streamlit GUI\n        * Run the `run_LeafMachine2.py` script to launch the GUI\n        * Activate the virtual env, then `python run_LeafMachine2.py`\n    * Fixed installation bugs\n    * New PCD LeafPriority detector. This drammatically improves LeafMachine2's leaf detection ability and all other downstream components. Please see [the LeafMachine2 website for more information](https://leafmachine.org/). The new PCD is the new default. The new model will be downloaded automatically when you update your installation with a `git pull` or with a clean installation. \n\n\u003e **Note:** To get the latest updates, use `cd` to move into your LeafMachine2 directory, build and activate your virtual environment, then run `git pull`. We recommend rebuilding your venv from scratch for this update. If you made local changes to your repo, you may have to stash or --force overwrite your local changes (or just install LM2 in a new local directory).\n\n# Installing LeafMachine2\n\n## Prerequisites\n- Validated with Python \u003e= 3.8, \u003c= 3.11 \n- PyTorch 1.11 (Can work with PyTorch 2.X if you are willing to mess around with dependencies/CUDA)\n- For PyTorch 2.3.1 make sure that your CUDA version is compatible\n- Git\n- CUDA version 11.3+ (if utilizing a GPU)\n    * see [Troubleshooting CUDA](#Troubleshooting-CUDA)\n\n\n## Hardware\n- A GPU with at least 8 GB of VRAM is required\n- LeafMachine2 v.2.1 is RAM limited. A batch size of 50 images could potentially utilize 48 GB+ of system memory. Setting batch sizes to 20 will only increase the number of summary and data files, but performance speed differences are minimal.\n- The PCD confidence threshold dictates RAM usage. More leaves detected -\u003e more RAM to store more leaves and derived measurements until they are saved to batch files and summary images. \n- The number of leaves per image dictates RAM usage. Taxa with hundred of leaves per image (e.g. _Diospyros buxifolia_) will require much more RAM than taxa with few leaves per image (e.g. _Quercus alba_)\n- For most PCs, set the number of workers to 2 or 4. If you have a high performance PC with 128 GB+ of RAM and a powerful CPU, then 8 workers and batch sizes of 100+ are possible. \n\u003e **Note:** An average PC with 32 GB of RAM and a consumer-grade GPU is more than capable of running LeafMachine2, just dial back the batch size. With the right configs, a PC with 16 GB of RAM can run LeafMachine2 if the batch size is set to 10 or 20. \n\n## Installation - Cloning the LeafMachine2 Repository\n1. First, install Python 3.8.10, or greater, on your machine of choice.\n    - Make sure that you can use `pip` to install packages on your machine, or at least inside of a virtual environment.\n    - Simply type `pip` into your terminal or PowerShell. If you see a list of options, you are all set. Otherwise, see\n    either this [PIP Documentation](https://pip.pypa.io/en/stable/installation/) or [this help page](https://www.geeksforgeeks.org/how-to-install-pip-on-windows/)\n2. Open a terminal window and `cd` into the directory where you want to install LeafMachine2.\n3. Clone the LeafMachine2 repository from GitHub by running `git clone https://github.com/Gene-Weaver/LeafMachine2.git` in the terminal.\n4. Move into the LeafMachine2 directory by running `cd LeafMachine2` in the terminal.\n5. To run LeafMachine2 we need to install its dependencies inside of a python virtual environmnet. Follow the instructions below for your operating system. \n\n## About Python Virtual Environments\nA virtual environment is a tool to keep the dependencies required by different projects in separate places, by creating isolated python virtual environments for them. This avoids any conflicts between the packages that you have installed for different projects. It makes it easier to maintain different versions of packages for different projects.\n\nFor more information about virtual environments, please see [Creation of virtual environments](https://docs.python.org/3/library/venv.html)\n\n\u003c!-- \u003e We include `requirements.txt` files in the `LeafMachine2/requirements/` folder. If you experience version incompatability following the instructions below, please refer to `LeafMachine2/requirements/requirements_all.txt` for an exhaustive list of packages and versions that are officially supported.  --\u003e\n\n---\n\n## Installation - Ubuntu 20.04+\n\n### Virtual Environment\n\n1. Still inside the LeafMachine2 directory, show that a venv is currently not active \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003ewhich python\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n2. Then create the virtual environment (.venv_LM2 is the name of our new virtual environment)  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython -m venv .venv_LM2\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n3. Activate the virtual environment  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003esource ./.venv_LM2/bin/activate\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n4. Confirm that the venv is active (should be different from step 1)  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003ewhich python\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n5. If you want to exit the venv, deactivate the venv using  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003edeactivate\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n### Installing Packages\n1.  First, update pip, wheel, setuptools\n    With the venv active, install wheel \n        \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython -m pip install \"wheel\"\u003c/code\u003e\u003c/pre\u003e\n        \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    Update pip and setuptools\n        \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython -m pip install --upgrade pip setuptools\u003c/code\u003e\u003c/pre\u003e\n        \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n2. Install the required dependencies to use LeafMachine2  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install -r requirements.txt\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n3. Install pycococreator\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"git+https://github.com/waspinator/pycococreator.git@fba8f4098f3c7aaa05fe119dc93bbe4063afdab8#egg=pycococreatortools\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n4. Install COCO annotation tools and a special version of Open CV\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"pycocotools\u003e=2.0.5\" \"opencv-contrib-python\u003e=4.7.0.68\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n5. LeafMachine2 algorithms require PyTorch version 1.11 for CUDA version 11.3+. If your computer does not have a GPU, then use the CPU version and the CUDA version is not applicable. PyTorch is large and will take a bit to install.\n    - WITH CPU ONLY (all Mac computers) if you install with CPU only, use the `test_cpu_only.py` test file.\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip3 install torch torchvision torchaudio\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - WITH GPU \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==1.11.0+cu113\" \"torchvision==0.12.0+cu113\" \"torchaudio==0.11.0\" --extra-index-url https://download.pytorch.org/whl/cu113\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - OR for PyTorch 2.3.0 and CUDA 12.1\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==2.3.0\" \"torchvision==0.18.0\" \"torchaudio==2.3.0\" --index-url https://download.pytorch.org/whl/cu121\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - OR for PyTorch 2.3.1 and CUDA 12.1 (**RECOMMENDED**)\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==2.3.1\" \"torchvision==0.18.1\" \"torchaudio==2.3.1\" --index-url https://download.pytorch.org/whl/cu121\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    \n    \u003c!-- - For a newer version of CUDA, like CUDA 12.1, you can install the most recent version:\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003einstall torch torchvision torchaudio\n    \u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e --\u003e\n\n6. We need to install a downgraded vertion of ViT for the DocEnTr ruler segmentation. Install ViT for PyTorch. ViT is used for segmenting labels and rulers. The DocEnTr framework that we use for document image segmentation requires an older verison of ViT, the most recent version will cause an error. \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"vit-pytorch==0.37.1\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n\u003e If you need help, please submit an inquiry in the form at [LeafMachine.org](https://LeafMachine.org/)\n\n---\n\n## Installation - Windows 10+\n\n### Virtual Environment\n\n1. Still inside the LeafMachine2 directory, show that a venv is currently not active \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython --version\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n2. Then create the virtual environment (.venv_LM2 is the name of our new virtual environment. You must name it \".venv_LM2\" if you want to use the Desktop shortcut)  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython -m venv .venv_LM2\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n3. Activate the virtual environment  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003e.\\.venv_LM2\\Scripts\\activate\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n4. Confirm that the venv is active (should be different from step 1)  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython --version\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n5. If you want to exit the venv, deactivate the venv using  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003edeactivate\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n### Installing Packages\n\n1. Install the required dependencies to use LeafMachine2  \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install -r requirements.txt\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n2. Install pycococreator\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"git+https://github.com/waspinator/pycococreator.git@fba8f4098f3c7aaa05fe119dc93bbe4063afdab8#egg=pycococreatortools\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n3. Install COCO annotation tools, a special version of Open CV, and pywin32 for creating the desktop shortcut\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"pywin32\" \"pycocotools\u003e=2.0.5\" \"opencv-contrib-python\u003e=4.7.0.68\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n4. LeafMachine2 algorithms require PyTorch version 1.11 for CUDA version 11.3+. If your computer does not have a GPU, then use the CPU version and the CUDA version is not applicable. PyTorch is large and will take a bit to install.\n    - WITH CPU ONLY (all Mac computers) if you install with CPU only, use the `test_cpu_only.py` test file.\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip3 install torch torchvision torchaudio\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - WITH GPU \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==1.11.0+cu113\" \"torchvision==0.12.0+cu113\" \"torchaudio==0.11.0\" --extra-index-url https://download.pytorch.org/whl/cu113\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - OR for PyTorch 2.3.0 and CUDA 12.1\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==2.3.0\" \"torchvision==0.18.0\" \"torchaudio==2.3.0\" --index-url https://download.pytorch.org/whl/cu121\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - OR for PyTorch 2.3.1 and CUDA 12.1 (**RECOMMENDED**)\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"torch==2.3.1\" \"torchvision==0.18.1\" \"torchaudio==2.3.1\" --index-url https://download.pytorch.org/whl/cu121\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n5. We need to install a downgraded vertion of ViT for the DocEnTr ruler segmentation. Install ViT for PyTorch. ViT is used for segmenting labels and rulers. The DocEnTr framework that we use for document image segmentation requires an older verison of ViT, the most recent version will cause an error. \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epip install \"vit-pytorch==0.37.1\"\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n\u003e If you need help, please submit an inquiry in the form at [LeafMachine.org](https://LeafMachine.org/)\n\n---\n\n## Troubleshooting CUDA\n- CUDA issues can be extremely frustrating. \n- Start by finding your current CUDA version or installing the most recent CUDA version that is compatible with your GPU. \n- Try installing the old version of PyTorch listed in these docs.\n- If that works, great! If not, you can install the [latest pytorch release](https://pytorch.org/get-started/locally/) for your specific OS and CUDA version.\n- If that fails, you might have a CUDA installation issue. \n- If you cannot get the GPU working, then you can install PyTorch with CPU only, avoiding the CUDA problem entirely, but that is not recommended given that \nLeafMachine2 is designed to use GPUs. The components that rely on ViT (binarization of labels) will *NOT* work without a GPU. The leaf segmentation may not work either, sometimes it does, sometimes not. \n- We have also validated CUDA 12.4 with PyTorch 2.X. If you have success with other versions of CUDA/pytorch, let us know and we will update our instructions. \n\n---\n\n# Testing the LeafMachine2 Installation\nAssuming no errors with the previous instructions, we can now test LeafMachine2 and make sure that everything is funtional. There are two options for working with LeafMachine2. \n\nIf you plan to mostly use it with default setting, then working from the terminal (or PowerShell) will be fine. \n\nWe recommend using [Microsoft Visual Studio Code](https://code.visualstudio.com/download) (or another IDE e.g. Sublime, PyCharm...) since LeafMachine2 relies on configuration files. Editing config files in an IDE helps reduce syntax mistakes, plus it's just easier to work with. \n\nIf you plan on changing lots of settings, we recommend running LeafMachine2 in debug mode (in the IDE, LM2 does not have a debug mode). It won't hurt anything, and it will show you more information about any errors. We log and handle errors, but not all errors fail gracefully and inevitably there will be some novel errors as we continue to refine LeafMachine2. \n\n1. When you first run LeafMachine2, it must download all of the machine learning files that are not stored on GitHub. You will see white text in the console indicating progress or failure. \n    - If LM2 displays an error while downloading the networks, first try to run `test.py` described below.\n        * Note: If you attempt to download the ML networks multiple times, you may see error messages, but often the networks were successfully downloaded anyway. \n    - If you still have trouble, submit your log file (or all files) to [LeafMachine2 Logs](https://docs.google.com/forms/d/e/1FAIpQLSdTOBBt4LNQBy9NPzxGFXGywwJoc52YGcVTY9dO6VKM1iz0Fw/viewform?usp=sf_link) for assistance. \n2. In the future, we will release updated ML networks. This system will also handle updates. \n3. We have included demo images and a test file to make sure that all components are functional. The demo images are in `../LeafMachine2/demo/demo_images/` and all output from the test will go to `../LeafMachine2/demo/demo_output/`. After a successful test, you can delete the contents of `demo_output/` if you want, or keep it as a reference. \n    - The demo will run all components of LeafMachine2, including some features that you may not want. For example, the demo will test skeletonization of the labels and rulers, so in the folder `../LeafMachine2/demo/demo_output/test_run/Cropped_Images/By_Class/label_binary` you will see strange looking labels, but that is intentional. \n4. Running the installation test (from the terminal)\n    - make sure that the virtual environment is active and that the virtual environment is located inside the LM2 home directory: `LeafMachine2/.venv_LM2`\n    - cd into the LeafMachine2 directory\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython test.py\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    or\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython3 test.py\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    - You should see some blue text, and then a lot of information in the console. \n    - If the run completes (usually after ~5 minutes) and you see a :grinning: then you should be all set!\n    - Otherwise, double check that you followed each step and reach out by submitting an inquiry in the form at [LeafMachine.org](https://LeafMachine.org/)\n\n    * Note: If you installed with CPU only, then use the following test file instead:\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython test_cpu_only.py\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\n5. LM2 downloads the required ML models in a zipped folder and then unpacks the models, moving them to the correct places. If this process is stopped prematurely for any reason, then you need to add the flag `--redownload`. LM2 looks to see if the `version.yml` is present. If it is, then it will not restart the unpacking process. So `--redownload` deletes everything in `LeafMachine2/bin` so that the process can start fresh. \n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython test.py --redownload\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n\u003e **Note:** Step 5 can also be run after major updates that may have introduced a bug, if the issue is related to missing modules or ML models. (This occured with an update on August 14, 2024)\n---\n\n# Using LeafMachine2 GUI\n\nAs of March 18, 2024 LeafMachine2 has a Stramlit GUI. To launch the GUI, run:\n\u003cpre\u003e\u003ccode class=\"language-python\"\u003epython run_LeafMachine2.py\u003c/code\u003e\u003c/pre\u003e\n\u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\nThis will open a new tab in your browser with a simple user interface. Please refer to the guide below for more information about how everything works.\nThe GUI has most of the setting described below and is a great place to start. \n\n\u003e **Note:** If you previously installed LeafMachine2, we recommend rebuilding your venv from scratch before trying to run the latest updates. To get the latest updates, use `cd` to move into your LeafMachine2 directory, build and activate your virtual environment, then run `git pull`. If you made local changes to your repo, you may have to stash or --force overwrite your local changes (or just install LM2 in a new local directory).\n\n# Creating a Desktop Shortcut\n\nFor Windows installations, you can create a desktop shortcut to launch the GUI. Activate your virtual environment, then run `python create_desktop_shortcut.py`. In the terminal you will need to follow the instructions by selecting the location where you want to save the shortcut, and then selecting the virtual environment's folder `.venv_LM2`. Your shortcut should appear. \n\n\n# Using LeafMachine2\n\nFor most applications, you only need to be aware of two files:\n- `LeafMachine2.py`\n    * The file to run LeafMachine2\n- `LeafMachine2.yaml`\n    * The configuration file for LeafMachine2\n\nTo run LeafMachine2...\n- From the terminal\n    * cd into the `./LeafMachine2` directory\n    * make sure that the virtual environment is active\n    * run the python file\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython3 LeafMachine2.py\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n    or\n    \u003cpre\u003e\u003ccode class=\"language-python\"\u003epython LeafMachine2.py\u003c/code\u003e\u003c/pre\u003e\n    \u003cbutton class=\"btn\" data-clipboard-target=\"#code-snippet\"\u003e\u003c/button\u003e\n- From an IDE like VS Code\n    * open the `./LeafMachine2` directory\n    * locate the `LeafMachine2.py` file\n    * run the file (in debug mode if you want)\n- That's it!\n\nWell almost. We also need to setup our [configuration file](#LeafMachine2-Configuration-File). \n\n---\n\n## LeafMachine2 Data Cleaning and Prep (preprocessing steps to be aware of)\nLeafMachine **WILL** automatically edit illegal characters out of file names and replace them with `_` or `-`.\n\nIllegal characters in file names include anything that is not a letter or number or `_` or `-`.\n\nSecifically, we use this function to clean names:\n```python\nname_cleaned = re.sub(r\"[^a-zA-Z0-9_-]\",\"-\",name)\n```\nSpaces will become `_`.\n\nAlso, all images will be rotated to be vertical - downstream processes rely on this. This check will also **delete** any corrupt image files. We found that ~1/10,000 downloads from GBIF produce a corrupt file and this is how we chose to deal with it. \n\n* Illegal character replacement and image rotation can be turned off, but doing so will likely cause bad things to happen. Change these config settings to `False`:\n```yaml\nleafmachine:\n    do:\n        check_for_illegal_filenames: False \n        check_for_corrupt_images_make_vertical: False\n```\n\n\u003e If these processing steps sound like they will significantly impact your raw images, then *please* make sure that you have back up copies of your original images. If you downloaded your images from GBIF, this should not be a worry. But if you are processing your own custom images, then please only run LeafMachine2 on copies of the original images. No one has a good day if a file is deleted! If you have concerns please reach out [LeafMachine.org](https://LeafMachine.org/).\n\n\u003e If your taxa names (the actual file name) have special characters, LeafMachine2 will replace them with `-`. Python code in general does not play nice with characters like:\n\u003e * Viola lutea x tricolor x altaica  :arrow_right:  Viola_lutea_x_tricolor_x_altaica  \n\u003e * Viola lutea x tricolor x altaica  :arrow_right:  Viola_lutea_-_tricolor_-_altaica  (if the X is not the letter X)\n\u003e * Dichondra sp. Inglewood (J.M.Dalby 86/93)  :arrow_right:  Dichondra_sp-_Inglewood_-J.M.Dalby_86-93-\n\u003e * Sida sp. Musselbrook (M.B.Thomas+ MRS437)  :arrow_right: Sida_sp-_Musselbrook_-M-B-Thomas-_MRS437-\n\n\u003e These special characters should not be used in file names (in general, not just for LeafMachine2). \n\nHaving spaces in names or directories can cause unexpected problems.\n* :heavy_check_mark: `./dir_names_with_underscores/file_name_with_underscores`\n* :heavy_check_mark: `./dir-names-with-dashes/file-name-with-dashes`\n* :x: `./not great dir names/not great file names`\n\n---\n\n## LeafMachine2 Configuration File\nNow you can run LeafMachine2, but unless you setup the configuration file, nothing will happen! LeafMachine2 has many many configurable settings. Here we will outline settings that most folks will use. The `LeafMachine2.yaml` file is grouped by component, but not all settings within a component group need to be (or should be) modified. \n\nMost settings dictate which output files LeafMachine2 will save. Some dictate how many leaves will be extracted or which ML networks will be used.\n\nTo change settings in the `LeafMachine2.yaml` file we recommend using a VS Code or another IDE  because they will help reduce errors. But any plain text editor will work (e.g. Notepad on Windows)\n\nOpen the file and customize the options described below. \n\n### Quick Start\nThe most important setting are marked with a :star:. Begin with these settings and then explore adjusting other settings (if needed).\n\n### Primary options (project)\n:star: Settings that tell LeafMachine2 where things are and where you want to save output files.\n\nStrings must be inside '' or \"\". Forgetting them, or missing one, will cause errors.\n\nType `null` for the default value.\n\nPointing to directories. \n```yaml\nleafmachine:\n    project:\n        dir_output: '/full/path/to/output/directory' # LeafMachine2 will build the output dir structure here\n        run_name: 'informative_run_name' # LeafMachine2 will build the output dir structure here\n        dir_images_local: '/full/path/to/directory/containing/images' # This can also be a dir with subdirs\n```\n\nSet `image_location` to `'local'` if you already have images, or to `'GBIF'` if you will configure LM2 to download the images.\n\nMore information about downloading images [here](#Downloading-Images-from-GBIF).\n```yaml\nleafmachine:\n    project:\n        image_location: 'local' # str |FROM| 'local' or 'GBIF' # \n        GBIF_mode: 'all' \n```\n\n:star: Batch processing. Set based on PC hardware. We recommend 64 GB of RAM for `batch_size: 50` and `num_workers: 4`. \n\nOn your first run, set `batch_size: 5 num_workers: 2` jsut to make sure everything is working, then increase to taste. \n```yaml\nleafmachine:\n    project:\n        batch_size: 50 # default = 20\n        num_workers: 2 # default = 2\n```\n\n### Secondary (project)\nThese are less common options. Do not change unless you need to. Set to `null` if not in use. \n\nThese settings will find the GBIF images and occurrence CSV files, create a combined.csv file, and enable you to merge these data with the LM2 output data files. Requires images to already be downloaded and `image_location: 'local'`. \n```yaml\nleafmachine:\n    project:\n        path_combined_csv_local: '/full/path/to/save/location/of/run_name_combined.csv' # do set the name of the combined file here\n        path_occurrence_csv_local: '/full/path/to/occurrence_csv' # just the dir that containes the txt or csv file\n        path_images_csv_local: '/full/path/to/images_csv' # just the dir that containes the txt or csv file\n```\n\nIf you are reprocessing the same group of images multiple times, you can point LM2 to the *first* ACD and PCD detection files to save time. This assumes that you want to use the same ACD and PCD detections each time. Set to `null` to tell LM2 to run ACD and PCD each time. \n```yaml\nleafmachine:\n    project:\n        use_existing_plant_component_detections: '/full/path/to/output/directory/informative_run_name/Plant_Components/labels'\n        use_existing_archival_component_detections: '/full/path/to/output/directory/informative_run_name/Archival_Components/labels'\n```\n\nThis will allow you to select a random subset of a large image set. \n\nSetting `n_images_per_species: 10` will randomly pick 10 images from the species in \n`species_list: '/full/path/to/existing/species/names/10_images_per_species.csv'` \nand save them to `dir_images_subset: '/full/path/to/save/location/of/new/subset'`. \n\nSet `process_subset_of_images: True` to use, `process_subset_of_images: False` to skip.\n\nThe sepcies list is a CSV file with this format:\n| species                           | count |\n|----------------------------------|-------|\n| Ebenaceae_Diospyros_virginiana   | 3263  |\n| Ebenaceae_Diospyros_ferrea       | 614   |\n| Ebenaceae_Diospyros_iturensis    | 552   |\n| Ebenaceae_Diospyros_mespiliformis| 478   |\netc...\n```yaml\nleafmachine:\n    project:\n        process_subset_of_images: True\n        dir_images_subset: '/full/path/to/save/location/of/new/subset'\n        n_images_per_species: 10\n        species_list: '/full/path/to/existing/species/names/10_images_per_species.csv' \n```\n\n---\n### Primary options (cropped_components)\nSaves cropped RGB images based on detections from the ACD and PCD. \n\n:star: If you want to save none, set `do_save_cropped_annotations: False`\n\nIf you want to save all cropped images (which is heaps and heaps of images...), set `save_cropped_annotations: ['save_all']`\n\nUse the template below to pick and choose classes to save. \n:star: Set `binarize_labels: True` to use a ViT ML network to clean labels and rulers. Note: this will binarize all classes in `save_cropped_annotations: ['label', 'ruler']`.\n\nSet `binarize_labels_skeletonize: True` to skeletonize the binary image. Not useful for most situations. \n```yaml\nleafmachine:\n    cropped_components:\n        # add to list to save, lowercase, comma seperated, in 'quotes'\n        # archival |FROM| \n        #           ruler, barcode, colorcard, label, map, envelope, photo, attached_item, weights\n        # plant |FROM| \n        #           leaf_whole, leaf_partial, leaflet, seed_fruit_one, seed_fruit_many, flower_one, flower_many, bud, specimen, roots, wood\n        do_save_cropped_annotations: True\n        save_cropped_annotations: ['label', 'ruler'] # 'save_all' to save all classes\n        save_per_annotation_class: True # saves crops into class-names folders\n        binarize_labels: True\n        binarize_labels_skeletonize: False\n```\n\n---\n### Primary options (data)\nConfigure data output. Currently, LM2 saves data to CSV files. JSON files are not going to be helpful for most situations. \n\nTo apply the conversion factor to all measurements, set `do_apply_conversion_factor: True`\n\nTo include the DWC data in the output files, set `include_darwin_core_data_from_combined_file: True`\n```yaml\nleafmachine:\n    data:\n        save_json_rulers: False\n        save_json_measurements: False\n        save_individual_csv_files_rulers: False\n        save_individual_csv_files_measurements: False\n        include_darwin_core_data_from_combined_file: False\n        do_apply_conversion_factor: True\n```\n\n---\n### Primary options (overlay)\nConfigure the overlay settings for most of the summary output. \n\n:star: Set `save_overlay_to_pdf: True` to save each summary image to a PDF page. This is useful for keeping the number of total output files low.\n\n:star: Set `save_overlay_to_jpgs: True` to save each summary image at full resolution.\n\nSince we place roated bounding boxes around leaves, you can set `ignore_plant_detections_classes: ['leaf_whole', 'leaf_partial', 'specimen']` to hide the bounding boxes the come directly from the PCD. Same for `ignore_archival_detections_classes: []` and `ignore_landmark_classes: []`, but we recommend leaving them empty.\n\n:star: Depending on your image size, you can increase or decrease these settings to change the thickness of overlay lines:\n```yaml\n        line_width_archival: 2 # int # thick = 6, thin = 1\n        line_width_plant: 6 # int # thick = 6, thin = 1\n        line_width_seg: 12 # int # thick = 12, thin = 1\n        line_width_efd: 6 # int # thick = 6, thin = 1\n```\n\nThese settings are a good starting point:\n```yaml\nleafmachine:\n    overlay:\n        save_overlay_to_pdf: True\n        save_overlay_to_jpgs: True\n        overlay_dpi: 300 # int |FROM| 100 to 300\n        overlay_background_color: 'black' # str |FROM| 'white' or 'black'\n\n        show_archival_detections: True\n        ignore_archival_detections_classes: []\n        show_plant_detections: True\n        ignore_plant_detections_classes: ['leaf_whole', 'leaf_partial', 'specimen']\n        show_segmentations: True\n        show_landmarks: True\n        ignore_landmark_classes: []\n\n        line_width_archival: 2 # int\n        line_width_plant: 6 # int\n        line_width_seg: 12 # int # thick = 12\n        line_width_efd: 6 # int # thick = 3\n        alpha_transparency_archival: 0.3  # float between 0 and 1\n        alpha_transparency_plant: 0\n        alpha_transparency_seg_whole_leaf: 0.4\n        alpha_transparency_seg_partial_leaf: 0.3\n```\n\n---\n### Primary options (plant_component_detector)\n:star: This is probably the most impactful setting in LM2: `minimum_confidence_threshold: 0.5 `\nHigher values like `0.9` will detect fewer leaves, lower values like `0.10` will detect many leaves. \n\nSet `do_save_prediction_overlay_images: True` to save the YOLOv5 overlay images. These also show the bbox confidence and are useful for determining why some objects are not getting detected.\n\nSet `ignore_objects_for_overlay: ['leaf_partial]` to hide predictions from the YOLOv5 overlay images. Can be useful for very cluttered images. Use the same names as in [Primary options (cropped_components)](#Primary-options-(cropped_components)) \n\nDo not change the detecor names. LM2 v.2.1 only include networks from the publication. Additional networks will be available in future releases. \n```yaml\nleafmachine:\n    plant_component_detector:\n        # ./leafmachine2/component_detector/runs/train/detector_type/detector_version/detector_iteration/weights/detector_weights\n        detector_type: 'Plant_Detector' \n        detector_version: 'PLANT_GroupAB_200'\n        detector_iteration: 'PLANT_GroupAB_200'\n        detector_weights: 'best.pt'\n        minimum_confidence_threshold: 0.5 #0.2\n        do_save_prediction_overlay_images: True\n        ignore_objects_for_overlay: []\n```\n\n---\n### Primary options (archival_component_detector)\n:star: Archival components are detected exceptionally well. We have seen very few errors or problems with `minimum_confidence_threshold: 0.5` and recommend leaving this alone unless your images are substantially different from an average herbarium specimen. \n\nSet `do_save_prediction_overlay_images: True` to save the YOLOv5 overlay images. These also show the bbox confidence and are useful for determining why some objects are not getting detected.\n\nSet `ignore_objects_for_overlay: ['label]` to hide predictions from the YOLOv5 overlay images. Can be useful for very cluttered images. Use the same names as in [Primary options (cropped_components)](#Primary-options-(cropped_components)) \n\nDo not change the detecor names. LM2 v.2.1 only include networks from the publication. Additional networks will be available in future releases. \n```yaml\nleafmachine:\n    archival_component_detector:\n        # ./leafmachine2/component_detector/runs/train/detector_type/detector_version/detector_iteration/weights/detector_weights\n        detector_type: 'Archival_Detector' \n        detector_version: 'PREP_final'\n        detector_iteration: 'PREP_final'\n        detector_weights: 'best.pt'\n        minimum_confidence_threshold: 0.5\n        do_save_prediction_overlay_images: True\n        ignore_objects_for_overlay: []\n```\n\n---\n### Primary options (landmark_detector)\n:star: To enable landmark detection set `landmark_whole_leaves: True`. LM2 v.2.1 does not support landmark detection for partial leaves, so set `landmark_whole_leaves: False`. \n\n:star: Please refer to the publication for an explanation of why `minimum_confidence_threshold: 0.1` is set so low. We found this to be a happy spot, but tweaking the value up or down may improve results for some taxa. \n\nSet `do_save_prediction_overlay_images: True` to save the landmarking overlay images to a PDF file for review. *To show the landmark detections in the whole specimen summary images, this needs to be set to `True` too*. This applies to `do_save_final_images: True` as well.\n\nDo not change the detecor names. LM2 v.2.1 only include networks from the publication. Additional networks will be available in future releases. \n```yaml\nleafmachine:\n    landmark_detector:\n        # ./leafmachine2/component_detector/runs/train/detector_type/detector_version/detector_iteration/weights/detector_weights\n        landmark_whole_leaves: True\n        landmark_partial_leaves: False\n        \n        detector_type: 'Landmark_Detector_YOLO' \n        detector_version: 'Landmarks'\n        detector_iteration: 'Landmarks'\n        detector_weights: 'last.pt'\n        minimum_confidence_threshold: 0.1\n        do_save_prediction_overlay_images: True \n        ignore_objects_for_overlay: [] # list[str] # list of objects that can be excluded from the overlay # all = null\n        use_existing_landmark_detections: null\n\n        do_show_QC_images: False\n        do_save_QC_images: True\n\n        do_show_final_images: False\n        do_save_final_images: True\n\n```\n\n---\n### Primary options (ruler_detection)\n:star: Set these to save different versions of ruler QC images:\n```yaml\nsave_ruler_validation: False # the full QC image, includes the squarified image and intermediate steps\nsave_ruler_validation_summary: True  # the recommended QC image\nsave_ruler_processed: False # just the binary ruler\n```\nTo limit conversion factor determination to highly confident rulers, set `minimum_confidence_threshold: 0.8`.\nWe find that `minimum_confidence_threshold: 0.4` is fine in general, though. \n\nDo not change the detecor names. LM2 v.2.1 only include networks from the publication. Additional networks will be available in future releases. \n```yaml\nleafmachine:\n    ruler_detection:\n        detect_ruler_type: True # only True right now\n        ruler_detector: 'ruler_classifier_38classes_v-1.pt'  # MATCH THE SQUARIFY VERSIONS\n        ruler_binary_detector: 'model_scripted_resnet_720_withCompression.pt'  # MATCH THE SQUARIFY VERSIONS\n        minimum_confidence_threshold: 0.4\n        save_ruler_validation: True # save_ruler_class_overlay: True\n        save_ruler_validation_summary: True  # save_ruler_overlay: True \n        save_ruler_processed: False # this is the angle-corrected rgb ruler\n```\n\n---\n### Primary options (leaf_segmentation)\n:star: Tell LM2 to segment ideal leaves by setting `segment_whole_leaves: True` and partial leaves by setting `segment_partial_leaves: False`. In general, there are *many* more partial leaves than ideal leaves. So segmenting partial leaves will *significantly* increase total processing time. Please refer to the publication for a more detailed overview of these settings. \n\nThe LM2 leaf segmentation tool will try to segment all leaves that it sees, but we only want it to find one leaf, so we set ` keep_only_best_one_leaf_one_petiole: True` to tell LM2 to only keep the largest leaf and petiole. This is not perfect, but it gets the job done for now. \n\n:star: To save all leaf mask overlays onto the full image as a PDF, set `save_segmentation_overlay_images_to_pdf: True`\n\n:star: To save all leaf mask overlays onto the full image as individual images, set `save_each_segmentation_overlay_image: True`\n\n:star: This saves each cropped leaf with its overlay to individual files `save_individual_overlay_images: True` and this sets the overlay line width `overlay_line_width: 1`\n\n:star: LM2 can also save the masks to PNG files. To use the EFDs as the masks (these will be smooth compared to the raw mask) set `use_efds_for_png_masks: False `\n\n:star: To save individual leaf masks, set `save_masks_color: True`\n\n:star: To save full image leaf masks, set `save_full_image_masks_color: True`\n\n:star: To save the RGB image, set `save_rgb_cropped_images: True`\n\n:star: To measure length and width of leaves set `find_minimum_bounding_box: True`\n\n:star: To calcualte EFDs set `calculate_elliptic_fourier_descriptors: True` and define the desired order with `elliptic_fourier_descriptor_order: null`, the default is 40, which maintains detail.\n\nWe found no real need to change `minimum_confidence_threshold: 0.7`, but you may find better results with adjustments. \n\nDo not change the `segmentation_model`. LM2 v.2.1 only include networks from the publication. Additional networks will be available in future releases. \n```yaml\nleafmachine:\n    leaf_segmentation:\n        segment_whole_leaves: True\n        segment_partial_leaves: False \n\n        keep_only_best_one_leaf_one_petiole: True\n\n        save_segmentation_overlay_images_to_pdf: True\n        save_each_segmentation_overlay_image: True\n        save_individual_overlay_images: True\n        overlay_line_width: 1 # int |DEFAULT| 1 \n    \n        use_efds_for_png_masks: False # requires that you calculate efds --\u003e calculate_elliptic_fourier_descriptors: True\n        save_masks_color: True\n        save_full_image_masks_color: True\n        save_rgb_cropped_images: True\n\n        find_minimum_bounding_box: True\n\n        calculate_elliptic_fourier_descriptors: True # bool |DEFAULT| True \n        elliptic_fourier_descriptor_order: null # int |DEFAULT| 40\n        \n        segmentation_model: 'GroupB_Dataset_100000_Iter_1176PTS_512Batch_smooth_l1_LR00025_BGR'\n        minimum_confidence_threshold: 0.7 #0.7\n        generate_overlay: False\n        overlay_dpi: 300 # int |FROM| 100 to 300\n        overlay_background_color: 'black' # str |FROM| 'white' or 'black'\n```\n## SpecimenCrop Configuration Guide\n\nThis configuration is for the `SpecimenCrop.py` script and relies on the `LeafMachine2` machine learning model. The primary purpose of this script is to locate all the desired objects inside a specimen image and crop the image to minimize blank space. The primary use case for this is the creation of XMP sidecar files to enhance the efficiency of working in Adobe Lightroom. There are two general usages:\n1. (Recommended) Only create XMP sidecar files\n    - Contains cropping and orientation settings\n    - Applied to RAW images when imported into Adobe Lightroom\n    - Original RAW files are not edited/changed at all by LeafMachine2\n    - For crops to be applied, open and export using Lightroom\n2. Use LeafMachine2 to create TIFFs or JPGs from the original RAW files\n    - Color accuracy is not guaranteed\n    - Quality retention is not guaranteed\n    - EXIF data is copied from the RAW files and added to the EXIF data of the created TIFFs and JPGs\n\n### Before and After\n\nThe only items excluded from these crops were 'weights' class objects.\n\nOriginal | After SpecimenCrop (150 pixel padding) | After SpecimenCrop (50 pixel padding)\n:---:|:---:|:---:\n![Original 1](docs/img/SpecimenCrop_BA/BA_1_before.jpg) | ![After 150px padding 1](docs/img/SpecimenCrop_BA/BA_1_after.jpg) | ![After 50px padding 1](docs/img/SpecimenCrop_BA/BA_1_after_50.jpg)\n![Original 2](docs/img/SpecimenCrop_BA/BA_2_before.jpg) | ![After 150px padding 2](docs/img/SpecimenCrop_BA/BA_2_after.jpg) | ![After 50px padding 2](docs/img/SpecimenCrop_BA/BA_2_after_50.jpg)\n\n\n### Example Workflow\n\n1. **Locate Raw Files:** Find the folder containing the raw files you intend to process. The code is validated with CR2 files, but other raw file formats should work.\n2. **Set Image Directory:** The path to the folder with the raw files should be assigned to the `dir_images_local` argument.\n3. **Set Output Directory:** This is determined by the `dir_output` argument.\n   - LeafMachine2 will generate intermediate files during the analysis. Make sure to assign a directory for them.\n   - If you only need the XMP files, you can delete this directory after the processing is complete.\n   - For debugging purposes, set both component detector `do_save_prediction_overlay_images` arguments to `True` to get useful overlay images.\n4. **Input Image Type:**\n   - **If Raw:** Set `save_XMP_to_original_dir` to `True` to save XMP files in the `dir_images_local` directory. Optionally, save TIFF versions of the cropped images to either `dir_images_local` or `dir_output`, and/or JPG versions to `dir_output`.\n   - **If JPG:** Save JPG versions of the cropped images to `dir_output`.\n5. **Set Orientation:** For raw images only. This is trial and error to get the images oriented correctly.\n6. **Set Pixel Padding:** The default is 150 pixels, which is typically adequate. For lower resolution images, consider reducing this value.\n7. **Adjust Optional Settings:** Set any other optional or remaining arguments as needed.\n8. **Test a Subset:** Run a small subset of images and adjust settings accordingly.\n9. **Import to Lightroom:** Import the combined RAW + XMP files into Lightroom to confirm everything works seamlessly.\n   - If you need to rerun the images with new settings, first delete the old images from Lightroom. This ensures the new XMP settings are applied when you reopen the modified images.\n10. **Editing in Lightroom:** Proceed with your usual editing and exporting process in Lightroom.\n\n### Important Arguments\n\nInput Images are Raw Files\n\n- `save_XMP_to_original_dir: True`: \n   - Saves an XMP sidecar file that contains cropping and orientation information without altering the original raw file.\n   - Cropping and orientation information is added to the XMP file, which is then applied when the image is imported into Adobe Lightroom.\n- `save_TIFF_to_original_dir: False` and `save_TIFF_to_dir_output: False`: \n   - OPTIONAL: Uses `rawpy` to produce cropped tiffs, although the colorspace may change undesirably.\n- `orientation`: Specifies the orientation of the image.\n   - Options are:\n     - \"1\" - Normal\n     - \"2\" - Flipped horizontally\n     - \"3\" - Upside down\n     - \"4\" - Flipped vertically\n     - \"5\" - Rotated 90° CCW and flipped vertically\n     - \"6\" - Rotated 90° CCW\n     - \"7\" - Rotated 90° CW and flipped vertically\n     - \"8\" - Rotated 90° CW\n\nInput Images are JPG Files\n\n- `save_JPG_to_dir_output`: Uses `rawpy` to generate cropped JPGs. The colorspace may undergo undesirable changes.\n\nComponents to Include in Crop\n\n- `include_these_objects_in_specimen_crop`: Defines which components will be used to establish the final crop boundary. Start with all items and remove any that cause the final crop to be too large or include undesired items.\n- choose from archival components:\n    - ruler, barcode, colorcard, label, map, envelope, photo, attached_item, weights\n- and plant components:\n    - leaf_whole, leaf_partial, leaflet, seed_fruit_one, seed_fruit_many, flower_one, flower_many, bud, specimen, roots, wood\n\n### Configuration Settings\n\n- For the complete list of settings and their descriptions, refer to the `SpecimenCrop.yaml` config file.\n\n## Downloading Images from GBIF\n\n### An interactive Streamlit GUI is in the works, stay tuned!\n\n```yaml\nleafmachine:\n    project:\n        # If location is GBIF, set the config in:\n        # LeafMachine2/configs/config_download_from_GBIF_all_images_in_file OR\n        # LeafMachine2/configs/config_download_from_GBIF_all_images_in_filter\n        image_location: 'GBIF' # str |FROM| 'local' or 'GBIF'\n        # all = config_download_from_GBIF_all_images_in_file.yml \n        # filter = config_download_from_GBIF_all_images_in_filter.yml\n        GBIF_mode: 'all'  # str |FROM| 'all' or 'filter'. \n```\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/352729","html_url":"https://ost.ecosyste.ms/projects/352729"}