This week we welcome Joseph Howse (@CatsAndMonkeys) as our PyDev of the Week. Joseph is the author (or co-author) of several books on OpenCV:
- OpenCV for Secret Agents
- OpenCV 3 Blueprints
- iOS Application Development with OpenCV 3
- Android Application Programming with OpenCV 3
- Learning OpenCV 3 Computer Vision with Python
- Python Game Programming by Example
Can you tell us a little about yourself (hobbies, education, etc):
I live in a fishing village called Terence Bay and I also have a home office in the nearby city of Halifax, Nova Scotia, Canada. With my mother Jan and my father Bob, I run a consulting company called Nummist Media Corporation Limited, specializing in computer vision. We have four cats named Sanibel, Lambda, Josephine or “Little Jo”, and Eiffel.
Readers of my computer vision books will know the first three of these cats. They’ll also know Plasma, a virtuous leader of cats, who sadly succumbed to lymphoma this past August. Eiffel is our new arrival. They are all great cats who are really dedicated to their experimental work in computer vision and to their cat-centric religion called Nummism.
I love photography and writing. I collect cameras and lenses. This set of interests has had a big influence on my life, including my specialization in computer vision.
I took a Bachelor of Arts degree in French and English literature, a Master of Business Administration, a Master of Arts in International Development, and lastly a Master of Computer Science. My interest in computer science was fostered by my older brother Sam, who specialized in functional and provable programming. He died of bile duct cancer ten years ago this January. But he taught us many things and he still makes us laugh and, for the cats, you know, he helped to codify Nummism.
Why did you start using Python?
I first discovered Python through Panda3D, one of many game engines that I studied at home. I was still fairly new to programming in general, I was impressed that this language was used by Disney and NASA, and its readability helped me understand design patterns and algorithms. I learned more about the language from Mark Summerfield’s book, Programming in Python 3. Then, for university assignments, I started using Python or Ruby whenever I was allowed to choose the language. I found that these languages, being so good for rapid prototyping, were real lifesavers in a situation where a programmer was being asked to write several throwaway projects each week!
What other programming languages do you know and which is your favorite?
Besides Python, I mainly use C, C++, Objective-C, Java, and C#. I also used Ruby and ActionScript 3 a lot in my student days, the latter being the language of my thesis project, an augmented reality framework. For me, the choice of platform and libraries tends to come before the choice of language in any given project. Much of my current work is in computer vision for embedded systems and, here, I like to prototype in Python and then refine the implementation in C++. Above all, C++ never leaves me with regrets about performance or access to lower levels.
How did you get into writing books?
Well, I got into writing one and, before I knew it, I got into writing five more.
To begin, in 2012, an editor at Packt Publishing contacted me after finding my resume online. Packt wanted to be the first company to publish a book on OpenCV’s Python bindings. I knew Python, I was working as an augmented reality developer, and I had a background as a teacher, writer, and editor. I was completely new to OpenCV but I guess we decided, if I could teach myself, I could teach other people.
So Packt and I produced the first-ever book on OpenCV’s Python’s bindings: OpenCV Computer Vision with Python. It targeted beginners and it taught computer vision alongside application development. It was short and sweet and it sold well. Then we decided, let’s produce the first-ever book on OpenCV’s Android bindings: Android Application Programming with OpenCV. Again, computer vision and application development went hand in hand here. It was short and sweet and sold quite well, particularly to thesis students in computer science and engineering. These advanced students had recognized the potential of Android as a computer vision platform but their coursework hadn’t given them any foundation in mobile development so instead they learned from the book and from their own experiments.
We began to see the opportunity for more advanced books on applied computer vision. Packt had recently launched a series of books “for Secret Agents”, in which each chapter is a project inspired by something from spy fiction. We decided, let’s do that with OpenCV! Spies use cameras, eh? So we produced OpenCV for Secret Agents, which, I believe, helped to popularize the use of face detection and recognition on cats. It contains Haar and LBP implementations of a cat face detector that we open-sourced as a contribution to OpenCV. Another highlight of this book is a real-time implementation of Eulerian video magnification, using the PyFFTW library to amplify fine motion of a certain frequency. This lets you visualize things like pulsing arteries, which otherwise wouldn’t be visible in low-quality webcam input.
Then, OpenCV 3 came out and we found ourselves in the situation of patching and updating the existing books while also trying to expand the lineup. Packt brought on five great co-authors who made this work possible. Joe Minichino updated and greatly expanded the Python OpenCV book for its second edition, Learning OpenCV 3 Computer Vision with Python. He made it strong as both a machine learning book and a computer vision book for all levels of readers. Alejandro Rodas de Paz wrote Python Game Development by Example, to which I contributed a computer vision chapter. This book offers a fun and accessible set of game projects using a broad selection of Python libraries. And I teamed up with Steven Puttemans, Quan Hua, and Utkarsh Sinha to write our most advanced book, OpenCV 3 Blueprints, based on some of the best techniques that we had tested in research and industry. For this, I wrote about topics I love: cameras, lenses, and computational photography.
Meanwhile, as sole author, I updated and expanded the Android OpenCV book for its second edition, Android Application Programming with OpenCV 3. I also rediscovered my interest in iOS, which had been a starting point in my programming career. OpenCV 3 greatly improved the library’s iOS bindings, so we decided, let’s produce a book on those: iOS Application Development with OpenCV 3. I believe this remains the one and only book on OpenCV 3’s iOS bindings. Read it and you’ll acquire a niche skill set.
That’s all the books for now.
What projects are you working on now?
I’m helping one group of clients develop embedded software for ultrasound machines. I’m helping another client develop an augmented reality engine for smartglasses. Both of these are built from the ground up without reliance on other proprietary software.
Besides continuing to grow Nummist Media, my parents and I are working on a new venture.
Apart from business, this year we are finishing up a long project of building a home.
Which Python libraries are your favorite (core or 3rd party)?
Well, OpenCV looms large. Then, being interoperable with it, NumPy, SciPy, scikit-learn, and PyFFTW all enhance an OpenCV user’s repertoire of high-level functions. Together, they are great for rapid development of all kinds of scientific and machine learning applications.
I’ve also used TensorFlow and been amazed by the success with which its Inception image classifier learns from even a poor set of samples.
What advice do you have for other aspiring authors?
Writing a book, editing it, and then supporting the readers is a long, iterative process that involves many people and many changes. Writing a series of books, even more so. Many aspiring authors overcommit themselves, which often means they don’t finish the book at all or they end up cutting corners in the editing and support stages. Be realistic and disciplined about the commitments you make. Before writing a book, hopefully you already have enough writing experience to know your own productivity and work habits, and (this one is important) to know that you actually like to write. If you don’t know any of these things, you may want to try some smaller writing commitments first. For example, post some tutorials online in the form of articles, videos, or both. If you don’t have a site of your own for this, you may be able to contribute a guest tutorial to someone else’s site, potentially a book publisher’s site.
Editing or publishing experience, if you have it, is also valuable because it will help you understand the jobs of other people on your project team.
Write setup instructions. Support as many platforms as you can. Your readers’ development environments and deployment targets will vary widely, unless perhaps you write a book about a specific embedded system.
Even a successful book may not earn much money for the author, at least not directly. Bear in mind that a lot of technical books are extreme niche products, like our dear iOS Application Development with OpenCV 3. Nonetheless, your book can be a great promotional tool for your career or business. As an author, you may get unsolicited offers quite regularly.
Is there anything else you’d like to say?
Be flexible, work hard, be sincere. Have courage and compassion. Appreciate loyalty, simplicity, and true beauty. Hug a cat.
Thanks so much for doing the interview!