1
0

Add low precision color detection (#17)

* Add low precision color detection

* Add blank line at end of file

* Remove tab

* Remove tab

* Remove useless comment

Co-authored-by: Erick <74315338+erickahmed@users.noreply.github.com>

* Update vision-env/src/vision-test.py

Co-authored-by: Erick <74315338+erickahmed@users.noreply.github.com>

* Update vision-env/src/vision-test.py

Co-authored-by: Erick <74315338+erickahmed@users.noreply.github.com>

* Update vision-env/src/vision-test.py

Co-authored-by: Erick <74315338+erickahmed@users.noreply.github.com>

Co-authored-by: Erick <74315338+erickahmed@users.noreply.github.com>
This commit is contained in:
Davide Tonelli
2022-08-10 13:51:09 +02:00
committed by GitHub
parent 6aeca8fbe9
commit 7785053766
2 changed files with 111 additions and 6 deletions
+69
View File
@@ -0,0 +1,69 @@
from scipy.spatial import KDTree
from webcolors import (
hex_to_rgb,
)
COLORS = {
"aqua": ["#00ffff", (0,255,255)],
"black": ["#000000", (0,0,0)],
"blue": ["#0000ff", (0,0,255)],
"fuchsia": ["#ff00ff", (255,0,255)],
"green": ["#008000", (0,128,0)],
"gray": ["#808080", (128,128,128)],
"lime": ["#00ff00", (0,255,0)],
"olive": ["#808000", (128,128,0)],
"purple": ["#800080", (128,0,128)],
"red": ["#ff0000", (255,0,0)],
"silver": ["#c0c0c0", (192,192,192)],
"teal": ["#008080", (0,128,128)],
"white": ["#ffffff", (255,255,255)],
"yellow": ["#ffff00", (255,255,0)],
"beige": ["#f5f5dc", (245,245,220)],
"brown": ["#a52a2a", (165,42,42)],
"gold": ["#ffd700", (255,215,0)],
"pink": ["#ffc0cb", (255,192,203)],
"lavender": ["#e6e6fa", (230,230,250)],
"turquoise": ["#40e0d0", (64,224,208)],
"violet": ["#ee82ee", (238,130,238)],
"orange": ["#ffa500", (255,165,0)],
"lightblue": ["#add8e6", (173,216,230)]
}
COLORS_HEX = {
"aqua": "#00ffff",
"black": "#000000",
"blue": "#0000ff",
"fuchsia": "#ff00ff",
"green": "#008000",
"gray": "#808080",
"lime": "#00ff00",
"olive": "#808000",
"purple": "#800080",
"red": "#ff0000",
"silver": "#c0c0c0",
"teal": "#008080",
"white": "#ffffff",
"yellow": "#ffff00",
"beige": "#f5f5dc",
"brown": "#a52a2a",
"gold": "#ffd700",
"pink": "#ffc0cb",
"lavender": "#e6e6fa",
"turquoise": "#40e0d0",
"violet": "#ee82ee",
"orange": "#ffa500",
"lightblue": "#add8e6",
}
def convert_rgb_to_names(rgb_tuple):
# A dictionary of all the color names and their respective hex in color_db
color_db = COLORS_HEX
names = []
rgb_values = []
for color_name, color_hex in color_db.items():
names.append(color_name)
rgb_values.append(hex_to_rgb(color_hex))
kdt_db = KDTree(rgb_values)
distance, index = kdt_db.query(rgb_tuple)
return str(names[index])
+42 -6
View File
@@ -1,16 +1,22 @@
from genericpath import isfile
import io
import os
import sys
import numpy as np
import cv2
import math
import colors_detection
import json
from genericpath import isfile
from pyautogui import size
from google.cloud import vision
# Minimum score required for labels detection
MIN_SCORE_REQUIRED = 0.80
# Minimum pixel_fraction required for color detection.
# Actually unused but useful for filtering colors.
MIN_PFRACTION_REQUIRED = 0.02
def shape_selection(event, x, y, flags, param):
# grab references to the global variables
global ref_point, crop
@@ -138,15 +144,45 @@ client = vision.ImageAnnotatorClient()
image = vision.Image(content=content)
# Performs label detection on the image file
response = client.label_detection(image=image)
labels = response.label_annotations
label_response = client.label_detection(image=image)
labels = label_response.label_annotations
# Performs image_properties detection on the image file
colors_response = client.image_properties(image=image)
colors = colors_response.image_properties_annotation.dominant_colors.colors
# Labels sorted by attribute score
sorted_labels = sorted(labels, key=lambda x:x.score, reverse=True)
# Labels filtered by attribute score
filtered_labels = filter(lambda x:x.score > MIN_SCORE_REQUIRED, sorted_labels)
print('Labels:')
# Labels sorted by attribute score
sorted_colors = sorted(colors, key=lambda x:x.pixel_fraction, reverse=True)
# Colors filtered by attribute pixel_fraction
#filtered_colors = filter(lambda x:x.pixel_fraction > MIN_PFRACTION_REQUIRED, sorted_colors)
# Actually no filtering policy
filtered_colors = sorted_colors
print('\nLabels:')
for label in filtered_labels:
print(label.description + ' ---> ' + str(label.score))
print('--- Label: ' + label.description + ' ---> ' + str(math.trunc(label.score*100)) + '%' +
'\n')
print('\nColors:')
for color_info in filtered_colors:
color = color_info.color
red = math.trunc(color.red)
green = math.trunc(color.green)
blue = math.trunc(color.blue)
rgb_triplet = (red, green, blue)
rgb_triplet_str = (str(red) + '%, ', str(green) + '%, ', str(blue) + '%')
color_name = colors_detection.convert_rgb_to_names(rgb_triplet)
# uncomment for verbose output
#print(str(color_info.pixel_fraction) + ' == ' + str(math.trunc(color_info.pixel_fraction*100)) + '%' + ' score: ' + str(color_info.score) + '---> ' + color_name)
print('--- Pixel Fraction: ' + str(round(color_info.pixel_fraction*100, 3)) + '%' +
'\tScore: ' + str(round(color_info.score, 5)) +
'\tColor Name: ' + color_name +
'\n')