MushroomHuntr

I’m a bit late to the party in starting to tinker with TensorFlow, but nevertheless I’ve been having some product ideas (some dumber than others) for real-world applications of machine learning, and here’s one of the stupider ones:

If you know me at all, you know that one of my hobbies is foraging for wild mushrooms. Going to the forest to forage for mushrooms is a time-honored tradition in Russia and many other Slavic countries.  I also derive great pleasure from sharing this hobby with other people, and telling them how fun, challenging, and rewarding this activity can be.

Therefore, I give you — MushroomHuntr: an Android app that can identify different varieties of mushrooms!  It uses a neural network to perform image recognition in real time, to tell you what kind of mushroom you’re looking at.

Huge legal disclaimer: Do not actually rely on this app to differentiate poisonous mushrooms from edible ones!  The app provides a rough guess of the identity of a mushroom, not a definitive identification.

Under the hood, the app uses the Inception v3 model developed by Google, with the top layer of the model re-trained on a large collection of mushroom images. Many of the training images were taken from Wikimedia Commons, and others came from my personal photos that I’ve taken over the years.

The app can distinguish between about twelve varieties of mushrooms, most of which are native to North America and Europe. All of the trained varieties are common enough to be found easily in parks and forests, to maximize the app’s usefulness for the novice mushroom hunter.

When the app is launched, it automatically enables your phone’s camera, and starts attempting to recognize anything it sees in the image.  Therefore, all you need to do is aim the camera at a mushroom, and see what it says!

To maximize the accuracy of the mushroom recognition, try looking at the mushroom from the side, and bring the camera close enough for the mushroom to fill up most of the frame, like this:

20171104115119

I won’t make this app available on the Google Play Store for the time being, while I continue to refine the model, but if you’d like to check it out, you can build it from source code, or contact me for a pre-built APK that you can install on your device.

VR needs several more generations to succeed

When considering today’s “VR” technology, the actual name “VR” is misleading: it’s not really “virtual reality.” A more accurate name for it would be “binocular display with motion tracking,” but that name is not nearly sexy enough to attract venture capital for your startup. I wanted to put all mentions of “VR” in this blog post in quotes, but that would be too on-the-nose even for me, so just imagine that the quotes are there.

I’ve played with many of the major VR headsets in an “enthusiast” capacity for a while now, and I’ve even developed a few applications for them. I really wanted to like VR. I tried really hard to suspend disbelief and make myself like it, but I just have to admit — I don’t see the appeal, and I don’t see the current generation of VR technology as anything more than a passing fad.

20170429120144
Coming soon to a landfill near you!

The only thing that the current VR experience delivers is novelty. It really is exciting to look into one of these headsets for the first time. However, the drop-off in novelty is very steep, on the order of minutes, not even hours.

There isn’t any one specific deal breaker for the current state of VR. It’s rather a combination of factors that, collectively, make it altogether unusable:

  • It’s very low-resolution. In order for a VR experience to be “believable,” it needs to have a resolution of at least 4K per eye. Otherwise, you can literally see the pixels when you look at the image in the headset.
  • It’s not nearly immersive enough. The field of view of the major VR headsets is about 100 degrees, which feels unnatural, and borders on claustrophobic. And the “depth” of the 3D content in the VR display can’t seem to match true natural proportions, either.
  • It’s nausea-inducing. The sensors that track the 3D position of the headset need to be an order of magnitude more sensitive and responsive.
  • The “headset” form factor is still too impractical to become mainstream. No matter how comfortable the headset becomes, if it still needs to cover your eyes and wrap around your head, you won’t want to use it for very long. Did you know that there’s a Netflix app for VR devices? If watching a two-hour movie while having a big plastic appliance strapped to your face is your idea of a good time, then I salute you, but I would still wager that you’re in the minority.

I don’t believe that VR technology can move forward by addressing any one of the above points. It would need to be a quantum leap of technological advancement.  And honestly, once the collective novelty of VR finally wears off, I’m not sure there will be enough interest among consumers for VR companies to work towards this next leap any time soon, except perhaps for very specific niche markets for which VR is better-suited.

I am, of course, looking forward to the final generation of VR, which will involve a Matrix-like interface that plugs directly into your brain stem. Until then, I’m afraid we can only look forward to landfills brimming with plastic contraptions thrown away shortly after purchase.

Big updates to DiskDigger!

I’ve just released a pretty significant update to DiskDigger for Windows, which introduces numerous improvements and features not only for casual home users, but also for professional investigators and forensics specialists. Here are the highlights from this update:

  • Now using a “Ribbon” interface, which contains navigation (Back / Next) buttons, configuration settings, and recovery options (see screenshot below).
  • Every section of DiskDigger’s workflow now has a “Help” button where you can find answers to common questions about the recovery process.
  • In “dig deeper” mode, you can now save and restore sessions (in the Advanced tab).
  • In both “deep” and “deeper” modes, you can now save a detailed report (in the Advanced tab) which is a log of all recoverable files found by DiskDigger, along with basic meta-information for each file.
  • Improved support for scanning disk images. In the Advanced tab when selecting a drive, click the “Scan disk image” button. For forensic-strength scanning of disk images, you can control the number of bytes per sector (all the way down to 1), for recovering files that may not be aligned to sector boundaries.
  • Added support for recovering raw images from Panasonic/Lumix cameras.
  • DiskDigger now requires .NET 4.0. Therefore, for running it on Windows XP or Windows Vista, you may need to install .NET 4.0 from Microsoft if you don’t have it installed on your system.

dd_screen71If you’ve accidentally deleted or lost your files, DiskDigger is always here for you!

A quick (but useful) update to an oldie-but-a-goodie

One of the first apps I ever wrote for Android, and certainly the first app I published to the Google Play Store, was a simple unit converter app. (My god, that was nearly six years ago!) With over 150,000 loyal users, I’d say it’s been modestly successful, especially considering the hundreds of other similar utilities that exist on the Play Store.

Anyway, I thought it’s high time that this app receives some love, so I implemented a feature in the app that I’ve been wanting to make for quite a while: Widgets! You can now drop a widget right onto the home screen of your device, so that you can perform quick unit conversions on the home screen, without having to launch a separate app! You can also drop multiple instances of the widget, if you need more than one quick conversion. Here’s what it looks like:

device-2016-10-15-201230

The steps for putting a widget on your home screen varies for different Android devices, but generally it involves pressing-and-holding within an empty area of the home screen, and selecting from the “Widgets” menu. If you have the app installed, you should see a “Convert Units” widget that you can select and place on the home screen.

After placing the widget, you can configure which units it shows by pressing the “gear” icon on the left. You can then increment and decrement the value to convert by pressing the “+” and “-” buttons, or exchange the “to” and “from” units by pressing the widget itself.

The state of emulation on Android

For whatever reason, I have a strange fascination with emulators, and making sure that I can emulate as many machines and game consoles as possible on my current PC.

The one thing I haven’t researched until now is emulating various systems on my Android device. Now that I’ve received my shiny new Galaxy S7, I figured it must be powerful enough to emulate a good fraction of older hardware. And indeed, I was pleasantly surprised by the “state” of emulation on Android.  Emulators for NES and Super NES are readily available on Google Play, along with emulators for Atari and Commodore 64, and hardly require the latest hardware to run well.

But what about emulators of actual PC hardware? Well, there’s the excellent DosBox Turbo app, which is an optimized DosBox port to Android. This is not a free app, but it’s well worth it. However, what I was looking for is a true PC emulator, such as the great bochs emulator that I’ve trusted for a long time to boot into my disk images of Windows 3.1 and Windows 95. After a bit of looking, it turns out that this is available, too!

Thanks to some fantastic work by Pelya (for porting the SDL 1.2 library to Android, thus making it easy to port any SDL-based application to Android) and by Lyubomyr (for actually adapting bochs to use pelya’s SDL port), we now have a perfectly working version of bochs for Android! Using their build instructions, I was able to build my own bochs APK, load it onto my device, along with a few disk images. And after a few configuration tweaks, I’m now able to run my emulated images nearly flawlessly:

Here it is, running Windows 3.11:
20160320103603

…and Windows 95:
20160320103424

…and Windows XP:
20160320103213

And here it is running one of my favorite old DOS games, Return to Zork!
20160320103902