
Motivation
Hi all, I am Hunar and I have always been interested in photography and always trying to learn new techniques. Whenever I look at other people's work, I am always curious to know what equipment was used, what settings were set and most importantly where the photo was taken. The idea being that I can try to replicate something the photographer did and try to learn from their expertise and experience.There are tons of photo sharing websites out there, but they do not include exactly what I am looking for. Instagram is great to get inspiration, but I do not get to learn about how or where the photo was taken. Also, Instagram is for everyone and not exclusively for photographers. There is also a limitation on the size of the photo which I believe reduces the quality of the image uploaded. For people who enjoy photography this means loss of details.
What I want to build?
- Upload High Quality Photos: One of the key motivations behind this community would be to share high quality photos. Usually when we share photos in other sharing apps there is usually significant compression downgrade on client side that reduces the throughput but compromises the quality of the image
- Show Camera Information and Settings: To learn from other photographers, it is very important to know exactly how they took the photograph. All the camera details like the make/model, the lens used, and other camera settings are stored within the image file itself. This data is called the EXIF data. Although there is a lot more that goes into taking a photograph but learning about these crucial details certainly helps in learning how good photographers take photos. It can also help as good Metadata that we can search photographs on.
- Easy to add Tags: Tags provide a good taxonomy with which can enhance the idea of an image. It also helps us search similar photographs. The problem is when I upload a photograph, I can't think of any. It would be a good idea if these was some service that analyzes the image and suggests the tags which I can use if I want.
- Easy to add locations: Sometimes EXIF data does contain GPS data, in that case it would be good to know the name of the location from the co-ordinates. On the other hand, we would like to add location easily if the user provides the location.
What I have built so far?

- GeoPhotoWeb: This is the frontend, where users can upload, edit and view their photos. There is a general list of photographs but there is also a map view that lets you view the photographs on an interactive map.
- PhotoStorage: Using Azure Blob Storage to store photos in various sizes.
- GeoPhotoStorageAPI: A RESTful API to perform CRUD operations on PhotoStorage used primarily by GeoPhotoWeb
- GeoPhotoDB: A No-SQL db developed using Azure Cosmos DB. The DB contains meta-data of photographs.
-
Function: There are various functions used that perform asynchronous operations that help in
enriching the meta-data for photographs or resize them.
- PhotoTagging: Once a photo is uploaded a message is sent to queue which triggers the PhotoTagging function. This function sends the photo to Azure Cognitive Services that suggests tags for images as well as a description.
- PhotoLocation: If there are GPS coordinates for a photo, this function uses the REST API provided by OpenStreetMap to get the location name.
- PhotoResizer: When a photo gets uploaded to Azure Blob Container this function gets triggered and resizes the photos in three different formats.
What is next
The community aspect of this site. This is a big challenge. Although it may seem trivial but there are several obstacles here.- User managements
- Calculating and displaying view counts
- Calculating and displaying likes
- Commenting