This package provides a command line interface to AnyMotion, which is a motion analysis API using pose estimation. It uses the AnyMotion Python SDK.
It works on Python 3.6.1 or higher.
Install using pip:
$ pip install anymotion-cli
Alternatively, you can use homebrew to install:
$ brew install nttpc/tap/anymotion-cli
Before using anymotion-cli, you need to tell it about your credentials which issued by the AnyMotion Portal. You can do this in several ways:
- CLI command
- Credentials file
- Environment variables
The quickest way to get started is to run the amcli configure
command:
$ amcli configure
AnyMotion Client ID: your_client_id
AnyMotion Client Secret: your_client_secret
To use environment variables, do the following:
export ANYMOTION_CLIENT_ID=<your_client_id>
export ANYMOTION_CLIENT_SECRET=<your_client_secret>
To use the credentials file, create an INI formatted file like this:
[default]
anymotion_client_id=<your_client_id>
anymotion_client_secret=<your_client_secret>
and place it in ~/.anymotion/credentials
.
Note: If set in both the credentials file and environment variables, the environment variables takes precedence.
You can use amcli
.
amcli [OPTIONS] COMMAND [ARGS]...
See the table below for more information, or run it with the --help
option.
command name | description |
---|---|
upload | Upload the local movie or image file to the cloud storage. |
download | Download the drawn file. |
extract | Extract keypoints from image or movie. |
analyze | Analyze the extracted keypoint data. |
compare | Compare the two extracted keypoint data |
draw | Draw based on the extracted keypoints or comparison results. |
The command name is represented by a verb.
command name | description |
---|---|
image | Show the information of the uploaded images. |
movie | Show the information of the uploaded movies. |
keypoint | Show the extracted keypoints. |
analysis | Show the analysis results. |
comparison | Show the comparison results. |
drawing | Show the information of the drawn images or movies. |
The command name is represented by a noun.
command name | description |
---|---|
configure | Configure your AnyMotion Credentials. |
interactive | Start interactive mode. |
First, upload the image file.
$ amcli upload image.jpg
Success: Uploaded image.jpg to the cloud storage. (image id: 111)
When the upload is complete, you will get an image id
.
Extract keypoints using this image id
.
$ amcli extract --image-id 111
Keypoint extraction started. (keypoint id: 222)
Success: Keypoint extraction is complete.
Draw points/lines to image using keypoint id
.
$ amcli draw --keypoint-id 222
Drawing is started. (drawing id: 333)
Success: Drawing is complete.
Downloaded the file to image.jpg.
When the drawing is complete, the drawing file is downloaded (by default, to the current directory).
To save to a specific file or directory, use the --out
option.
As shown below, you can also use --path
option and --with-drawing
in extract
command to upload, extract keypoints, drawing at the same time.
$ amcli extract --path image.jpg --with-drawing
Success: Uploaded image.jpg to the cloud storage. (image id: 111)
Keypoint extraction started. (keypoint id: 222)
Success: Keypoint extraction is complete.
Drawing started. (drawing id: 333)
Success: Drawing is complete.
Downloaded the file to image.jpg.
You can use the rules to draw a variety of things. In the following example, draw the lines of stick picture in red.
$ amcli draw --keypoint-id 222 --rule '{"drawingType": "stickPicture", "pattern": "all", "color": "red"}'
In the following other example, draw only the skeleton.
$ amcli draw --keypoint-id 222 --bg-rule '{"skeletonOnly": true}'
You can also specify it in the JSON file.
$ amcli draw --keypoint-id 222 --rule-file rule.json
{
"drawingType": "stickPicture",
"pattern": "all",
"color": "red"
}
You can also write rule
and backgroundRule
at the same time when using --rule-file
.
{
"rule": {
"drawingType": "stickPicture",
"pattern": "all",
"color": "red"
},
"backgroundRule": {
"skeletonOnly": true
}
}
For more information on the drawing rules, see the documentation.
You can use the keypoint show
command to display the extracted keypoint data.
$ amcli keypoint show 1234
{
"id": 1234,
"image": null,
"movie": 123,
"keypoint": [
{
"leftKnee": [
487,
730
],
...
The --only
option allows you to display only the keypoint data.
$ amcli keypoint show 1234 --only
[
{
"leftKnee": [
487,
730
],
"rightKnee": [
1118,
703
]
...
With jq, it's also easy to take out only certain parts of the body.
$ amcli keypoint show 1234 --only | jq '[.[].leftKnee]'
[
[
487,
730
],
null,
null,
...
The --join
option also allows you to display related data.
$ amcli keypoint show 1234 --join
{
"id": 1234,
"image": null,
"movie": {
"id": 123,
"name": "movie",
"text": "Created by anymotion-cli.",
...
"keypoint": [
{
"leftKnee": [
487,
730
],
...
You can use interactive mode using interactive
command.
$ amcli interactive
The anymotion-cli supports Shell completion.
For Bash, add this to ~/.bashrc
:
eval "$(_AMCLI_COMPLETE=source amcli)"
For Zsh, add this to ~/.zshrc
:
eval "$(_AMCLI_COMPLETE=source_zsh amcli)"
For Fish, add this to ~/.config/fish/completions/amcli.fish
:
eval (env _AMCLI_COMPLETE=source_fish amcli)
See CHANGELOG.md.
-
Code must work on Python 3.6 and higher.
-
Code should follow black.
-
Docstring should follow Google Style.
-
Install all development dependencies using:
$ poetry install
-
You can install a pre-commit hook to check:
$ poetry run pre-commit install
-
Before submitting pull requests, run tests with:
$ poetry run tox