{"id":30768036,"url":"https://github.com/diyer22/calibrating","last_synced_at":"2025-09-04T20:20:46.250Z","repository":{"id":41458839,"uuid":"398826359","full_name":"DIYer22/calibrating","owner":"DIYer22","description":"Calibrate camera's intrinsic/extristric, and build stereo depth camera with OpenCV python.","archived":false,"fork":false,"pushed_at":"2024-01-04T13:30:27.000Z","size":567,"stargazers_count":32,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-08-08T03:09:39.979Z","etag":null,"topics":["calibration","camera-calibration","stereo","stereo-calibration"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DIYer22.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-08-22T14:56:56.000Z","updated_at":"2024-07-22T08:46:57.000Z","dependencies_parsed_at":"2024-01-04T14:39:23.850Z","dependency_job_id":"bfc83f4e-bdee-43c7-86dc-dbf3e9c8a090","html_url":"https://github.com/DIYer22/calibrating","commit_stats":{"total_commits":153,"total_committers":3,"mean_commits":51.0,"dds":"0.039215686274509776","last_synced_commit":"421e1b4a56fdf6d94686012961e19894c75d6188"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DIYer22/calibrating","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIYer22%2Fcalibrating","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIYer22%2Fcalibrating/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIYer22%2Fcalibrating/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIYer22%2Fcalibrating/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DIYer22","download_url":"https://codeload.github.com/DIYer22/calibrating/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIYer22%2Fcalibrating/sbom","scorecard":{"id":35374,"data":{"date":"2025-08-11","repo":{"name":"github.com/DIYer22/calibrating","commit":"421e1b4a56fdf6d94686012961e19894c75d6188"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-cxjf-x6jp-p7mc","Warn: Project is vulnerable to: PYSEC-2023-181","Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: PYSEC-2018-49 / GHSA-rprw-h62v-c2w7","Warn: Project is vulnerable to: PYSEC-2017-74"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T20:10:55.162Z","repository_id":41458839,"created_at":"2025-08-14T20:10:55.162Z","updated_at":"2025-08-14T20:10:55.162Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273667092,"owners_count":25146514,"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-09-04T02:00:08.968Z","response_time":61,"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":["calibration","camera-calibration","stereo","stereo-calibration"],"created_at":"2025-09-04T20:20:42.154Z","updated_at":"2025-09-04T20:20:46.236Z","avatar_url":"https://github.com/DIYer22.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `calibrating`: A Python Library for Camera Calibration\nCalibrate camera's intrinsic/extristric, and build stereo depth camera with OpenCV python.\n\n[![stereo-checkboard](https://user-images.githubusercontent.com/10448025/131808105-a325961e-5fbb-4475-adcd-ba0e2c53e268.png)](https://yl-data.github.io/2108.calibrating-vis/stereo/index.html)\n\u003c!-- ![stereo](https://user-images.githubusercontent.com/10448025/131805868-e73cd022-d79b-400c-b057-c26915f92c7c.jpg) --\u003e\n![depth](https://user-images.githubusercontent.com/10448025/187621537-b18bc53b-fba2-4269-adb5-a97e4c3da923.jpg)\n\n## ▮ Features\n- High-level API that simplifies calibration steps\n- Object-oriented Pythonic code style\n- Rich visualization to verify the calibration effect. e.g. [stereo-rectify-vis](https://yl-data.github.io/2108.calibrating-vis/stereo/index.html), [reproject-depth-vis](https://yl-data.github.io/2108.calibrating-vis/project-depth/index.html)\n- Very easy to install and run the example with [example images](https://github.com/yl-data/calibrating_example_data)\n- Mature [stereo module](calibrating/stereo_camera.py) for correctly converting disparity to depth map that aligned with the left camera\n- Provide camera internal and external parameters standard, which can be exported as `.yaml`\n- Decoupling the feature extraction and calibration process, support both checkboard and markers(`cv2.aruco`)\n- Support [occluded markers](example/test_occlude_marker.py) like [ArUco](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) and [ChArUco](https://docs.opencv.org/4.6.0/df/d4a/tutorial_charuco_detection.html), and multiple calibration boards in one image\n- Draw various calibration board images\n- Automatically ignore non-compliant images or markers\n- Convert to NeRF format json for 3D reconstruction\n- LiDAR-camera extrinsic calibration without chessboard, see [lidar2cam_by_PnP example](example/calibrate_lidar2cam_by_PnP)\n\n## ▮ Install\n```bash\npip3 install calibrating\n```\n## ▮ Run Example\n[Example images](https://github.com/yl-data/calibrating_example_data) are captured by paired_stereo_and_depth_cams:   \n[![paired_stereo_and_depth_cams_1](https://user-images.githubusercontent.com/10448025/131831496-7a38c677-a578-4a4e-a01e-aa102dad9dbc.jpg)](https://github.com/yl-data/calibrating_example_data/raw/master/paired_stereo_and_depth_cams.jpg?raw=true)\n\n```bash\npip3 install calibrating\n# Prepare example data(100MB): checkboard images of paired stereo and depth cameras\ngit clone https://github.com/yl-data/calibrating_example_data\n\n# Prepare example code\ngit clone https://github.com/DIYer22/calibrating\n\n# Run checkboard example \npython3 calibrating/example/checkboard_example.py\n```\nFinally, your browser will open [stereo-rectify-vis](https://yl-data.github.io/2108.calibrating-vis/stereo/index.html), [reproject-depth-vis](https://yl-data.github.io/2108.calibrating-vis/project-depth/index.html)\n\n\nDetailed example code with comments: [example/checkboard_example.py](example/checkboard_example.py)   \nOr Chinese Version: [example/checkboard_example_cn.py (中文注释)](example/checkboard_example_cn.py)\n\n## ▮ Stereo\n\n**Run [stereo example](calibrating/stereo_camera.py):**\n```bash\npython3 calibrating/calibrating/stereo_camera.py\n```\nAfter a while, your browser will open:\n- [stereo-rectify-vis](https://yl-data.github.io/2108.calibrating-vis/stereo/index.html)\n- [StereoSGBM-depth-vis](https://yl-data.github.io/2108.calibrating-vis/stereo_sgbm_vis/): Which shows `undistort_img1`, `unrectify_depth`. The example disparity is computed by `cv2.StereoSGBM`.\n\n**Another stereo depth example:**\n```\npython3 calibrating/example/test_depth_accuracy.py\n```\nyour browser will pop up a visual web page like this  \n![depth](https://user-images.githubusercontent.com/10448025/187621537-b18bc53b-fba2-4269-adb5-a97e4c3da923.jpg)\n\n\n**[Mermaid](https://mermaid.live/) flowchart of `calbrating.Stereo.get_depth(img1, img2)`**\n```mermaid\nflowchart \n    subgraph \"Stereo.get_depth(img1, img2)\"\n        input(Input:　\\nimg1\\nimg2)--\u003e undistort\n        undistort--\u003erectify\n        undistort --\u003e stereo_re\n        subgraph StereoMatching\n        end\n        rectify --\u003e StereoMatching\n        StereoMatching --disparity--\u003e disp_to_depth\n        disp_to_depth --depth--\u003e unrectify\n        unrectify --\u003e stereo_re(\"Output:　　　　\\n undistort_img1 \\n unrectify_depth\")\n    end\n```\n## ▮ 3D reconstruction\nConvert to NeRF format json for 3D reconstruction.  \nUsage:\n```python\n# Convert Cam object's intrinsic/extristric to NeRF fromat json\n# Note: \n#   - When collecting images for reconstruction\n#   - should fix the calibration board and object, and move the camera\ncam.convert_to_nerf_json(\"transforms.json\")\n```\n\nExample of converting [ChArUco images](https://github.com/yl-data/calibrating_example_data/tree/master/reconstruction_with_marker_board) to NeRF's transforms.json:\n```bash\npython calibrating/reconstruction_with_board.py \n```\n\n\u003cimg alt=\"image\" src=\"https://user-images.githubusercontent.com/10448025/192988171-40d51b15-e761-4fe6-9df4-0e2b509a79ec.png\" width=\"400\"\u003e \u003cimg alt=\"instant ngp\" src=\"https://user-images.githubusercontent.com/10448025/192993202-84ccab21-1f9d-4b3c-8dc7-090c121bb84e.jpg\" width=\"400\"\u003e     \n*Reconstruction effect of [instat-ngp](https://github.com/NVlabs/instant-ngp) using ChArUco boards*\n\n\n## ▮ Multiple Boards\nMultiple calibration boards in one image, run [example code](calibrating/multi_boards.py):\n```bash\npython calibrating/multi_boards.py\n```\n\n\u003cimg alt=\"14~DICT_4X4_1000_start0\" src=\"https://user-images.githubusercontent.com/10448025/192990507-4d3ba606-e480-428b-a021-5b439a1c7781.jpg\" width=\"400\"\u003e     \n\n*visualization example of multiple boards*\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiyer22%2Fcalibrating","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiyer22%2Fcalibrating","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiyer22%2Fcalibrating/lists"}