My program isn't perfect, but I only spent a couple hours on it. I think it could be improved, and better lightning when taking the photos would help too.
However, I was curious how well it did so I compared it to the author's results. My program misclassifies approximately 80 out of 27,740 Skittles.
I searched for matches and it did indeed find the same match the author found:
(0, './skittles/images/334.jpg', './skittles/images/464.jpg')
(1, './skittles/images/103.jpg', './skittles/images/384.jpg')
(1, './skittles/images/111.jpg', './skittles/images/134.jpg')
(1, './skittles/images/118.jpg', './skittles/images/353.jpg')
(1, './skittles/images/139.jpg', './skittles/images/168.jpg')
(1, './skittles/images/152.jpg', './skittles/images/281.jpg')
(1, './skittles/images/158.jpg', './skittles/images/244.jpg')
(1, './skittles/images/198.jpg', './skittles/images/255.jpg')
(1, './skittles/images/198.jpg', './skittles/images/334.jpg')
(1, './skittles/images/198.jpg', './skittles/images/464.jpg')
(1, './skittles/images/201.jpg', './skittles/images/338.jpg')
...etc
(first row is identical, subsequent rows are one different)Since there are some errors, I did get lucky. However, if it's good enough, you could also manually verify ones that are close.
Anyway, personally I'd rather write code than manually count 27,740 Skittles, but I'm grateful the author did this because it's an interesting dataset to work with.