Source: https://github.com/MicrosoftLearning/mslearn-ai-vision
1. Azure AI services multi-service account - Create Azure resource.
Detect Faces:
Detect Faces:
C# Code:
using System;
using System.Drawing;
using Microsoft.Extensions.Configuration;
using Azure;
using System.IO;
// dotnet add package Azure.AI.Vision.ImageAnalysis -v 1.0.0-beta.3
// Import namespaces
using Azure.AI.Vision.ImageAnalysis;
namespace detect_people
{
class Program
{
static void Main(string[] args)
{
try
{
// Get config settings from AppSettings
IConfigurationBuilder builder =
new ConfigurationBuilder().AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
string aiSvcEndpoint =
"https://sreemultiserviceaccount1.cognitiveservices.azure.com/";
//configuration["AIServicesEndpoint"];
string aiSvcKey = "2D9XtWQ0Yfuw3AAAEACOGFMV1"; //configuration["AIServiceKey"];
// Get image
string imageFile = "images/people.jpg";
if (args.Length > 0)
{
imageFile = args[0];
}
// Authenticate Azure AI Vision client
ImageAnalysisClient cvClient = new ImageAnalysisClient(
new Uri(aiSvcEndpoint),
new AzureKeyCredential(aiSvcKey));
// Analyze image
AnalyzeImage(imageFile, cvClient);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void AnalyzeImage(string imageFile, ImageAnalysisClient client)
{
Console.WriteLine($"\nAnalyzing {imageFile} \n");
// Use a file stream to pass the image data to the analyze call
using FileStream stream = new FileStream(imageFile, FileMode.Open);
// Get result with specified features to be retrieved (PEOPLE)
ImageAnalysisResult result = client.Analyze(
BinaryData.FromStream(stream),
VisualFeatures.People);
// Close the stream
stream.Close();
// Get people in the image
if (result.People.Values.Count > 0)
{
Console.WriteLine($" People:");
// Prepare image for drawing
System.Drawing.Image image = System.Drawing.Image.FromFile(imageFile);
Graphics graphics = Graphics.FromImage(image);
Pen pen = new Pen(Color.Cyan, 3);
// Draw bounding box around detected people
foreach (DetectedPerson person in result.People.Values)
{
if (person.Confidence > 0.5)
{
// Draw object bounding box
var r = person.BoundingBox;
Rectangle rect = new Rectangle(r.X, r.Y, r.Width, r.Height);
graphics.DrawRectangle(pen, rect);
}
// Return the confidence of the person detected
Console.WriteLine($" Bounding box {person.BoundingBox.ToString()},
Confidence: {person.Confidence:F2}");
}
// Save annotated image
String output_file = "people.jpg";
image.Save(output_file);
Console.WriteLine(" Results saved in " + output_file + "\n");
}
}
}
}
C# Code:
using System;
using System.IO;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
// dotnet add package Azure.AI.Vision.Face -v 1.0.0-beta.2
// Import namespaces
using Azure;
using Azure.AI.Vision.Face;
namespace analyze_faces
{
class Program
{
private static FaceClient faceClient;
static async Task Main(string[] args)
{
try
{
// Get config settings from AppSettings
IConfigurationBuilder builder =
new ConfigurationBuilder().AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
string cogSvcEndpoint =
"https://sreemultiserviceaccount1.cognitiveservices.azure.com/";
//configuration["AIServicesEndpoint"];
string cogSvcKey = "2D9XtWQ0Yfuw3AAAEACOGFMV1"; //configuration["AIServiceKey"];
// Authenticate Face client
faceClient = new FaceClient(
new Uri(cogSvcEndpoint),
new AzureKeyCredential(cogSvcKey));
// Menu for face functions
Console.WriteLine("1: Detect faces\nAny other key to quit");
Console.WriteLine("Enter a number:");
string command = Console.ReadLine();
switch (command)
{
case "1":
await DetectFaces("images/people.jpg");
break;
default:
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static async Task DetectFaces(string imageFile)
{
Console.WriteLine($"Detecting faces in {imageFile}");
// Specify facial features to be retrieved
FaceAttributeType[] features = new FaceAttributeType[]
{
FaceAttributeType.Detection03.HeadPose,
FaceAttributeType.Detection03.Blur,
FaceAttributeType.Detection03.Mask
};
// Get faces
using (var imageData = File.OpenRead(imageFile))
{
var response = await faceClient.DetectAsync(
BinaryData.FromStream(imageData),
FaceDetectionModel.Detection03,
FaceRecognitionModel.Recognition04,
returnFaceId: false,
returnFaceAttributes: features);
IReadOnlyList<FaceDetectionResult> detected_faces = response.Value;
if (detected_faces.Count() > 0)
{
Console.WriteLine($"{detected_faces.Count()} faces detected.");
// Prepare image for drawing
Image image = Image.FromFile(imageFile);
Graphics graphics = Graphics.FromImage(image);
Pen pen = new Pen(Color.LightGreen, 3);
Font font = new Font("Arial", 4);
SolidBrush brush = new SolidBrush(Color.White);
int faceCount = 0;
// Draw and annotate each face
foreach (var face in detected_faces)
{
faceCount++;
Console.WriteLine($"\nFace number {faceCount}");
// Get face properties
Console.WriteLine($" - Head Pose (Yaw): {face.FaceAttributes.HeadPose.Yaw}");
Console.WriteLine($" - Head Pose (Pitch):
{face.FaceAttributes.HeadPose.Pitch}");
Console.WriteLine($" - Head Pose (Roll):
{face.FaceAttributes.HeadPose.Roll}");
Console.WriteLine($" - Blur: {face.FaceAttributes.Blur.BlurLevel}");
Console.WriteLine($" - Mask: {face.FaceAttributes.Mask.Type}");
// Draw and annotate face
var r = face.FaceRectangle;
Rectangle rect = new Rectangle(r.Left, r.Top, r.Width, r.Height);
graphics.DrawRectangle(pen, rect);
string annotation = $"Face number {faceCount}";
graphics.DrawString(annotation, font, brush, r.Left, r.Top);
}
// Save annotated image
String output_file = "detected_faces.jpg";
image.Save(output_file);
Console.WriteLine(" Results saved in " + output_file);
}
}
}
}
}
OutPut:
Detect Faces:
Python Code:
OutPut:
from dotenv import load_dotenv
import os
from PIL import Image, ImageDraw
import sys
from matplotlib import pyplot as plt
import numpy as np
#pip install azure-ai-vision-imageanalysis==1.0.0b3
# import namespaces
from azure.ai.vision.imageanalysis import ImageAnalysisClient
from azure.ai.vision.imageanalysis.models import VisualFeatures
from azure.core.credentials import AzureKeyCredential
def main():
global cv_client
try:
# Get Configuration Settings
load_dotenv()
ai_endpoint = 'https://sreemultiserviceaccount1.cognitiveservices.azure.com/'
#os.getenv('AI_SERVICE_ENDPOINT')
ai_key = '2D9XtWQ0Yfuw3AAAEACOGFMV1' #os.getenv('AI_SERVICE_KEY')
# Get image
image_file = 'images/people.jpg'
if len(sys.argv) > 1:
image_file = sys.argv[1]
with open(image_file, "rb") as f:
image_data = f.read()
# Authenticate Azure AI Vision client
cv_client = ImageAnalysisClient(
endpoint=ai_endpoint,
credential=AzureKeyCredential(ai_key)
)
# Analyze image
AnalyzeImage(image_file, image_data, cv_client)
except Exception as ex:
print(ex)
def AnalyzeImage(filename, image_data, cv_client):
print('\nAnalyzing ', filename)
# Get result with specified features to be retrieved (PEOPLE)
result = cv_client.analyze(
image_data=image_data,
visual_features=[
VisualFeatures.PEOPLE],
)
# Identify people in the image
if result.people is not None:
print("\nPeople in image:")
# Prepare image for drawing
image = Image.open(filename)
fig = plt.figure(figsize=(image.width/100, image.height/100))
plt.axis('off')
draw = ImageDraw.Draw(image)
color = 'cyan'
# Draw bounding box around detected people
for detected_people in result.people.list:
if(detected_people.confidence > 0.5):
# Draw object bounding box
r = detected_people.bounding_box
bounding_box = ((r.x, r.y), (r.x + r.width, r.y + r.height))
draw.rectangle(bounding_box, outline=color, width=3)
# Return the confidence of the person detected
print(" {} (confidence: {:.2f}%)".format(detected_people.bounding_box,
detected_people.confidence * 100))
# Save annotated image
plt.imshow(image)
plt.tight_layout(pad=0)
outputfile = 'people.jpg'
fig.savefig(outputfile)
print(' Results saved in', outputfile)
if __name__ == "__main__":
main()
OutPut:
Analyze Faces:
Python Code:
from dotenv import load_dotenv
import os
from PIL import Image, ImageDraw
from matplotlib import pyplot as plt
#pip install azure-cognitiveservices-vision-face==0.6.0
# Import namespaces
from azure.cognitiveservices.vision.face import FaceClient
from azure.cognitiveservices.vision.face.models import FaceAttributeType
from msrest.authentication import CognitiveServicesCredentials
def main():
global face_client
try:
# Get Configuration Settings
load_dotenv()
# cog_endpoint = os.getenv('AI_SERVICE_ENDPOINT')
# cog_key = os.getenv('AI_SERVICE_KEY')
cog_endpoint = 'https://sreemultiserviceaccount1.cognitiveservices.azure.com/'
cog_key ='2D9XtWQ0Yfuw3AAAEACOGFMV1'
# Authenticate Face client
credentials = CognitiveServicesCredentials(cog_key)
face_client = FaceClient(cog_endpoint, credentials)
# Menu for face functions
print('1: Detect faces\nAny other key to quit')
command = input('Enter a number:')
if command == '1':
DetectFaces(os.path.join('images','people.jpg'))
except Exception as ex:
print(ex)
def DetectFaces(image_file):
print('Detecting faces in', image_file)
# Specify facial features to be retrieved
features = [
FaceAttributeType.occlusion,
FaceAttributeType.blur,
FaceAttributeType.glasses
]
# Get faces
with open(image_file, mode="rb") as image_data:
detected_faces = face_client.face.detect_with_stream(
image=image_data,
return_face_attributes=features,
return_face_id=False
)
if len(detected_faces) > 0:
print(len(detected_faces), 'faces detected.')
# Prepare image for drawing
fig = plt.figure(figsize=(8, 6))
plt.axis('off')
image = Image.open(image_file)
draw = ImageDraw.Draw(image)
color = 'lightgreen'
face_count = 0
# Draw and annotate each face
for face in detected_faces:
# Get face properties
face_count += 1
print('\nFace number {}'.format(face_count))
detected_attributes = face.face_attributes.as_dict()
if 'blur' in detected_attributes:
print(' - Blur:')
for blur_name in detected_attributes['blur']:
print(' - {}: {}'.format(blur_name, detected_attributes['blur'][blur_name]))
if 'occlusion' in detected_attributes:
print(' - Occlusion:')
for occlusion_name in detected_attributes['occlusion']:
print(' - {}: {}'.format(occlusion_name,
detected_attributes['occlusion'][occlusion_name]))
if 'glasses' in detected_attributes:
print(' - Glasses: {}'.format(detected_attributes['glasses']))
# Draw and annotate face
r = face.face_rectangle
bounding_box = ((r.left, r.top), (r.left + r.width, r.top + r.height))
draw.rectangle(bounding_box, outline=color, width=5)
annotation = 'Face number {}'.format(face_count)
plt.annotate(annotation, (r.left, r.top), backgroundcolor=color)
# Save annotated image
plt.imshow(image)
outputfile = 'detected_faces.jpg'
fig.savefig(outputfile)
print('\nResults saved in', outputfile)
if __name__ == "__main__":
main()
Crisp camera output improves daily usage dazzcam providing sharp details balanced exposure and natural color rendering that enhances both photos and videos making it ideal for social media creators and casual users seeking quality visuals without any complicated settings required
ReplyDelete