Skip to content

VoycerAG/gridfs-image-server

Repository files navigation

Build Status

Go Image Server

This program is used in order to distribute gridfs files fast with nginx.

It has resizing capabalities and stores resized images in the gridfs filesystem as children of the original files.

Compilation:

Install project using go get github.com/VoycerAG/gridfs-image-server

Face Recognition:

The image server can provide experimental face detection for all images. In order to use this feature you need to install openCV in order for the compilation to succeed. This will disable cross compilation compatibilities, since it makes heave use of cgo.

The current algorithm is pretty unconfident and only selects faces if it is about 90% sure that it will actually improve results. This is to be improved in future releases.

Dependencies on Linux:

libcv-dev libopencv-dev libopencv-contrib-dev libhighgui-dev libopencv-photo-dev libopencv-imgproc-dev libopencv-stitching-dev libopencv-superres-dev libopencv-ts-dev libopencv-videostab-dev 

Dependencies on Mac OS X:

brew tap homebrew/science
brew install opencv

After you have installed all dependencies you can use go get -tags=facedetection github.com/VoycerAG/gridfs-image-server to install the server with face detection support.

Instructions

  -config string
    	path to the configuration file (default "configuration.json")
  -host string
    	the database host with an optional port, localhost would suffice (default "localhost:27017")
  -license string
    	your newrelic license key in order to enable monitoring
  -port int
    	the server port where we will serve images (default 8000)
	(only with buildtag +facedetection)
  -haarcascade string 
    	haarcascade file path

Image Server Configuration

See the configuration.json file for examples on how to configure entries for the image server.

Newrelic Monitoring

Simply enter a valid license key on startup, and the image server will be monitored with the plugin GoRelic. You can find it under Plugins in your account.

Nginx Configuration

The configuration section for your media vhost could look something like this:

location ^~ /media/ {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header Host $http_host;
     proxy_pass http://127.0.0.1:8000/mongo_database/;
}

Now resized images can be retrieved by calling /media/filename?size=entry where as the original image is still available with /media/filename.

If an invalid entry was requested, the image server will return the original image instead.

Changelog

Changes in Version 3:

  • A bug that made initial resized image do not sent cache headers is fixed.
  • If neither the original file, nor the resize file could be found, instead of a status code 400 the server will now respond with a status code 404.
  • If resizing fails, there won't be a status code 400 anymore, instead it will be a status code 500.
  • Configurations without resize type are no longer supported.
  • image magick fallback is dead, therfore you should at least use go 1.4 now, 1.5 is recommened.