artisan-roaster-scope / artisan

artisan: visual scope for coffee roasters
https://artisan-scope.org
GNU General Public License v3.0
915 stars 252 forks source link

Opctical Character Recognition (OCR) / Seven Segment Display reading through Camera #339

Open DeastinY opened 5 years ago

DeastinY commented 5 years ago

Has this been discussed somewhere?
This would allow to add many roasters in a non-invasive manner that were not originally designed to work with artisan.

tanius commented 5 years ago

That's a really interesting idea! Such a feature exists in the Android app Roasted and Logged. Sadly, that one has not been updated since 2014, but could still be great as a source of inspirations for this feature.

For Artisan, the cameras probably would be webcams, connected with a USB cable. That allows to attach multiple such "sensors" and to fix them in the right positions. Ideally, the seven-segment displays would stay visible to the roaster operator.

Finally, in principle reading analog dial thermometers is also possible this way.

DeastinY commented 5 years ago

Thanks for picking it up! Roasted and Logged sadly seems not to be Open Source :o
I've looked into seven segment reading algorithms and roughly plotted out a way to do it, but it involves quite a bit of homework. Probably nothing I could do as a sidegig. But if anyone was up for it, I'd gladly drop some insights.
In regards to cameras - one could go the way of http://roastlogger.co.uk and decouple the camera input from the program. Roastlogger reads a part of the screen and does OCR on there, so it could be any webcam stream, a recorded video or USB - leaving ultimate freedom to the user

Koumi460 commented 1 year ago

Just randomly came across this thread years later... I'm the developer of Roasted and Logged app. I would have no problem making it open source, but the reason why I have not updated it since 2014 was because I was unhappy with the OCR. It was very primitive and most of the time it didn't work reliably. I tried some other approaches, but never got it to a state where I would be happy with how it works. So I'm afraid my code would be not much help...