License Plate Background Color
This software finds the background color of a license plate. It takes as input an image of a license plate (not the whole vehicle). And it is meant to be use in conjuction with Snapshot. The typical usage is as follows
- Do a lookup on a full image using Snapshot.
- Use the result to crop the license plate and save that image.
- Send the cropped image to
plate-color
(see below).
#
Running the Docker Image- Ask us for the SECRET_KEY. Contact us.
- Install Docker if you do not have it.
- Then run the following Docker command to start server.
- Note: pass
--gpus all
to assign all gpus to the Docker container. - In this example the server port is set to
8501
.
- Note: pass
docker run -ti -e KEY=SECRET_KEY -p 8501:8501 platerecognizer/plate-color:latest
#
Plate Color LookupThe server expects a base64 encoded image of the license plate only. In the examples below, we use /path/to/plate.png
.
#
With cURLcurl -d "{\"instances\": [{ \"b64\":\"$(base64 -w0 /path/to/plate.png)\"}]}" \ http://localhost:8501/v1/models/classifier:predict
#
With Pythonimport requestsimport base64with open(r'/path/to/plate.png', 'rb') as fp: jpeg_bytes = base64.b64encode(fp.read()).decode('utf-8') predict_request = '{"instances" : [{"b64": "%s"}]}' % jpeg_bytes
response = requests.post( 'http://localhost:8501/v1/models/classifier:predict', data=predict_request) response.raise_for_status()print(response.json())
#
ResultThe output is the top 3 predictions for the background color. In this case, the most likely color is white with a score of .69 or 69%.
{ "predictions": [ { "color": ["white", "blue", "black"], "score": [0.69595, 0.0702599958, 0.06328] } ]}
#
End-to-end Exampleimport base64import io
import requestsfrom PIL import Image
image_path = "car.jpg"token = 'xxx'with open(image_path, 'rb') as fp: response = requests.post( 'https://api.platerecognizer.com/v1/plate-reader/', files=dict(upload=fp), headers={'Authorization': f'Token {token}'}, )image = Image.open(image_path)for plate in response.json()['results']: xmin = plate['box']['xmin'] ymin = plate['box']['ymin'] xmax = plate['box']['xmax'] ymax = plate['box']['ymax'] im_bytes = io.BytesIO() image.crop((xmin, ymin, xmax, ymax)).save(im_bytes, 'JPEG', quality=95) im_bytes.seek(0) b64_data = base64.b64encode(im_bytes.read()).decode('utf-8') predict_request = '{"instances" : [{"b64": "%s"}]}' % b64_data response = requests.post( 'http://localhost:8501/v1/models/classifier:predict', data=predict_request ) print(response.json())