find similar image in library to photo - image

I work at a printer where we generate thumbnails of artwork for orders and store them in a folder before printing.
I'm looking for a code library that will allow us to take a photo of a printed item and look through the library of thumbnails for the design.
Just wondered if anyone knows of a library or api that could do this?
Thanks
David

pHash is one solution.
There are others but that mainly depends on your requirements: do you only want to identify identical images, if not, what types of transformations do you want to be able to capture etc.
In general you should look for near duplicate image search.

#david-jennings there are numerous methods to look for similar images in libraries. Remember that google already does this in google images.
Your problem falls under the scope of Content Based Image Retrieval (CBIR), which aims at looking for images with similarities in their content. MPEG-7 is a standard established many years ago to address these issues and the research field is very active with new techniques being developed constantly.
The main idea in CBIR is to extract some kind of a signature from an image and try to match it with all previously extracted signatures of all images in your database. Which method to use depends upon the specifics of your problem... According to your initial post I suppose that probably the use of SHIFT is going to do the work for you...
You may implement such a system using OpenCV with C/C++/Java/etc., or something more "scientific" using MATLAB.

Related

Generic Universal UI Format?

I'm not sure StackOverflow is the best StackExchange site for this but I can't find a general standards/architecture one, if StackOverflow isn't the best place for a question in this form please point me in the correct direction.
I'm trying to find a universal UI format, due to business constraints I can't get too far into the specific use case, but am looking for something which would function as a minimal UI format for calling API functions, displaying tabular or descriptive data, ideally with images and other binary formats included, and displaying regardless of unforeseeable future changes in tech.
Is vanilla HTML the best solution here, or is there a more base-level option around already?

OpenCV FaceRecognizer - facial recognition. Does anyone know of a link

With the class FaceRecognizer of OpenCV anybody has a link to somewhere explaining with available source code how to use it to save a model from images (say cropped tags of the same person in photos) and then with any other image that wasn't used to make the model load the model saved of the person(s) (possibly previously stored in db) and find a match on a photo from the stored model therefore calling it facial recognition? This would be a breakthrough for a small social network I have that already uses facial detection to tag people now I need the facial recognition to be able to implement automatically tagging in photos recognizing the users in the images.
Been looking but can't find source code, it's been over a year since the class has been released, for facial detection there's source code as to detect nose, ears, eyes, eyebrows, mouth, etc but not for facial recognition.
Have tried from the official opencv site with the documentation they have, they do post source code in chunks making you think how to put the code in order but haven't been able to compile what I had created to save the model "trained" from an array of photos.
I am afraid you are more than mistaken. There are lots and lots of face
recognition documentation.
Just a quick search on google, http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html
Is this the documentation you are talking about? There are many examples, pretty clear cut and straight forward with source code. Which part are you having problems from the documentation? The codes are not in chunks, and it's the whole code by itself. Do comment on my answer so I can help you.
If this is not the documentation you talking about, then have a look at it. Example source code all included inside. Cheers.
Last but not least, when you say trained, you are talking about classifier? If you already have trained it, there's no need to compile it, just insert the path of the classifier into the program.

How can I extract images from a site that I'm linking to?

If you're familiar with Reddit, you'll know how all of their posts containing pictures get a small thumbnail preview beside the title of the submission. How does Reddit go about doing that? Does it just check to see if the link ends with .jpg, .png, .bmp, etc?
reddit will try to pull a thumbnail from any source--not just an image URL. This is done firstly by having set rules for specific sites, and secondly by having one generic process for retrieving thumbnails for unknown URLs--and is an automated periodic task.
One of the (many) benefits of reddit is that the source code is open, and if you understand Python, you should check out /r2/lib/scraper.py for a more detailed view at how this process works.
Also, while StackOverflow is a great place to have programming-related questions answered, you might also want to check out reddit's own /r/redditdev for information on reddit development.
Indeed, if the URL contains .jpg, .png,
etc., use that.
If the site is a
popular domain (flickr.com,
youtube.com, amazon.com, etc.), have
a set of predefined rules to extract
something you know will be relevant
(may it be the featured image, YouTube
thumbnail, Amazon product image,
etc.)
Otherwise, if all you have to
work with is some HTML, you'll have to dig it out yourself. You could choose the
first one on the page, the biggest by size,
or even the one you've algorithmically
determined to be the most relevent (e.g. relatively big, inside what you think is the main body content.)
If you have to resort to the last option, one technique I'd recommend is to extract multiple images, and A/B test them to find the one which has the best click-through rate. That way you can nearly always get the best one.
You can check for the content of the <img> tag.

How does Google Maps work? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 8 years ago.
Improve this question
What is the name of the technology behind Google Maps which allows the server to send only the part of the map requested from the user to enhance the performance, and is there any library to handle this?
The technology could generically be described as a map server. The map server generates a map for the requested location from a large set of pre-generated map tile images covering the entire planet. The map server may overlay data from other databases on top of this. The combination of a map viewer client and geographical database is traditionally called a Geographical Information System (GIS).
Anyone can write web applications that embed Google maps using the Google Maps API.There is also a fine open source map server (called MapServer) should you wish to deploy your own map server.
As stated, Google generated all of these 256x256 tiles and is just serving the relevant tiles. From your comments it seems that you are looking for something to generate these tiles for you. Several people have written code to chop an image into tiles - for instance http://crazedmonkey.com/blog/googletilecutter or http://www.klokan.cz/projects/gdal2tiles/ both seem to be able to do what your looking for.
If you look at the link for a google maps page it will look like this:
http://maps.google.com/maps?f=q&hl=en&sll=37.0625,-95.677068&sspn=53.345014,88.769531&ie=UTF8&ll=41.226264,-81.454246&spn=0.012507,0.021672&z=16
The javascript code on the page and the server code use the numbers in the link to determine the location of the map you are viewing, the zoom level, and the size of your viewing window to determine the tiles to send to your browser.
There are commercial libraries that can provide the mapping data as well as tools to display and navigate the data. One I've seen used before is Geomicro
This is something that you can try out yourself with OpenSource,
http://www.geoserver.org
http://www.openlayers.org
and
last but not least
http://geowebcache.org/
You should be able to setup a minimal environment that does something similar to maps.google in a couple of hours.
You can also use the Google Maps API with your own images. Of course, they don't need to be a map; they can be any images. This will allow the user to drag and zoom, like in Google maps.
Here's a nice rundown of an open source stack for generating Web-based maps from one of the founders of EveryBlock.com: http://www.alistapart.com/articles/takecontrolofyourmaps
The generic name for the underlying discipline is GIS.
Are you asking for more details out of general curiosity, or do you have a specific technical need for a project?
Google gets high definition satellite shots from services that sell these images, they then store and crop this images and serve only those that are required when you look at a certain point. That is, have you noticed when you zoom-in and out that you get to see squared tiles appearing? those are the ones Google Server is serving you.
You also have to consider how they handle the load with the Google File System and MapReduce
It's just a huge image consisting of square chunks that are downloaded indepedently (using AJAX and so on). I believe it's done by some kind of internal Google libraries (could be also GWT).
More on this topic:
http://blog.grimpoteuthis.org/2005/02/mapping-google.html
Google Maps and Google Earth use something known as KML, or "Keyhole Markup Language", which is a special variant of XML. It's named in tribute to the first geo-tracking satellites. You can store information on a location in Google Earth (and it will eventuall trickle down to Google Maps) by using this markup to geocode its specific latitude and longitude coordinates. You can even include altitude.
Not to answer the question, just broader the information. Microsoft has something called "Deep zoom" for Silverlight that makes it easy to do that kind of effect.
Its a free composer where you tile upp your pictures (or one big picture) and do some other settings, then it breaks it down to a lots of smaller pictures in subfolders, one folder for each zoom-level. And then creates a page that can consume those in a smooth way.
A good blog entry about it:
http://weblogs.asp.net/jgalloway/archive/2008/03/21/why-silverlight-2-deep-zoom-really-is-something-new.aspx
I'm working on a cross browser viewer for very large historic plans and scetches. A good help for the first steps (an old blog) I found at http://www.cadmaps.com/gisblog/?p=7
to understand image pyramids (that's what Google Maps works with).
With a 'tiler' I produce a lot of images like testImage_0001111100.png. 0001111100 is i.e. 5th zoom level and x / y position in the image pyramid.
Most of calculation (neighbor images, image stack up and down) is done serverside by php called by ajax requests.
I'm struggling in the moment with (not insolvable) problems in smooth shifting and zooming. That's my problem - but read the article.
AJAX allows you to update part of the page from the javascript. Basically the javascript makes a request back to the webserver and replaces part of the existing page with the result.
JQuery is one library that makes this easier. I don't know what google uses.

How would you generate default user profile pictures?

I've been admiring StackOverflow's default quilt-like profile pictures (which I notice are also on the Fail Blog) and am curious what program both are using to generate them.
But what I really want to know is: If you were to design the system to create default profile pictures, how would you do it?
I'm looking for ideas on what algorithm you'd use, as well as things like how you would related the image to the user, be it related to their username, or some portrayal of their progress (ie the image gets more complex, or larger, as they gain reputation).
FWIW, the default pictures are generated by gravatar, which is why you'll see them on more than this site.
It's called an Identicon. On Stackoverflow it Gravatar uses your IP address to generate the image.
This is an editorial, not necessarily an answer.
Those auto-generated avatars on this site come from a service (Gravatar) that focuses exclusively on providing avatars and is therefore the core of their business. For apps that aren't specifically intended to generate and display avatars, I would just go with an empty placeholder (like Facebook). It's a neat feature, but is it worth your development time when a simple placeholder would be just as effective?
A very good source of images would be flame fractals. They are rather computationally expensive, so simply sourcing them from a project like electric sheep or having them be rendered by the user's computer should be considered to offload the work.
Who wouldn't want default profile pictures like these?
alt text http://sheepserver.net/v2d6/gen/202/124809/icon.jpg alt text http://sheepserver.net/v2d6/gen/202/124805/icon.jpg alt text http://sheepserver.net/v2d6/gen/202/125373/i77.jpg alt text http://sheepserver.net/v2d6/gen/202/125431/i116.jpg
Use a Julia set or something like that and set the initial conditions to a hash of the user's email address.
I'd use a jpeg server tool (aspjpg or similar) to manipulate the image on load so it displays their badges within their profile pic.
In fact, using any tool to dynamically generate images is pretty cool. Applying some sort of 3d or flash technology to dynamically create images using random variables for eye spacing or facial structure would be pretty wicked as well.
But ya this is a weird question. hah!
I did something similar years back, I used POV-Ray to generate little 3D scenes with torusses (torii ?) and spheres. There were lots of parameters to tweak such as the position, size and colour of each object.
POV-Ray is a scriptable 3D render engine, you can find it here.
Unfortunately my images all looked too similar to each other. I love Gravatar's identicons as uses on this site. I think the symmetry helps and the shapes are unique enough that you can identify users fairly clearly.
In ruby there have a library http://github.com/swdyh/quilt to generate it!

Resources