The inspiration for this project was initially to provide a service for persons whom are visually impaired to be able to sit a book before them, point the device and read the page. It since has evolved into a reader for developing children. However, the prospect of formatting the app for the visually impaired is something that is very much still on the table. I'm very much involved with children and youth so my passion for them led me to gear it towards education. I also have written and illustrated a few children's books that are designed/formatted specifically for the Read Wizard App.
What it does
The app is fairly simple in operation/design, however, there is a bit of complexity going on under the hood. When you aim the device camera at text on a page, the app uses OCR to read the page aloud with a finger press. Not only does it read the text aloud, the user is able to "scrub" through the text that is written out onscreen and select a single word and tap it to be read out again. That part of functionality was a REAL challenge (see below).
How I built it
The process for building this app was a real challenge. I started by separating each essential function of the app and I pretty much developed several stand alone apps that I would later combine to form this powerful Read Wizard app. I created a simple app that turns text into audible speech. I feed it a string via code and it reads that string upon a button press. Simple, right? I then implemented the Tesseract OCR and bridged it with an Objective C header file in order for it to work. I, then, had to begin blindly developing the image recognition phase of the app (see challenges). At next stage, I developed the "text scrubber" portion of the app. This process involved counting the total characters in the string produced, recognizing separate words, counting the length of those words, deciphering which word is currently being uttered by the speech engine and attributing the characters of the word being read. I then had to use the data computed during the initial speech utterance to be able to tap any word in the string/sentence and accurately highlight and read the word that has been tapped.
Challenges I ran into
As I stated previously, this was my first attempt at developing my own app. At this time, I didn't even own an Apple mobile device to test the app with. Of course this became a problem pretty early on because the iOS simulator device does not have camera capabilities (hence the blind coding). I eventually purchased an iPhone for myself and was able to fortify the code that I'd produced to that point. Another challenge that arose was the scrubbing of the text. The mathematical computations alone were enough to present a sick challenge. It was so much room for error because I had to count multiple words in a string that is delivered on the fly. If any count is off by 1, or say by a space, it won't read the word correctly and I'm sure you could guess what that sounded/looked like. I also had to provide the app with a formula to locate the point along the string, as well as the screen, that is being tapped.
Accomplishments that I'm proud of
I am just proud that I was able to overcome the challenges that I was faced with and it being my first attempt at app development and complete the project. Also, I'm proud that I was able to adapt the app so that I can use other talents to write and illustrate books to work along side it. My children are particularly proud of that part.
What I learned
Upon completion, I learned that I could tackle any challenge in coding. Also, I developed a problem solving formula that would allow me to meet those challenges head on.
What's next for Read Wizard
The use of the app for the disabled is one big thing that I would like to explore going forward. That would likely entail using shape recognition so that the device itself would recognize when the camera is positioned correctly to record the best image for results. At this point though, I would just like some confirmation that the app has traction and focus on small ways to improve the user experience.