Python এর জন্য ফেস ল্যান্ডমার্ক সনাক্তকরণ গাইড

MediaPipe ফেস ল্যান্ডমার্কার টাস্ক আপনাকে ছবি এবং ভিডিওতে মুখের ল্যান্ডমার্ক এবং মুখের অভিব্যক্তি সনাক্ত করতে দেয়। আপনি মানুষের মুখের অভিব্যক্তি সনাক্ত করতে এবং একটি ভার্চুয়াল অবতার তৈরি করতে মুখের ফিল্টার এবং প্রভাব প্রয়োগ করতে এই কাজটি ব্যবহার করতে পারেন। এই টাস্কটি মেশিন লার্নিং (ML) মডেলগুলি ব্যবহার করে যা একক চিত্র বা একটি অবিচ্ছিন্ন চিত্রের সাথে কাজ করতে পারে। টাস্কটি 3-মাত্রিক মুখের ল্যান্ডমার্ক, ব্লেন্ডশেপ স্কোর (মুখের অভিব্যক্তির প্রতিনিধিত্বকারী সহগ) রিয়েল-টাইমে মুখের উপরিভাগের বিস্তারিত অনুমান করতে এবং ইফেক্ট রেন্ডারিংয়ের জন্য প্রয়োজনীয় রূপান্তরগুলি সম্পাদন করার জন্য রূপান্তর ম্যাট্রিক্স আউটপুট করে।

এই নির্দেশাবলীতে বর্ণিত কোড নমুনা GitHub এ উপলব্ধ। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

ফেস ল্যান্ডমার্কারের উদাহরণ কোডটি আপনার রেফারেন্সের জন্য পাইথনে এই টাস্কটির সম্পূর্ণ বাস্তবায়ন প্রদান করে। এই কোডটি আপনাকে এই কাজটি পরীক্ষা করতে এবং আপনার নিজের মুখের ল্যান্ডমার্কার তৈরি করা শুরু করতে সহায়তা করে৷ আপনি শুধুমাত্র আপনার ওয়েব ব্রাউজার ব্যবহার করে ফেস ল্যান্ডমার্কার উদাহরণ কোড দেখতে, চালাতে এবং সম্পাদনা করতে পারেন।

আপনি যদি রাস্পবেরি পাই এর জন্য ফেস ল্যান্ডমার্কার প্রয়োগ করেন, তাহলে রাস্পবেরি পাই উদাহরণ অ্যাপটি পড়ুন।

সেটআপ

এই বিভাগে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট এবং কোড প্রোজেক্ট সেট আপ করার জন্য বিশেষভাবে ফেস ল্যান্ডমার্কার ব্যবহার করার জন্য মূল ধাপগুলি বর্ণনা করে। প্ল্যাটফর্ম সংস্করণ প্রয়োজনীয়তা সহ MediaPipe কার্যগুলি ব্যবহার করার জন্য আপনার বিকাশের পরিবেশ সেট আপ করার বিষয়ে সাধারণ তথ্যের জন্য, পাইথনের জন্য সেটআপ নির্দেশিকা দেখুন।

প্যাকেজ

MediaPipe Face Landmarker টাস্কের জন্য mediapipe PyPI প্যাকেজ প্রয়োজন। আপনি নিম্নলিখিতগুলির সাথে এই নির্ভরতাগুলি ইনস্টল এবং আমদানি করতে পারেন:

$ python -m pip install mediapipe

আমদানি

ফেস ল্যান্ডমার্কার টাস্ক ফাংশন অ্যাক্সেস করতে নিম্নলিখিত ক্লাসগুলি আমদানি করুন:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

মডেল

MediaPipe Face Landmarker টাস্কের জন্য একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই টাস্কের সাথে সামঞ্জস্যপূর্ণ। ফেস ল্যান্ডমার্কারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

মডেল নির্বাচন করুন এবং ডাউনলোড করুন, এবং তারপর এটি একটি স্থানীয় ডিরেক্টরিতে সংরক্ষণ করুন:

model_path = '/absolute/path/to/face_landmarker.task'

ব্যবহার করার জন্য মডেলের পাথ নির্দিষ্ট করতে BaseOptions অবজেক্ট model_asset_path প্যারামিটার ব্যবহার করুন। একটি কোড উদাহরণের জন্য, পরবর্তী বিভাগ দেখুন।

টাস্ক তৈরি করুন

MediaPipe Face Landmarker টাস্কটি সেট আপ করতে create_from_options ফাংশন ব্যবহার করে। create_from_options ফাংশন কনফিগারেশন অপশন পরিচালনার জন্য মান গ্রহণ করে। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি এই কাজটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা প্রদর্শন করে।

এই নমুনাগুলি ছবি, ভিডিও ফাইল এবং লাইভ স্ট্রিমের জন্য টাস্ক নির্মাণের বিভিন্নতাও দেখায়।

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = FaceLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.IMAGE)

with FaceLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face landmarker instance with the video mode:
options = FaceLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.VIDEO)

with FaceLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

সরাসরি সম্প্রচার

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceLandmarker = mp.tasks.vision.FaceLandmarker
FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions
FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face landmarker instance with the live stream mode:
def print_result(result: FaceLandmarkerResult, output_image: mp.Image, timestamp_ms: int):
    print('face landmarker result: {}'.format(result))

options = FaceLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)

with FaceLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

একটি চিত্রের সাথে ব্যবহারের জন্য একটি ফেস ল্যান্ডমার্কার তৈরি করার সম্পূর্ণ উদাহরণের জন্য, কোড উদাহরণটি দেখুন।

কনফিগারেশন অপশন

এই টাস্কে পাইথন অ্যাপ্লিকেশনের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
running_mode টাস্কের জন্য চলমান মোড সেট করে। তিনটি মোড আছে:

IMAGE: একক ইমেজ ইনপুট জন্য মোড.

ভিডিও: একটি ভিডিওর ডিকোড করা ফ্রেমের মোড।

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_faces FaceLandmarker দ্বারা শনাক্ত করা যায় এমন মুখের সর্বাধিক সংখ্যা৷ smoothing শুধুমাত্র প্রয়োগ করা হয় যখন num_faces 1 এ সেট করা হয়। Integer > 0 1
min_face_detection_confidence মুখ শনাক্তকরণ সফল বলে বিবেচিত হওয়ার জন্য সর্বনিম্ন আত্মবিশ্বাসের স্কোর৷ Float [0.0,1.0] 0.5
min_face_presence_confidence মুখের ল্যান্ডমার্ক সনাক্তকরণে মুখ উপস্থিতি স্কোরের সর্বনিম্ন আত্মবিশ্বাসের স্কোর। Float [0.0,1.0] 0.5
min_tracking_confidence ফেস ট্র্যাকিংয়ের জন্য ন্যূনতম আত্মবিশ্বাসের স্কোর সফল বলে বিবেচিত হবে। Float [0.0,1.0] 0.5
output_face_blendshapes ফেস ল্যান্ডমার্কার ফেস ব্লেন্ডশেপ আউটপুট করে কিনা। 3D ফেস মডেল রেন্ডার করার জন্য ফেস ব্লেন্ডশেপ ব্যবহার করা হয়। Boolean False
output_facial_transformation_matrixes ফেসল্যান্ডমার্কার ফেসিয়াল ট্রান্সফরমেশন ম্যাট্রিক্স আউটপুট করে কিনা। ফেসল্যান্ডমার্কার ম্যাট্রিক্স ব্যবহার করে মুখের ল্যান্ডমার্কগুলিকে ক্যানোনিকাল ফেস মডেল থেকে শনাক্ত করা ফেসে রূপান্তর করতে, যাতে ব্যবহারকারীরা সনাক্ত করা ল্যান্ডমার্কগুলিতে প্রভাব প্রয়োগ করতে পারে৷ Boolean False
result_callback FaceLandmarker যখন লাইভ স্ট্রিম মোডে থাকে তখন ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ল্যান্ডমার্কারের ফলাফল পেতে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ ResultListener N/A

ডেটা প্রস্তুত করুন

একটি ইমেজ ফাইল বা একটি নম্পি অ্যারে হিসাবে আপনার ইনপুট প্রস্তুত করুন, তারপর এটিকে mediapipe.Image ইমেজ অবজেক্টে রূপান্তর করুন। যদি আপনার ইনপুট একটি ভিডিও ফাইল বা ওয়েবক্যাম থেকে লাইভ স্ট্রিম হয়, তাহলে আপনি একটি বহিরাগত লাইব্রেরি যেমন OpenCV ব্যবহার করতে পারেন আপনার ইনপুট ফ্রেমগুলিকে নম্পি অ্যারে হিসাবে লোড করতে৷

ছবি

import mediapipe as mp

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
    

ভিডিও

import mediapipe as mp

# Use OpenCV’s VideoCapture to load the input video.

# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You’ll need it to calculate the timestamp for each frame.

# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

সরাসরি সম্প্রচার

import mediapipe as mp

# Use OpenCV’s VideoCapture to start capturing from the webcam.

# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

টাস্ক চালান

ফেস ল্যান্ডমার্কার অনুমানগুলিকে ট্রিগার করতে detect , detect_for_video এবং detect_async ফাংশন ব্যবহার করে। মুখের ল্যান্ডমার্কিংয়ের জন্য, এতে ইনপুট ডেটা প্রিপ্রসেস করা এবং ছবিতে মুখ সনাক্ত করা জড়িত।

নিম্নলিখিত কোডটি প্রদর্শন করে কিভাবে টাস্ক মডেলের সাথে প্রক্রিয়াকরণ চালানো যায়।

ছবি

# Perform face landmarking on the provided single image.
# The face landmarker must be created with the image mode.
face_landmarker_result = landmarker.detect(mp_image)
    

ভিডিও

# Perform face landmarking on the provided single image.
# The face landmarker must be created with the video mode.
face_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
    

সরাসরি সম্প্রচার

# Send live image data to perform face landmarking.
# The results are accessible via the `result_callback` provided in
# the `FaceLandmarkerOptions` object.
# The face landmarker must be created with the live stream mode.
landmarker.detect_async(mp_image, frame_timestamp_ms)
    

নিম্নলিখিত নোট করুন:

  • ভিডিও মোড বা লাইভ স্ট্রিম মোডে চলাকালীন, ইনপুট ফ্রেমের টাইমস্ট্যাম্প ফেস ল্যান্ডমার্কার টাস্ক প্রদান করুন।
  • ইমেজ বা ভিডিও মডেলে চলাকালীন, ফেস ল্যান্ডমার্কার টাস্ক বর্তমান থ্রেডটিকে ব্লক করে যতক্ষণ না এটি ইনপুট ইমেজ বা ফ্রেমের প্রক্রিয়াকরণ শেষ করে।
  • লাইভ স্ট্রিম মোডে চলাকালীন, ফেস ল্যান্ডমার্কার টাস্ক অবিলম্বে ফিরে আসে এবং বর্তমান থ্রেডটিকে ব্লক করে না। এটি প্রতিবার একটি ইনপুট ফ্রেম প্রক্রিয়াকরণ শেষ করার সময় সনাক্তকরণ ফলাফল সহ ফলাফল শ্রোতাকে আহ্বান করবে। যদি সনাক্তকরণ ফাংশনটি কল করা হয় যখন ফেস ল্যান্ডমার্কার টাস্কটি অন্য ফ্রেম প্রক্রিয়াকরণে ব্যস্ত থাকে, টাস্কটি নতুন ইনপুট ফ্রেমটিকে উপেক্ষা করবে।

একটি চিত্রে একটি ফেস ল্যান্ডমার্কার চালানোর একটি সম্পূর্ণ উদাহরণের জন্য, বিশদ বিবরণের জন্য কোড উদাহরণটি দেখুন।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

ফেস ল্যান্ডমার্কার প্রতিটি সনাক্তকরণ চালানোর জন্য একটি FaceLandmarkerResult অবজেক্ট প্রদান করে। ফলাফল বস্তুতে প্রতিটি সনাক্ত করা মুখের জন্য একটি ফেস মেশ রয়েছে, প্রতিটি মুখের ল্যান্ডমার্কের জন্য স্থানাঙ্ক সহ। ঐচ্ছিকভাবে, ফলাফল বস্তুতে ব্লেন্ডশেপও থাকতে পারে, যা মুখের অভিব্যক্তিকে নির্দেশ করে এবং সনাক্ত করা ল্যান্ডমার্কে মুখের প্রভাব প্রয়োগ করতে একটি মুখের রূপান্তর ম্যাট্রিক্স।

নিম্নলিখিত এই টাস্ক থেকে আউটপুট ডেটার একটি উদাহরণ দেখায়:

FaceLandmarkerResult:
  face_landmarks:
    NormalizedLandmark #0:
      x: 0.5971359014511108
      y: 0.485361784696579
      z: -0.038440968841314316
    NormalizedLandmark #1:
      x: 0.3302789330482483
      y: 0.29289937019348145
      z: -0.09489090740680695
    ... (478 landmarks for each face)
  face_blendshapes:
    browDownLeft: 0.8296722769737244
    browDownRight: 0.8096957206726074
    browInnerUp: 0.00035583582939580083
    browOuterUpLeft: 0.00035752105759456754
    ... (52 blendshapes for each face)
  facial_transformation_matrixes:
    [9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
    [1.66496094e-02,  9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
    ...

নিম্নলিখিত চিত্রটি টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়:

ফেস ল্যান্ডমার্কার উদাহরণ কোড দেখায় কিভাবে টাস্ক থেকে প্রত্যাবর্তিত ফলাফল প্রদর্শন করতে হয়, বিস্তারিত জানার জন্য কোড উদাহরণ দেখুন।