Skip to content

Create a Node-RED node able to interact with Plant.id #3

@vongomben

Description

@vongomben

the call is based on this Documentation

`
"""
The purpose of this code is to show how to work with plant.id API.
You'll find API documentation at https://plantid.docs.apiary.io and https://plant.id/api
"""

import base64
import requests
from time import sleep

secret_access_key = '-- ask for one at business@plant.id --'

def send_for_identificattion(file_names):
files_encoded = []
for file_name in file_names:
with open(file_name, 'rb') as file:
files_encoded.append(base64.b64encode(file.read()).decode('ascii'))

params = {
	'latitude': 49.194161,
	'longitude': 16.603017,
	'week': 23,
	'images': files_encoded,
	'key': secret_access_key,
	'parameters': ["crops_fast"]
}
# see the docs for more optinal atrributes; for example 'custom_id' allows you to work
# with your own identifiers
headers = {
	'Content-Type': 'application/json'
}

response = requests.post('https://plant.id/api/identify', json=params, headers=headers)

if response.status_code != 200:
    raise("send_for_identificattion error: {}".format(response.text))

# this reference allows you to gather the identification result (once its ready)
return response.json().get('id')

def get_suggestions(request_id):
params = {
"key": secret_access_key,
"ids": [request_id]
}
headers = {
'Content-Type': 'application/json'
}

# To keep it simple, we are pooling the API waiting for the server to finish the identification.
# The better way would be to utilise "callback_url" parameter in /identify call to tell the our server 
# to call your's server enpoint once the identificatin is done.
while True:
	print("Waiting for suggestions...")
	sleep(5)
	resp = requests.post('https://plant.id/api/check_identifications', json=params, headers=headers).json()
	if resp[0]["suggestions"]:
		return resp[0]["suggestions"]

more photos of the same plant increases the accuracy

request_id = send_for_identificattion(['photo1.jpg','photo2.jpg'])

just listing the suggested plant names here (without the certainty values)

for suggestion in get_suggestions(request_id):
print(suggestion["plant"]["name"])
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions