{"id":20598151,"url":"https://github.com/fboucher/not-a-dog-workshop","last_synced_at":"2025-06-29T09:03:23.980Z","repository":{"id":54559224,"uuid":"191632715","full_name":"FBoucher/Not-a-Dog-Workshop","owner":"FBoucher","description":"Workshop to build an automatic Not a Dog application , using the Serverless Azure Functions and Cognitive Services","archived":false,"fork":false,"pushed_at":"2022-12-08T05:53:28.000Z","size":4704,"stargazers_count":14,"open_issues_count":3,"forks_count":13,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-15T00:17:22.508Z","etag":null,"topics":["azure","azure-devops","azure-pipeline","ci-cd","cognitive-services","workshop"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FBoucher.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-12T19:31:50.000Z","updated_at":"2024-05-19T19:26:44.000Z","dependencies_parsed_at":"2023-01-24T15:15:24.539Z","dependency_job_id":null,"html_url":"https://github.com/FBoucher/Not-a-Dog-Workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FBoucher/Not-a-Dog-Workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FBoucher%2FNot-a-Dog-Workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FBoucher%2FNot-a-Dog-Workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FBoucher%2FNot-a-Dog-Workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FBoucher%2FNot-a-Dog-Workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FBoucher","download_url":"https://codeload.github.com/FBoucher/Not-a-Dog-Workshop/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FBoucher%2FNot-a-Dog-Workshop/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262566830,"owners_count":23329680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azure-devops","azure-pipeline","ci-cd","cognitive-services","workshop"],"created_at":"2024-11-16T08:25:25.176Z","updated_at":"2025-06-29T09:03:23.953Z","avatar_url":"https://github.com/FBoucher.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://dev.azure.com/cloud5mins/Not-a-Dog-Workshop/_apis/build/status/FBoucher.Not-a-Dog-Workshop?branchName=master\u0026?WT.mc_id=tohack-github-frbouche)](https://dev.azure.com/cloud5mins/Not-a-Dog-Workshop/_build/latest?definitionId=22\u0026branchName=master)   [![GLO Board](https://img.shields.io/badge/with-GLO_Board-orange/?color=05887F\u0026logoWidth=15\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAABMCAMAAADeDICLAAAABlBMVEX///8A/+Bm7Mx0AAAAAXRSTlMAQObYZgAAAXlJREFUeNrV2NGOwjAMRNH4/396X5Cm26twww5IrF9CXfvUSlskWPuYOUh4kJ25HzN3RsOBi+SrMolLINu7hFx2t5dROgicLVyRC1fkwgWssru9zJZzuXFd7l2/gT3MXndL+ZEw12VO+lg6OA5gcV3OkitNBxMiDNdk7oXsRLkXzcDswfJJeHVwkIgfhOfL4ZDXzzV8nRIwZHUdNtldhym7SzgZkdWNhokpu8uJvxRep7DLPvC/hte7YfnahOzu3Zr4m0KYXs+FdZCTRD3EbeGzn2MGr/fBkXCdAia034t5GY6HBGXePLgcUEfehw8cWGRxoWDXSQtLxEZ2WAxkHTaX6UEHHzeBJR94s5z0z/aMw3jZKGd1WFzZZofpAoasMN3kVXZ4bgObPGfwYJ69nE8Os8VlUlw2rsvzBJ6h63JoiDjn7v3GOcwel22rWaTy78ItjHIPlBKu/kCe2cKs+xNN2FmnBzCft5fpBN+MsB0dGGxt47AOwsvjB19NCt1bbfikAAAAAElFTkSuQmCC)](https://app.gitkraken.com/glo/board/XQPiybIcWAAP_ToG)\n\n[![Deploy to Azure](https://img.shields.io/badge/Deploy%20To-Azure-blue?logo=microsoft-azure)](https://portal.azure.com/?WT.mc_id=dotnet-0000-frbouche#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FFBoucher%2FNot-a-Dog-Workshop%2Fmaster%2Fdeployment%2FdeployAzure.json?WT.mc_id=cloud5mins-github-frbouche)    ![Starts](https://img.shields.io/badge/dynamic/json?url=http://api.github.com/repos/fboucher/Not-a-Dog-Workshop\u0026label=Stars\u0026query=$.stargazers_count\u0026color=blue)    [![Serverless Library](https://img.shields.io/badge/Serverless%20Library-%E2%9C%94%EF%B8%8Fyes-blue?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAACx1BMVEUAAAAAAAAAAP8Af38AVaoAf78AVaoAbbYAXLkAc7kAZqoAWqUAY7gAZrIAZa4AYKwAY7QAZ7YAZ7MAZ7UAZLMAY7MAZLUAZrIAZLcAY7QAZrIAZLMAZLYAZ7YAZLYAZrcAZbgAZLMAZ7YAZbIAZLQAYrMAY7UAZLUAZLYAZbQAZrcAZbMAZbgAZbQAZrQAZrgAZrcAZbgAaLkAZbUAZbYAZ7YAZbUAZrUAZ7YAZ7cAZbcAZrcAZ7cAZrcAZ7cAZrcAZrcAZbcAZ7YAZ7cAZrcAZrYAZrcAZbYAZrcAZ7cAZrYAZrcAZrcAZ7cAZ7gAZrcAZrcAZ7cAZ7gAZ7gBaLcCaLcDabgEaLYFabUGarQGa7oHarMIbLoKbbsMbrsOb7wPcLwQcb0Rcb0SbawTcr0Xdb4Ydb8Zdr8dc6UeecEfdKQgcqMhe8Eic6IkdqEkfcIndJ4of8MqeJ0rgcQsdpsseZwxhMY2eZQ3iMc7fZI7gJJBjstCfYxGkcxHkcxMh4hNlc5TmM9VioFVmtBYnNFZnNFbndFbntFcntFcntJdn9Jfh3lhodNiodNnpNVopdVsi3Bsp9Ztj3BulXFuqdZuqddwqtd0mG11mG12j2l7mml9kWWGn2KMlluUpVmWpliaqFWpoEeusEivokOz0uq31Ou51eu61uy7pju81+2/2O3BqDfB2u7C2u7C2+7DqTbD2+7EuTrF3O/F3e/G3e/H3e/H3u/ItTbKqzLKuzbL4PDOsjDOvTTW5vTb6vXdwyrgsyPg7ffitCLk7/jm8PjqyCLq8/ns9PrttxrwuBjxuBfyzB3zvBfzzBzz+Pz0uRb1uRX1+fz2+v33+v34+/35uxL5/P36/P77wxP70Bf7/f78yhT8yxT8zBX8zRX8zhX8zxb80Bb8/f79vA/9vQ/9vhD9vxD9wBH9whH9xBL9xhP9xxP9yBOZ2sNJAAAAU3RSTlMAAQECAwQGBwsLDxESFCMlKSovOz1AQkNHSFBRUVFUVVpbW11gYmRlZmdoaWlqbXByc3V5e36AgYOIubrBysvR09XX2drd3ub2+vv7/Pz8/f7+/mxm4TkAAAHCSURBVHgBXcz1U1VBHEDxr90d2N2KLYbYAbZwVAzB7g6xOxS7OzCwu8UQFVtEBUMxWFeeoX+Ee5e5bxg+v56ZI155itesX80nl6STpYJ/EI5uzUplShsKtwVGP4+LexEff7hlQfHy7YKxU6kkrZ+NI7CsG2pj3VLql9YbgZ5lxCraHRjJDKW+an2qzwgg0A6zdQSWvhm/V6nf+tXkWS/nAi0ymFILWJEY0fuuSv6hd8H21wuA0qa0hrXvVzJHqb/6egiwKWERNBfJBxtM4IBSKfpJTEzM8b7rExbTOadUZNunCOj3UH3+6fF49NuZsC5xOT7SaOv3VcBCZSXpPRir3y2rIk1vx4YBS/ZHRh5SynMuBCP0wbE64jfl8clQrC3q39MJGGFno4dXlcqEPzqRmi4kp6yx4XT0UIpJAZgWe3QgMPbjn4M2nLk6hB65RdrDpHtRJu34dn8YMOj85cHgLyJ1gTF3jvTnxod5Trh0xQTKmZIjABh1MXzil30Y86Oc0CazGCWDcOy+OQBXp0JiNcZxbTpe1SVVRr9gmLoZV1df8SoRwOxebuhQRNLIXq8dVnCrGlklnfyVGjZpUD6vuP4DQn3cxeG842QAAAAASUVORK5CYII=)](https://serverlesslibrary.net/sample/b6d4f0d0-13c4-4de9-8590-5a267a8c3cde)\n\n# Not a Dog Workshop\n\nThis workshop is for beginners who would like to learn more about the cloud and then try some available services. Today artificial intelligence (AI) can benefit a lot of our applications and most of the time it's easier than we think to implement it.\n\n![Dog or Not a Dog Application](https://github.com/FBoucher/Not-a-Dog-Workshop/blob/master/medias/workshopHeader.png)\n\nDuring this workshop you will deploy and complete a web application able to detect when the pictures are dogs or not and keep our image folder \"clean\". We call that application: *The automatic Not a Dog application*.\n\n\u003e We are using dogs as topics, but you can definitely extend the capability of the application to manage pictures of an event, the office, or a group. You could automatically generate tags and so many things...\n\n## What You Will Need Before the Workshop\n\nTo get the best of this Not a Dog Workshop, we **strongly** suggest that you prepare your station with all the required software. Nothing complicated and all the tools that we are going to use during the workshop supports macOS, Linux, and Windows - so you can hit the ground running, no matter the platform.\n\n[How to install all the prerequisites](workshop-prerequisites.md)\n\n## Part 1 - Deploy the solution to Azure\n\nTo get started we will deploy a simple Asp.Net Core MVC application to Azure. This website will display all the images contained in our Azure storage.\n\nThere are many different ways to deploy to Azure. You can deploy directly from development tools like Visual Studio or build a Continuous Integration and Continuous Deployment (CI-CD).  For today's workshop, everything is prepared for you. Click the following link to get started.\n\n**[Deploying the startup solution to Azure](Part1-Deploying-the-startupSolution.md)**\n\n## Part 2 - Creating the Cognitive Services\n\nThe goal of this step is to create a Cognitive Service, and use its Vision API to detect dogs in our images.\n\n**[How to Create a Cognitive Service](Part2-Create-an-Cognitive-Services.md)**\n\n## Part 3 - Build and Deploy the Azure Function\n\nNow that we have some Artificial Intelligence (AI) that will analyze the images, we need some code that should be executed every time a new picture is added.\n\nTo do this we will use an Azure Function.\n\n**[Build and Deploy the Azure Function](Part3-Build-and-Deploy-The-Azure-Function.md)**\n\n## Part 4 - It's time to play!\n\nDoes our dog detector work correctly?! It's time to test our application...\n\n**[How to use the Automatic Not a Dog Application](Part4-Its-time-to-play.md)**\n\n\n## Resulting Solution\n\nIf you are interested in deploying the end result (without doing all the workshop), go check this one-step deployment. \n\n**[Deploy the Automatic Not a Dog Solution](final/readme.md)**\n\n\n---\n\n## Learn More\n\nAt the top of this page there is a badge status\n\n[![Build Status](https://dev.azure.com/cloud5mins/Not-a-Dog-Workshop/_apis/build/status/FBoucher.Not-a-Dog-Workshop?branchName=master\u0026?WT.mc_id=tohack-github-frbouche)](https://dev.azure.com/cloud5mins/Not-a-Dog-Workshop/_build/latest?definitionId=22\u0026branchName=master)\n\nEvery check-in into the master branch will trigger an Azure Pipeline to build the project. This **Azure DevOps** project is public. Click on the badges to open the project and see all the details.\n\n[Azure DevOps](https://azure.microsoft.com/services/devops/?WT.mc_id=dotnet-0000-frbouche) is free! You can have:\n\n- Unlimited number of public or private **projects**\n- **Repositories** (or link your Git repo to it)\n- **Boards** to keep tracks of your works, tasks, issues.\n- Build and Release **Azure Pipeline** to have nice CI-CD processes.\n- So much more!\n\n## Video version\n\nIf you prefer I have a video where I walkthrough all the workshop (aussi disponible en francais!).\n\n[![YouTube](https://github.com/FBoucher/Not-a-Dog-Workshop/raw/master/medias/YouTubeThubnail.png)](https://youtu.be/ic-eP-gtFSo)\n\n## Contributing\n\nIf you find a bug or would like to add a feature, check out those resources:\n\n- To see the current work in progress :[GLO boards](https://app.gitkraken.com/glo/board/XQPiybIcWAAP_ToG)\n\n- Watch the behind the scene [videos](https://github.com/FBoucher/stream-projects#not-a-dog-workshop), and learn how this project was created.\n\nCheck out our [Code of Conduct](CODE_OF_CONDUCT.md) and [Contributing](CONTRIBUTING.md) docs. This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.  Contributions of any kind welcome!\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore --\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/smabuk\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2011834?v=4\" width=\"100px;\" alt=\"Simon Brookes\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSimon Brookes\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/FBoucher/Not-a-Dog-Workshop/commits?author=smabuk\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://cloud5mins.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/2404846?v=4\" width=\"100px;\" alt=\"Frank Boucher\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFrank Boucher\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/FBoucher/Not-a-Dog-Workshop/commits?author=fboucher\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/FBoucher/Not-a-Dog-Workshop/commits?author=fboucher\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#video-fboucher\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffboucher%2Fnot-a-dog-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffboucher%2Fnot-a-dog-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffboucher%2Fnot-a-dog-workshop/lists"}