algorithmic modeling for Rhino
It's been entirely too long since my last update, but I'm proud to announce that a new version of Firefly (1.0.0.69) is now available! There are a lot of new features and components with a few bug fixes as well.
If you want to jump straight in, you can download the latest build from the Firefly website or from Food4Rhino project page. Or, if you'd rather learn more about all the new features, keep reading!
Improved Arduino Support
The Firefly Firmata (Arduino Sketch) has gone through a massive overhaul - making it much more compact, efficient, and extensible. The sketch is now just over 230 lines of code (compared to more than 500 in the previous version). But more importantly, the firmata is now more extensible; making it easier to add support for new Arduino boards... Like what you ask? Well, support for the new Arduino Due platform for example. The Arduino Due is an advanced board and while it may look similar to the Arduino Mega... it's actually quite different under the hood. It features an ARM Cortex-M3 CPU which means its really fast. It also features 12-bit analog resolution for reading and writing (which is pretty awesome). As I said, the Due is a more advanced board and it does require some caution when getting started. You can find out more about the Due platform at the Arduino Due Getting Started page.
One of the biggest changes with the revision of the Firmata was that it required some structural changes with how the data is sent/received from Grasshopper. So, if you are planning on using the latest version of the Firmata, you'll need to also have the latest Firefly components installed as well. This shouldn't be an issue because the installer will place the new Firefly Firmata in your sketchbook folder and install the new components as well... but it's worth noting so you don't try to mix and match the versions.
Kinect Version 2 Support
Earlier this summer, Microsoft released a new and improved version of its popular Kinect motion tracking sensor. The sensor includes better body, hand, and joint orientation, 1080p color video (1920x1080), depth video (512x424), and a new active infrared video (512x424). The sensor now has the capability to track up to 6 people at once (compared to only two people with the previous version).
This build of Firefly now comes with three new components to work with this new sensor. The Video Stream can access the color, depth, and infrared video streams at different resolutions. Simply right-click on the video component to choose the video feed and resolution. Note: You may need to update your graphics card in order to get the infrared video stream to work properly (at least I did before it began working properly). The Skeleton Tracker is similar to the previous version, but can now track up to 6 people. And the Mesh Reconstruction component will build a fully colored 3D mesh using the color and depth data from the sensor. I plan to add more components to this section soon, but I wanted to go ahead and release this so more people could use it! [EDIT: I would like to thank Panagiotis Michalatos for his collaboration in the development of the Kinect V2 tools].
New Computer Vision Tools
This release also includes a number of new computer vision tools. One component to note is the Bitmap Tracer, which can be seen in action here. The Bitmap Tracer component spawns a number of randomly generated particles which trace the edges of a bitmap using the nearest contouring vector. Another pair of components is the Bitmap Decompose/Recompose which can either decompose or reconstruct a bitmap using a list of values for its constituent channels. These two can be used together to swap channels in an image (think chroma keying). There's also a Bitmap Threshold component which uses the average dithering algorithm to find the color quantization of an image. Lastly, I've updated the Leap Motion Finger Tracking component to work with the latest release of the Leap v2.2.1 software release. The component now has improved finger tracking including joint and bone position/orientation.
In addition to these new features, there's also a number of bug fixes too (check out the readme if your interested). As always, I welcome any and all feedback on this build. Your support really helps, so please let me know what you think!
Tags:
Hi Andy, thanks for this update, and thanks a lot for fixing the channel saving from the BitmapSampler! Great.
You're welcome. And thanks for reporting the bug!
You remembered that:)
Since you're asking for feedback in your blog post: I'd like to have an option for the BitmapPainter to adapt its size to the actual size of the bitmap (when viewing the canvas at 100%). Also I'd like an option for the Filters (Vision panel section 2) to wrap around toroidally, I think now they just discard the boundary pixels, right?
I think the ImageRegion component would be user friendlier if the bounding area points would correspond 1:1 with the pixels. The BitmapTracer could use an example to explain the usage (I end up with mostly tiny curves).
Thanks Peter. A lot of good suggestions.
For the Bitmap Painter, are you saying you want a way to view the image at 100% (so actual pixel dimensions)?
For the filters suggestion... are you asking for an ability to make a bitmap periodic (or symmetric)? Do you see this as a separate filter (which I could do) or an attribute (input) to each filter? What would the use case be?
I'm not sure I understand the Image Region suggestions (could you clarify)?
The Bitmap Tracer component works by creating a number of random UV points (particles) within the image domain space. The number of particles can be controlled by the N-input. Then, at every update it looks for the nearest contour vector and moves a small amount in that direction. The key is the update cycle. If you're using an image coming from a webcam, then the images automatically update according to the webcam refresh rate. However, if you're using a still image then it wont automatically update. To fix this, simply add a Grasshopper Timer component to the Load Image component and set the interval to whatever you like. Then, you should see the particles moving around your image tracing the edges of an image. Higher contrast can also help here. Hopefully that helps explain things a little better.
Thanks for the quick response Andy.
You understood correctly: actual pixel dimensions. I don't think I can explain better than saying wrap toroidally (top wraps to bottom (and opposite) and left wraps to right(and opposite)). I don't have a preference about both of your suggestions, any of the two would be great. The use case would be to create tilable images.
(a workaround would be tiling the image, then use the filter, and then cropping the image again, but that is quite cumbersome)
About the ImageRegion component: I'd prefer it if I could feed it 'pixel coordinates', so for instance: if I would want to have only the left side of my 256x256 image I could feed it (0,0) for the first point and for the second point (128, 256).
Thanks for the extra effort explaining how to work with the BitmapTracer, I'm going to try that.
Well, for the pixel wrapping feature... I think it could be easiest to start by making a Symmetry/Periodic filter. I'm pretty sure this would have the desired effect your looking for (and I doubt you would have to crop it in afterward either since that would make it not periodic or symmetric anymore). I can look into this.
The reason I went away from specifying the Image Region in pixels is that it requires you to know exactly what your pixel sizes are in order to use it. Right now, it's normalized between {0,0} and {1,1} so you don't have to go and find out what your resolution is before putting in a value. I think it causes less errors (although I can see why it could be important. I can think of two alternatives. One is to provide some mechanism to allow the user whether they want to use normalized or pixel space values. The second would be to add a separate component which has inputs for the bitmap and the location (in pixels) in the X and Y and it returns a normalized output. The second option is probably doable with just standalone components... but it might be easier if it's built into a single component. I'll start thinking about this. Thanks for the suggestions.
Hi Andy, when I open an older definition that uses the BitmapSamler, the BitmapSamler is left out ("Failed to deserialize itself"). Is this because the component's guid has changed maybe? Is this fixable?
I didn't notice this before, maybe I messed something up recently~
The GUID didn't change so I don't think it would be that. Honestly, I'm not sure why that would be happening. It's possible that the change in serialization made it not recognize the previous component. I'm not sure if it's fixable or not? Is that a huge issue?
I'd say yes, because I'll have to figure out how it was connected originally and where, since of coarse the wires are gone too. Also, I used it in many definitions.
Are your older definitions using the BitmapSamler not having this issue?
Hi Andy,
thanks for sharing. I have spoiled my laptop, and from computer of my fathers will not let me install the 32-bit version puts me something like this:
The installation package is not supported by this processor type. please contact the product manufacturer.
I have here windows Vista 32-bit Pentium (R) Dual Core... It may be too old?
Seizing would be possible a component to read sound files instead of using the microphone? I think it's a big leap for use GH as an animator songs. I tried a while ago with the microphone form the shape of the frequency in real time, but the microphone picks up too much noise or low purity in the sound of the song. It would be cool, but not if it is possible, read mp3. Anyway, wonderful plugin.
Hi Daniel,
Do you get the same error if you right-click on the installer and "Run as Administrator"?
Thanks for the feature suggestion. I'll look into it.
My member account is the administrator and does not appear me to open as administrator by right-clicking.
Thanks, I will look if there is another way to install a program from Administrator, just in case...
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by