puddlenuts v0.2.6
puddlenuts
CLI to help create custom classifiers for visual recognition systems
Requirements
- Node 8.x, npm v5.x
- Raspberry Pi w/ camera &
raspistillinstalled - Watson Visual Recognition Service API key
Usage
Show help:
$ puddlenuts --helpYou 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
.envfile using the maskPUDDLENUTS_SCREAMING_SNAKE_CASE; e.g.PUDDLENUTS_LOGLEVEL=error
Installation
It can be invoked via npx:
$ npx puddlenuts --helpOr installed "permanently":
$ npm install -g puddlenutsSub-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'sdevDependenciesare 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 oflib/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
functionkeyword; 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/awaitin lieu ofPromisechains.- 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