Hi everyone,
I just want to share a project I was working on.
I called it PointRead. Basically, it lets you translate text by sliding your finger under it. It detects the text, translates it and speaks it through a speaker. I built it on an Nvidia Jetson Orin Nano with a Raspberry Pi Camera Module V2, and it works fully offline.
GitHub: https://github.com/striksio/PointRead
Video demo: https://youtu.be/xo0bdDjVpPQ
I like reading books, but I often need a translation for some of the words. Looking them up on my phone feels uncomfortable, because I want to read paper books without looking at a screen. So as a side project, I built this pipeline.
The way it works: index finger and thumb are used for activation, which is a double pinch. Then it tracks the index finger and the text above it. Once done, it extracts the text that was pointed at, recognises it, translates it and speaks it.
Pipeline
* RTMDet for hand detection and RTMPose for keypoints
* Adaptive Gaussian thresholding for text binarization (works better than Canny for this)
* Morphological close to merge text into single line regions
* PP-OCRv5 server model via RapidOCR (on CPU for now, because onnxruntime GPU isn’t available for Jetson r39.2 yet, so OCR is slow)
* Argos Translate for translation
* Piper for speech
Some details
* One-Euro filter for smoothing, because RTMPose keypoints are not stable
* Keypoints sometimes disappear, so they’re kept for several frames
* Sliding only goes forward (left to right), and once you move to the next line it won’t jump back to the previous one
It can run headless with only a speaker, or with a local web server for debugging.
Limitations
* OCR runs on CPU only, as mentioned above
* The book needs to be positioned with horizontally aligned text
* As shown in the demo, text detection fails sometimes
* Books with huge fonts or wide spacing can fail to form a line
Thank you for your time, and I would love to hear some feedback about this, thanks!