node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org »

puddlenuts

puddlenuts

CLI to help create custom classifiers for visual recognition systems

Requirements

Usage

Show help:

$ puddlenuts --help

You should define a PUDDLENUTS_API_KEY env var corresponding to your Visual Recognition API key.

You can also place this in an .env file in your current working directory.

Any option can be specified in the .env file using the mask PUDDLENUTS_SCREAMING_SNAKE_CASE; e.g. PUDDLENUTS_LOGLEVEL=error

Installation

It can be invoked via npx:

$ npx puddlenuts --help

Or installed "permanently":

$ npm install -g puddlenuts

Sub-Commands

shoot

Take a bunch of photos with the camera, put them into .zip files corresponding to classes, and upload them into a classifier for training. See puddlenuts shoot --help for details.

train

Upload .zip file(s) to a new or existing classifier for training or retraining. See puddlenuts train --help for details.

classify

Take a photo with the camera or use an on-disk image to classify against a previously-trained classifier. See puddlenuts classify --help for details.

Development

  • Yes, this needs tests.
  • @types/* packages included in this project's devDependencies are for IDE type inference; this is not a TypeScript project.
  • The command definitions live in lib/commands/ and are loaded by yargs, with the exception of lib/commands/common-opts.js. See the advanced Yargs usage guide for more info.
  • ES6 modules provided by the magic of @std/esm.

Style

  • The FP variant of Lodash is used exclusively. This is enforced by ESLint.

  • Avoid the function keyword; use arrow functions. Not enforced (yet)

  • Plain objects containing functions shouldn't use the "method" shorthand, but probably do; e.g.:

    const foo = {
      bar() {
        // stuff
      }
    };

    Avoid. Instead:

    const foo = {
      bar: () => {
        // stuff
      }
    };

    Not enforced (yet)

  • Use async / await in lieu of Promise chains.

  • Add JSdoc docstrings. As of this writing, these are mostly missing

  • Use ternary operators wherever possible, but do not nest them.

  • Favor template strings over string concatenation

  • Use currying where it makes sense

  • Leverage util.promisify() or promwrap instead of Node.js-style callbacks

  • Code will be formatted automatically upon commit via prettier

Roadmap

  • Make non-RPi-specific
  • Support alternative APIs

Notes & Meanderings

  • "Puddlenuts" is a made-up word from Roald Dahl's The BFG. In the book, it seems to mean "inconsequential". I'm using it here because I like the word.

License

Copyright 2017 Christopher Hiller. Licensed Apache-2.0