AI-based photo-sharing service that helps discover ideas such as recepies, home deco, interior design, style inspiration, fashion, places, events, health etc. by sharing photos.
The project addresses the design choices of developing applications:
- Project structure and organization.
- Practical code patterns for creating robust and maintainable programs.
Development practices is based on guiding principles of well written Go code.
- Clarity
- Simplicity
- Correctness
- Productivity
- Features
- Architecture
- Platform & Technology used
- How to install
- Displaying help information
- Quality Controlling Code
- Profiling Test Coverage
- Vendoring New Dependencies
- Build
- Author ✒️
- License 🔒
- Text
- Code
- AI photo description generation; automates photo description generation based on the activities and objects detected on the photo, this description can be used by screen readers to improve the experience of users that relly on screen readers. ie. visually impaired and blind users.
- AI photo auto-tagging based on the objects, living beings, scenery or actions found in the photos to aid classification.
- Photo geotagging to associate photos with a given geographical location.
- Cognitive search to enable users to expressively search for content and get results based on the semantic meaning of the search phrase.
- Photo management to enable users to upload, delete, share etc. photos.
- Analytics; track user interaction from analytics and insights.
- Computer Vision API is part of the Cognitive Services suite and is used to retrieve information about each image.
- Azure Functions provides the back-end API for the web application. This platform also provides event processing for uploaded images.
- Azure Event Grid triggers an event when a new image is uploaded to blob storage. The image is then processed with Azure functions.
- Azure Blob Storage stores all of the image files that are uploaded into the web application, as well any static files that the web application consumes.
- Azure Cosmos DB stores metadata about each image that is uploaded, including the results of the processing from Computer Vision API.
- Azure Key Vault
- Azure Cognitive Search
- Azure Web APP Service
- Cloud Platform: Microsoft Azure Cloud
- Development Language: GoLang & Python
- Full-Text Search: Azure Cognitive Search
- Secret Management: Azure Key Vault
- Authentication & Authorisation: AUTHO (auth provider)
- Photo/Blob Storage: Azure Blob Store
- Web Deployment and Management: Azure Web APP Service
- Photo tagging & captioning: Azure Computer Vision API
- Data warehousing: Azure Data lake
Clone the project from github.
git clone https://github.com/evansopilo/visuai.git
cd visuai
Using manual download ZIP
- Download repository
- Uncompress to your desired directory
Use the GNU make utility and makefiles to help automate common tasks in out project, such as creating and executing database migrations.
Execute the help
target, you should get a response which lists all the available targets and the corresponding help text.
Usage:
help print this help message
run/cmd run the cmd/ application
audit tidy and vendor dependencies and format, vet and test all code
coverage go test coverage
vendor tidy and vendor dependencies
build/cmd build the cmd/ application
The audit rule will:
- prune dependencies
- verify module dependencies
- format all .go files, according to the Go standard
- vet code; runs a variety of analyzers which carry out static analysis
- staticcheck; carry out some additional static analysis checks
- test
To run these checks before you commit any code changes into your version control system or build any binaries.
$ make audit
A feature of the go test
tool is the metrics and visualizations that it provides for test coverage.
$ make coverage
Running test coverage ...
go test -cover ./...
? github.com/evansopilo/visuai/cmd [no test files]
? github.com/evansopilo/visuai/pkg/blob [no test files]
? github.com/evansopilo/visuai/pkg/data [no test files]
? github.com/evansopilo/visuai/pkg/log [no test files]
? github.com/evansopilo/visuai/pkg/secret [no test files]
go test -covermode=count -coverprofile=/tmp/profile.out ./...
? github.com/evansopilo/visuai/cmd [no test files]
? github.com/evansopilo/visuai/pkg/blob [no test files]
? github.com/evansopilo/visuai/pkg/data [no test files]
? github.com/evansopilo/visuai/pkg/log [no test files]
? github.com/evansopilo/visuai/pkg/secret [no test files]
go tool cover -html=/tmp/profile.out
This will open a browser window containing a navigable and highlighted representation of your code.
Note: It's important to point out that there's no easy way to verify that the checksums of the vendored dependencies match the checksums in the go.sum
file.
To mitigate that, it's a good idea to run both go mod verify
and go mod vendor
regularly. Using go mod verify
will verify that the dependencies in your module cache match the go.sum
file, and go mod vendor
will copy those same dependencies from the module cache into your vendor
directory.
# vendor rule execute both `go mod verify` and `go mod vendor` commands.
$ make vendor
Build and run executable binaries for our applications.
Go supports cross-compilation , so you can generate a binary suitable for use on a different machine.
Let's create two binaries — one for use on your local machine, and another for deploying to the Ubuntu Linux server.
To build binaries, you need to execute:
$ make build/cmd
- Evans M Opilo - evansopilo
This repository contains a variety of content; some developed by Evans Opilo, and some from third-parties. The third-party content is distributed under the license provided by those parties.
I am providing code and resources in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code and resources is from me and not my employer.
The content developed by Evans Opilo is distributed under the following license:
The text content is released under the CC-BY-NC-ND license. Read more at Creative Commons.
The code in this repository is released under the MIT license, see the LICENSE file for details.