Go REST API to receive input from the JibJib Android App, query the model and send those information back to the App.
The complete list of JibJib repos is:
- jibjib: Our Android app. Records sounds and looks fantastic.
- deploy: Instructions to deploy the JibJib stack.
- jibjib-model: Code for training the machine learning model for bird classification
- jibjib-api: Main API to receive database requests & audio files.
- jibjib-data: A MongoDB instance holding information about detectable birds.
- jibjib-query: A thin Python Flask API that handles communication with the TensorFlow Serving instance.
- gopeana: A API client for Europeana, written in Go.
- voice-grabber: A collection of scripts to construct the dataset required for model training
See deploy instructions.
If you didn't clone the repo, go get
the package and the main.go
:
go get github.com/gojibjib/jibjib-api/pkg
cd $GOPATH/src/github.com/gojibjib/jibjib-api
wget https://raw.githubusercontent.com/gojibjib/jibjib-api/master/meta/main.go
Compile it:
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
Setup jibjib-data.
Start the API:
export JIBJIB_DB_URL=read:read@localhost/birds
./app
Endpoint | Method | Comment |
---|---|---|
/ |
GET | Answers with a basic "Pong" response |
/ping |
GET | Answers with a basic "Pong" response |
/birds/dummy |
GET | Sends a JSON Response with randomized IDs and accuracies for testing |
/birds/all |
GET | Retrieves all bird information, without descriptions |
/birds/{id:[0-9]+} |
GET | Retrieves bird information by ID. Use query string desc_de=false and desc_en=false to omit description fields. |
/detect/binary |
POST | Send a MP4 file to the API to start querying the ML model for bird voice recognition. File needs to be send in binary format and with the Header Content-Type: application/octet-stream set. |
{
"status": <int>,
"message": <string>,
"count": <int>,
"data": {...} | null
}
curl "http://localhost:8080/ping"
{
"status":200,
"message":"Pong",
"count":0,
"data":null
}
curl "htttp://localhost:8080/birds/1"
{
"status":200,
"message":"Bird found",
"count":1,
"data": {
"id":1,
"name":"Cuculus canorus",
"genus":"Cuculus",
"species":"canorus",
"title_de":"Kuckuck",
"title_en":"Common cuckoo",
"desc_de":"...omitted...",
"desc_en":"...omitted..."
}
}
curl "htttp://localhost:8080/birds/1?desc_de=false&desc_en=false"
{
"status":200,
"message":"Bird found",
"count":1,
"data": {
"id":1,
"name":"Cuculus canorus",
"genus":"Cuculus",
"species":"canorus",
"title_de":"Kuckuck",
"title_en":"Common cuckoo",
"desc_de":"",
"desc_en":""
}
}
# For now, only mp4 files are being accepted
curl -H 'Content-Type: application/octet-stream' -X POST --data-binary @larus_canus_3.mp4 http://localhost:8081/detect/binary
{
"message": "Detection successful",
"status": 200,
"count": 3,
"data": [
{
"accuracy": 0.6470588235294118,
"id": 110
},
{
"accuracy": 0.17647058823529413,
"id": 7
},
{
"accuracy": 0.17647058823529413,
"id": 30
}
]
}