Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - StandardCyborg/StandardCyborgSDK: A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear · GitHub
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

StandardCyborgSDK

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for face, foot, and ear

Introduction

A native (iOS/macOS) C++ library containing data structures, I/O, and algorithms, as well as a Cocoa framework for iOS and Mac clients to use publicly.

This project generates StandardCyborgFusion.framework

This code was developed by the Standard Cyborg team, primarily in 2018 and the middle of 2019. Standard Cyborg powered applications for custom 3d smart glasses, football helmet fitting, custom medical glasses, shoe sizing, and more. Development was paused on this code when Standard Cyborg began working on horizontal tooling, versus developing specific applications.

License

This codebase is released under the MIT license, with the exception that commercial applications in the field of prosthetics are prohibited until Jan 1, 2023.

See LICENSE file

Installation

  1. Make sure you have installed git lfs before cloning this repo
  2. Run this shell command
$ ./install-dependencies.sh
  1. Open StandardCyborgSDK.xcworkspace in Xcode

Targets

  • StandardCyborgFusion: iOS + macOS framework for 3D scanning and meshing using TrueDepth
  • StandardCyborgFusionTests: unit tests for the above
  • VisualTesterMac: a macOS app for helping develop and test StandardCyborgFusion
  • VisualTesterMac: ditto, but for iOS; also useful for on-device benchmarking
  • TrueDepthFusion: an iOS app for exercising the StandardCyborgFusion framework
  • StandardCyborgAlgorithmsTestbed: an iOS app for testing the SC C++ algorithms and data structures

Development

For debugging via lldb in Xcode, it is recommended to install the LLDB Eigen Data Formatter.

Note on building with bitcode support: https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Deployment

To build StandardCyborgFusion.framework for public release:

  1. Run archive-build-standardcyborgfusion.sh, which will both update the compiled copy in ../StandardCyborgCocoa/StandardCyborgFusion and generate a .zip file for you to upload to the StandardCyborgFusion release in GitHub
  2. Commit the updated StandardCyborgFusion/Info.plist (which now has a new version number)
  3. Merge updated Info.plist commit into main
  4. Tag this commit in the format git tag v1.2.3-StandardCyborgFusion

Deploying StandardCyborgFusion to CocoaPods

  1. Commit the changes with a nice public-facing message and a prefix of StandardCyborgFusion: , e.g. StandardCyborgFusion: Adds SCMesh class
  2. Create a git tag for this commit in the format v1.2.3-StandardCyborgFusion
  3. Push the commit and the tag git push origin main, git push origin v1.2.3-StandardCyborgFusion
  4. Open this repo's releases on GitHub and draft a new release: https://github.com/StandardCyborg/StandardCyborgCocoa/releases/new a) For Tag version, specify the git tag you just created in step 2 a) For Release title, use the commit message from step 1 a) In "Attach binaries by dropping them here or selecting them", drag in the StandardCyborgFusion.framework.zip file that was generated inside StandardCyborgSDK/build. a) Publish release
  5. Push to CocoaPods: pod trunk push StandardCyborgFusion

Registering with CocoaPods

  1. Register: pod trunk register someone@standardcyborg.com 'Your Name' --description='MacBook Pro 13 2019'
  2. Click the link in your email
  3. Get someone who has access to add you. pod trunk add-owner StandardCyborgFusion jeff@standardcyborg.com

Integrating External CocoaPods

How To

Our SCCocoaPods private registry (which is just a github repo) provides the most scalable way for deploying common dependencies.

Using a local podspec

Sometimes you only want to use a dependency for a single project. In this scenario, CocoaPods supports local podspecs— the podspec file is a file locally on disk rather than in a CocoaPods registry (as discussed above). See for example StandardCyborgFusion/PoissonRecon.podspec, which is a local dependency for the StandardCyborgFusionOSX target of the SDK.

We use a mix of local Podspecs and registry-served Podspecs. Local podspecs are best for internal-only usage.

Developing against the SDK locally

You may develop locally against the SDK as CocoaPod. For example, to develop a command line app which uses the SDK via local CocoaPods:

  1. Clone StandardCyborgCocoa as a sibling directory to this repo
  2. cd StandardCyborgSDK
  3. Build the CocoaPod into StandardCyborgCocoa/StandardCyborgFusion by running ./archive-build-standardcyborgfusion.sh
  4. Create a new command line project in Xcode, for example, FusionTest
  5. cd /path/to/FusionTest
  6. pod init
  7. Add to your podfile something like:
    target'FusionTest'doplatform:osx,'11.0'use_frameworks!pod'StandardCyborgFusion',path: '/path/to/your/StandardCyborgCocoa/StandardCyborgFusion'end
  8. pod install
  9. We need to be able to locate the headers, but local CocoaPods don't actually get copied into the Pods directory. You'll need to symlink the local CocoaPod directory into Pods/. For example from your project root, ln -s /path/to/StandardCyborgCocoa/StandardCyborgFusion Pods/StandardCyborgFusion
  10. open FusionTest.xcworkspace
  11. For some unknown reason, Hardened Runtime conflicts with the loading of our dynamic library. Open the FusionTest command line target settings and go to the Signing & Capabilities tab. Click the × next to Hardened Runtime to disable it.
  12. Change the main.m extension to main.mm and add some code like the following:
    #import<iostream>
    #import<StandardCyborgData/StandardCyborgData.hpp>intmain(int argc, constchar * argv[]) {
    StandardCyborg::Vec3 v {1, 2, 3};
    std::cout << "v = " << v << std::endl;
    return0;
    }
  13. Build and run!

About

A C++ SDK for 3D computer vision, paired with Cocoa frameworks for TrueDepth-based 3D scanning, meshing, and ML landmarking models + analysis for foot and ear

Topics

Resources

Stars

70 stars

Watchers

8 watching

Forks

Contributors

Languages