{"id":24668802,"url":"https://github.com/gregspangenberg/shoulder","last_synced_at":"2025-10-08T05:31:57.616Z","repository":{"id":43281797,"uuid":"511201836","full_name":"gregspangenberg/shoulder","owner":"gregspangenberg","description":"Landmark detection and humeral implant positioning with lightweight machine learning models.","archived":false,"fork":false,"pushed_at":"2025-05-09T18:17:50.000Z","size":118657,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-23T04:01:21.958Z","etag":null,"topics":["anatomy","arthroplasty","computer-vision","glenoid","humerus","implant","machine-learning","python","random-forest-classifier","shoulder","surgery","unet-segmentation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gregspangenberg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2022-07-06T15:54:52.000Z","updated_at":"2025-08-05T23:43:46.000Z","dependencies_parsed_at":"2025-05-09T19:36:42.359Z","dependency_job_id":null,"html_url":"https://github.com/gregspangenberg/shoulder","commit_stats":{"total_commits":62,"total_committers":2,"mean_commits":31.0,"dds":0.4032258064516129,"last_synced_commit":"0f8466f1afeb14c86b47aaac7da507b11ae75b4e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gregspangenberg/shoulder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregspangenberg%2Fshoulder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregspangenberg%2Fshoulder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregspangenberg%2Fshoulder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregspangenberg%2Fshoulder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gregspangenberg","download_url":"https://codeload.github.com/gregspangenberg/shoulder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gregspangenberg%2Fshoulder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278892181,"owners_count":26063943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"}},"keywords":["anatomy","arthroplasty","computer-vision","glenoid","humerus","implant","machine-learning","python","random-forest-classifier","shoulder","surgery","unet-segmentation"],"created_at":"2025-01-26T09:17:31.784Z","updated_at":"2025-10-08T05:31:52.607Z","avatar_url":"https://github.com/gregspangenberg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# *shoulder*\r\n\r\n[![PyPI Latest Release](https://img.shields.io/pypi/v/shoulder.svg)](https://pypi.org/project/shoulder/)\r\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\r\n\r\nThis package uses a collection of machine learning models to detect anatomic landmarks on 3d models of shoulder bones and also generates patient specific coordinate systems. An stl of the shoulder bone of interest is all that is needed to get started. Currently only implemented for the humerus,  with expansion to the scapula in the future. Landmarks that *shoulder* can currently identify on the humerus are:\r\n\r\n- canal \r\n- transepicondylar axis\r\n- bicipital groove\r\n- anatomic neck \r\n\r\n\r\n## Installation\r\ncompatible with python 3.10 and 3.11\r\n```\r\npip install shoulder\r\n```\r\n\r\n## Example\r\nStart by using the example bone stl's located in \"tests/test_bones\"\r\n\r\n    # pass stl into Humerus\r\n    hum = shoulder.Humerus(\"tests/test_bones/humerus_left.stl\")\r\n\r\n    # apply coordinate sysytem\r\n    hum.apply_csys_canal_transepiconylar()\r\n    \r\n    # calculate landmarks\r\n    hum.canal.axis()\r\n    hum.trans_epiconylar.axis()\r\n    hum.anatomic_neck.points()\r\n    hum.bicipital_groove.axis()\r\n\r\n    # calculate metrics\r\n    hum.radius_curvature()\r\n    hum.neckshaft()\r\n    hum.retroversion()\r\n\r\n    # construct plot from above humeral bone with landmarks and coordinate system\r\n    plot = shoulder.Plot(hum)\r\n    plot.figure.show()\r\n\r\nThe output of the plot will appear as shown below with landmarks included and transformed from the original CT coordinate system to a coordainte system defined by the canal and transepicondylar axis.\r\n\r\n![Plot of Example code above](https://raw.githubusercontent.com/gregspangenberg/shoulder/main/images/plot.png)\r\n\r\n\r\n## Contributing \r\nClone the repo, open the cloned folder containing the poetry.lock file, then install the development dependencies using poetry. \r\n```\r\npoetry install --with dev\r\n```\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgregspangenberg%2Fshoulder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgregspangenberg%2Fshoulder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgregspangenberg%2Fshoulder/lists"}