পাইথনের সাথে ভিডিও ইন্টেলিজেন্স API ব্যবহার করা

১. সংক্ষিপ্ত বিবরণ

cfaa6ffa7bc5ca70.png

ভিডিও ইন্টেলিজেন্স এপিআই আপনাকে আপনার অ্যাপ্লিকেশনগুলির অংশ হিসাবে গুগল ভিডিও বিশ্লেষণ প্রযুক্তি ব্যবহার করতে সক্ষম করে।

এই ল্যাবে, আপনারা পাইথনের সাথে ভিডিও ইন্টেলিজেন্স এপিআই (Video Intelligence API) ব্যবহারের উপর মনোযোগ দেবেন।

আপনি যা শিখবেন

  • আপনার পরিবেশ কীভাবে সেট আপ করবেন
  • পাইথন কীভাবে সেট আপ করবেন
  • শট পরিবর্তন কীভাবে শনাক্ত করবেন
  • লেবেলগুলি কীভাবে সনাক্ত করবেন
  • আপত্তিকর বিষয়বস্তু কীভাবে শনাক্ত করবেন
  • বক্তৃতা প্রতিলিপি করার উপায়
  • কীভাবে টেক্সট সনাক্ত এবং ট্র্যাক করবেন
  • বস্তু সনাক্ত এবং ট্র্যাক করার উপায়
  • লোগো কীভাবে সনাক্ত এবং ট্র্যাক করবেন

আপনার যা যা লাগবে

জরিপ

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

পাইথন নিয়ে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। 853e55310c205094.png .

55efc1aaa7a4d3ad.png

আপনি যদি প্রথমবারের মতো ক্লাউড শেল চালু করেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন আপনার সামনে আসবে। যদি একটি মধ্যবর্তী স্ক্রিন আসে, তাহলে 'চালিয়ে যান' (Continue) এ ক্লিক করুন।

9c92662c6a846a5c.png

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

9f0e51b578fecce5.png

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

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. পরিবেশ সেটআপ

ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার শুরু করার আগে, এপিআইটি সক্রিয় করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

gcloud services enable videointelligence.googleapis.com

আপনার এইরকম কিছু দেখা উচিত:

Operation "operations/..." finished successfully.

এখন, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করতে পারবেন!

আপনার হোম ডিরেক্টরিতে যান:

cd ~

নির্ভরতাগুলিকে বিচ্ছিন্ন করতে একটি পাইথন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:

virtualenv venv-videointel

ভার্চুয়াল পরিবেশ সক্রিয় করুন:

source venv-videointel/bin/activate

IPython এবং Video Intelligence API ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন:

pip install ipython google-cloud-videointelligence

আপনার এইরকম কিছু দেখা উচিত:

...
Installing collected packages: ..., ipython, google-cloud-videointelligence
Successfully installed ... google-cloud-videointelligence-2.11.0 ...

এখন, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ক্লায়েন্ট লাইব্রেরিটি ব্যবহার করার জন্য প্রস্তুত!

পরবর্তী ধাপগুলোতে, আপনি IPython নামক একটি ইন্টারেক্টিভ পাইথন ইন্টারপ্রেটার ব্যবহার করবেন, যা আপনি আগের ধাপে ইনস্টল করেছিলেন। ক্লাউড শেলে ipython রান করে একটি সেশন শুরু করুন:

ipython

আপনার এইরকম কিছু দেখা উচিত:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

৪. নমুনা ভিডিও

আপনি ক্লাউড স্টোরেজে সংরক্ষিত বা ডেটা বাইট হিসাবে সরবরাহ করা ভিডিওগুলিতে টীকা যোগ করতে ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করতে পারেন।

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

afe058b29c480d42.png

প্রস্তুত, স্থির, শুরু!

৫. শট পরিবর্তন শনাক্ত করুন

আপনি একটি ভিডিওতে শট পরিবর্তন শনাক্ত করতে ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করতে পারেন। শট হলো ভিডিওর একটি অংশ, যা দৃশ্যগত ধারাবাহিকতাযুক্ত একাধিক ফ্রেমের সমষ্টি।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from typing import cast

from google.cloud import videointelligence_v1 as vi


def detect_shot_changes(video_uri: str) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.SHOT_CHANGE_DETECTION]
    request = vi.AnnotateVideoRequest(input_uri=video_uri, features=features)

    print(f'Processing video: "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

ভিডিওটি বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"

results = detect_shot_changes(video_uri)

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

ভিডিও শটগুলো প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_video_shots(results: vi.VideoAnnotationResults):
    shots = results.shot_annotations
    print(f" Video shots: {len(shots)} ".center(40, "-"))
    for i, shot in enumerate(shots):
        t1 = shot.start_time_offset.total_seconds()
        t2 = shot.end_time_offset.total_seconds()
        print(f"{i+1:>3} | {t1:7.3f} | {t2:7.3f}")
        

ফাংশনটি কল করুন:

print_video_shots(results)

আপনার এইরকম কিছু দেখা উচিত:

----------- Video shots: 34 ------------
  1 |   0.000 |  12.880
  2 |  12.920 |  21.680
  3 |  21.720 |  27.880
...
 32 | 135.160 | 138.320
 33 | 138.360 | 146.200
 34 | 146.240 | 162.520

যদি আপনি প্রতিটি শটের মাঝের ফ্রেমটি বের করে সেগুলোকে ফ্রেমের দেয়ালে সাজান, তাহলে আপনি ভিডিওটির একটি ভিজ্যুয়াল সারাংশ তৈরি করতে পারবেন:

25bbffa59f7ed71d.png

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে শট পরিবর্তন শনাক্ত করতে সক্ষম হয়েছেন। শট পরিবর্তন শনাক্তকরণ সম্পর্কে আপনি আরও পড়তে পারেন।

৬. লেবেল শনাক্ত করুন

আপনি একটি ভিডিওতে লেবেল শনাক্ত করতে ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করতে পারেন। লেবেলগুলো ভিডিওর দৃশ্যমান বিষয়বস্তুর ওপর ভিত্তি করে সেটির বর্ণনা দেয়।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def detect_labels(
    video_uri: str,
    mode: vi.LabelDetectionMode,
    segments: Optional[Sequence[vi.VideoSegment]] = None,
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.LABEL_DETECTION]
    config = vi.LabelDetectionConfig(label_detection_mode=mode)
    context = vi.VideoContext(segments=segments, label_detection_config=config)
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

ভিডিওটির প্রথম ৩৭ সেকেন্ড বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
mode = vi.LabelDetectionMode.SHOT_MODE
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=0),
    end_time_offset=timedelta(seconds=37),
)

results = detect_labels(video_uri, mode, [segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

ভিডিও লেভেলে লেবেলগুলো প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_video_labels(results: vi.VideoAnnotationResults):
    labels = sorted_by_first_segment_confidence(results.segment_label_annotations)

    print(f" Video labels: {len(labels)} ".center(80, "-"))
    for label in labels:
        categories = category_entities_to_str(label.category_entities)
        for segment in label.segments:
            confidence = segment.confidence
            t1 = segment.segment.start_time_offset.total_seconds()
            t2 = segment.segment.end_time_offset.total_seconds()
            print(
                f"{confidence:4.0%}",
                f"{t1:7.3f}",
                f"{t2:7.3f}",
                f"{label.entity.description}{categories}",
                sep=" | ",
            )


def sorted_by_first_segment_confidence(
    labels: Sequence[vi.LabelAnnotation],
) -> Sequence[vi.LabelAnnotation]:
    def first_segment_confidence(label: vi.LabelAnnotation) -> float:
        return label.segments[0].confidence

    return sorted(labels, key=first_segment_confidence, reverse=True)


def category_entities_to_str(category_entities: Sequence[vi.Entity]) -> str:
    if not category_entities:
        return ""
    entities = ", ".join([e.description for e in category_entities])
    return f" ({entities})"
    

ফাংশনটি কল করুন:

print_video_labels(results)

আপনার এইরকম কিছু দেখা উচিত:

------------------------------- Video labels: 10 -------------------------------
 96% |   0.000 |  36.960 | nature
 74% |   0.000 |  36.960 | vegetation
 59% |   0.000 |  36.960 | tree (plant)
 56% |   0.000 |  36.960 | forest (geographical feature)
 49% |   0.000 |  36.960 | leaf (plant)
 43% |   0.000 |  36.960 | flora (plant)
 38% |   0.000 |  36.960 | nature reserve (geographical feature)
 38% |   0.000 |  36.960 | woodland (forest)
 35% |   0.000 |  36.960 | water resources (water)
 32% |   0.000 |  36.960 | sunlight (light)

এই ভিডিও-স্তরের লেবেলগুলোর জন্য আপনি বুঝতে পারবেন যে ভিডিওটির শুরুটা মূলত প্রকৃতি ও গাছপালা নিয়ে।

শট লেভেলে লেবেলগুলো প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_shot_labels(results: vi.VideoAnnotationResults):
    labels = sorted_by_first_segment_start_and_confidence(
        results.shot_label_annotations
    )

    print(f" Shot labels: {len(labels)} ".center(80, "-"))
    for label in labels:
        categories = category_entities_to_str(label.category_entities)
        print(f"{label.entity.description}{categories}")
        for segment in label.segments:
            confidence = segment.confidence
            t1 = segment.segment.start_time_offset.total_seconds()
            t2 = segment.segment.end_time_offset.total_seconds()
            print(f"{confidence:4.0%} | {t1:7.3f} | {t2:7.3f}")


def sorted_by_first_segment_start_and_confidence(
    labels: Sequence[vi.LabelAnnotation],
) -> Sequence[vi.LabelAnnotation]:
    def first_segment_start_and_confidence(label: vi.LabelAnnotation):
        first_segment = label.segments[0]
        ms = first_segment.segment.start_time_offset.total_seconds()
        return (ms, -first_segment.confidence)

    return sorted(labels, key=first_segment_start_and_confidence)
    

ফাংশনটি কল করুন:

print_shot_labels(results)

আপনার এইরকম কিছু দেখা উচিত:

------------------------------- Shot labels: 29 --------------------------------
planet (astronomical object)
 83% |   0.000 |  12.880
earth (planet)
 53% |   0.000 |  12.880
water resources (water)
 43% |   0.000 |  12.880
aerial photography (photography)
 43% |   0.000 |  12.880
vegetation
 32% |   0.000 |  12.880
 92% |  12.920 |  21.680
 83% |  21.720 |  27.880
 77% |  27.920 |  31.800
 76% |  31.840 |  34.720
...
butterfly (insect, animal)
 84% |  34.760 |  36.960
...

এই শট-স্তরের লেবেলগুলোর জন্য আপনি বুঝতে পারবেন যে ভিডিওটি একটি গ্রহের (সম্ভবত পৃথিবী) শট দিয়ে শুরু হয়, 34.760-36.960s শটে একটি প্রজাপতি আছে,...

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে লেবেল ডিটেকশন করতে সক্ষম হয়েছেন। আপনি লেবেল ডিটেকশন সম্পর্কে আরও পড়তে পারেন।

৭. আপত্তিকর বিষয়বস্তু শনাক্ত করুন

আপনি একটি ভিডিওতে আপত্তিকর বিষয়বস্তু শনাক্ত করতে ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করতে পারেন। আপত্তিকর বিষয়বস্তু হলো প্রাপ্তবয়স্কদের জন্য তৈরি এমন বিষয়বস্তু যা সাধারণত ১৮ বছরের কম বয়সীদের জন্য অনুপযুক্ত এবং এর মধ্যে নগ্নতা, যৌন কার্যকলাপ এবং পর্নোগ্রাফি অন্তর্ভুক্ত, তবে এটি কেবল এগুলোর মধ্যেই সীমাবদ্ধ নয়। শনাক্তকরণ শুধুমাত্র প্রতি-ফ্রেমের ভিজ্যুয়াল সংকেতের উপর ভিত্তি করে করা হয় (অডিও ব্যবহার করা হয় না)। প্রতিক্রিয়াটিতে VERY_UNLIKELY থেকে VERY_LIKELY পর্যন্ত সম্ভাবনার মান অন্তর্ভুক্ত থাকে।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def detect_explicit_content(
    video_uri: str,
    segments: Optional[Sequence[vi.VideoSegment]] = None,
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.EXPLICIT_CONTENT_DETECTION]
    context = vi.VideoContext(segments=segments)
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

ভিডিওটির প্রথম ১০ সেকেন্ড বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=0),
    end_time_offset=timedelta(seconds=10),
)

results = detect_explicit_content(video_uri, [segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

বিভিন্ন সম্ভাব্যতার সংখ্যা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_explicit_content(results: vi.VideoAnnotationResults):
    from collections import Counter

    frames = results.explicit_annotation.frames
    likelihood_counts = Counter([f.pornography_likelihood for f in frames])

    print(f" Explicit content frames: {len(frames)} ".center(40, "-"))
    for likelihood in vi.Likelihood:
        print(f"{likelihood.name:<22}: {likelihood_counts[likelihood]:>3}")
        

ফাংশনটি কল করুন:

print_explicit_content(results)

আপনার এইরকম কিছু দেখা উচিত:

----- Explicit content frames: 10 ------
LIKELIHOOD_UNSPECIFIED:   0
VERY_UNLIKELY         :  10
UNLIKELY              :   0
POSSIBLE              :   0
LIKELY                :   0
VERY_LIKELY           :   0

ফ্রেমের বিবরণ প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_frames(results: vi.VideoAnnotationResults, likelihood: vi.Likelihood):
    frames = results.explicit_annotation.frames
    frames = [f for f in frames if f.pornography_likelihood == likelihood]

    print(f" {likelihood.name} frames: {len(frames)} ".center(40, "-"))
    for frame in frames:
        print(frame.time_offset)
        

ফাংশনটি কল করুন:

print_frames(results, vi.Likelihood.VERY_UNLIKELY)

আপনার এইরকম কিছু দেখা উচিত:

------- VERY_UNLIKELY frames: 10 -------
0:00:00.365992
0:00:01.279206
0:00:02.268336
0:00:03.289253
0:00:04.400163
0:00:05.291547
0:00:06.449558
0:00:07.452751
0:00:08.577405
0:00:09.554514

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে আপত্তিকর বিষয়বস্তু শনাক্ত করতে সক্ষম হয়েছেন। আপনি আপত্তিকর বিষয়বস্তু শনাক্তকরণ সম্পর্কে আরও পড়তে পারেন।

৮. বক্তৃতা প্রতিলিপি করুন

আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে ভিডিওর বক্তব্যকে টেক্সটে রূপান্তর করতে পারেন।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def transcribe_speech(
    video_uri: str,
    language_code: str,
    segments: Optional[Sequence[vi.VideoSegment]] = None,
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.SPEECH_TRANSCRIPTION]
    config = vi.SpeechTranscriptionConfig(
        language_code=language_code,
        enable_automatic_punctuation=True,
    )
    context = vi.VideoContext(
        segments=segments,
        speech_transcription_config=config,
    )
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

এক মুহূর্ত সময় নিয়ে কোডটি মনোযোগ দিয়ে দেখুন, কীভাবে এটি একটি ভিডিও বিশ্লেষণ করতে এবং স্পিচ ট্রান্সক্রাইব করতে SPEECH_TRANSCRIPTION প্যারামিটারসহ annotate_video ক্লায়েন্ট লাইব্রেরি মেথডটি ব্যবহার করে।

ভিডিওটির ৫৫ থেকে ৮০ সেকেন্ড পর্যন্ত বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
language_code = "en-GB"
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=55),
    end_time_offset=timedelta(seconds=80),
)

results = transcribe_speech(video_uri, language_code, [segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

অনুলিখিত বক্তৃতা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_video_speech(results: vi.VideoAnnotationResults, min_confidence: float = 0.8):
    def keep_transcription(transcription: vi.SpeechTranscription) -> bool:
        return min_confidence <= transcription.alternatives[0].confidence

    transcriptions = results.speech_transcriptions
    transcriptions = [t for t in transcriptions if keep_transcription(t)]

    print(f" Speech transcriptions: {len(transcriptions)} ".center(80, "-"))
    for transcription in transcriptions:
        first_alternative = transcription.alternatives[0]
        confidence = first_alternative.confidence
        transcript = first_alternative.transcript
        print(f" {confidence:4.0%} | {transcript.strip()}")
        

ফাংশনটি কল করুন:

print_video_speech(results)

আপনার এইরকম কিছু দেখা উচিত:

--------------------------- Speech transcriptions: 2 ---------------------------
  91% | I was keenly aware of secret movements in the trees.
  92% | I looked into his large and lustrous eyes. They seem somehow to express his entire personality.

শনাক্তকৃত শব্দগুলোর তালিকা এবং তাদের টাইমস্ট্যাম্প প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_word_timestamps(
    results: vi.VideoAnnotationResults,
    min_confidence: float = 0.8,
):
    def keep_transcription(transcription: vi.SpeechTranscription) -> bool:
        return min_confidence <= transcription.alternatives[0].confidence

    transcriptions = results.speech_transcriptions
    transcriptions = [t for t in transcriptions if keep_transcription(t)]

    print(" Word timestamps ".center(80, "-"))
    for transcription in transcriptions:
        first_alternative = transcription.alternatives[0]
        confidence = first_alternative.confidence
        for word in first_alternative.words:
            t1 = word.start_time.total_seconds()
            t2 = word.end_time.total_seconds()
            word = word.word
            print(f"{confidence:4.0%} | {t1:7.3f} | {t2:7.3f} | {word}")
            

ফাংশনটি কল করুন:

print_word_timestamps(results)

আপনার এইরকম কিছু দেখা উচিত:

------------------------------- Word timestamps --------------------------------
 93% |  55.000 |  55.700 | I
 93% |  55.700 |  55.900 | was
 93% |  55.900 |  56.300 | keenly
 93% |  56.300 |  56.700 | aware
 93% |  56.700 |  56.900 | of
...
 94% |  76.900 |  77.400 | express
 94% |  77.400 |  77.600 | his
 94% |  77.600 |  78.200 | entire
 94% |  78.200 |  78.500 | personality.

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওর স্পিচ ট্রান্সক্রিপশন করতে সক্ষম হয়েছেন। আপনি অডিও ট্রান্সক্রিপশন সম্পর্কে আরও পড়তে পারেন।

৯. টেক্সট শনাক্ত ও ট্র্যাক করুন

আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে থাকা টেক্সট শনাক্ত ও ট্র্যাক করতে পারেন।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def detect_text(
    video_uri: str,
    language_hints: Optional[Sequence[str]] = None,
    segments: Optional[Sequence[vi.VideoSegment]] = None,
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.TEXT_DETECTION]
    config = vi.TextDetectionConfig(
        language_hints=language_hints,
    )
    context = vi.VideoContext(
        segments=segments,
        text_detection_config=config,
    )
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

১৩ থেকে ২৭ সেকেন্ড পর্যন্ত ভিডিওটি বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=13),
    end_time_offset=timedelta(seconds=27),
)

results = detect_text(video_uri, segments=[segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

শনাক্তকৃত টেক্সট প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_video_text(results: vi.VideoAnnotationResults, min_frames: int = 15):
    annotations = sorted_by_first_segment_end(results.text_annotations)

    print(" Detected text ".center(80, "-"))
    for annotation in annotations:
        for text_segment in annotation.segments:
            frames = len(text_segment.frames)
            if frames < min_frames:
                continue
            text = annotation.text
            confidence = text_segment.confidence
            start = text_segment.segment.start_time_offset
            seconds = segment_seconds(text_segment.segment)
            print(text)
            print(f"  {confidence:4.0%} | {start} + {seconds:.1f}s | {frames} fr.")


def sorted_by_first_segment_end(
    annotations: Sequence[vi.TextAnnotation],
) -> Sequence[vi.TextAnnotation]:
    def first_segment_end(annotation: vi.TextAnnotation) -> int:
        return annotation.segments[0].segment.end_time_offset.total_seconds()

    return sorted(annotations, key=first_segment_end)


def segment_seconds(segment: vi.VideoSegment) -> float:
    t1 = segment.start_time_offset.total_seconds()
    t2 = segment.end_time_offset.total_seconds()
    return t2 - t1
    

ফাংশনটি কল করুন:

print_video_text(results)

আপনার এইরকম কিছু দেখা উচিত:

-------------------------------- Detected text ---------------------------------
GOMBE NATIONAL PARK
   99% | 0:00:15.760000 + 1.7s | 15 fr.
TANZANIA
  100% | 0:00:15.760000 + 4.8s | 39 fr.
With words and narration by
  100% | 0:00:23.200000 + 3.6s | 31 fr.
Jane Goodall
   99% | 0:00:23.080000 + 3.8s | 33 fr.

শনাক্তকৃত টেক্সট ফ্রেম এবং বাউন্ডিং বক্সগুলোর তালিকা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_text_frames(results: vi.VideoAnnotationResults, contained_text: str):
    # Vertex order: top-left, top-right, bottom-right, bottom-left
    def box_top_left(box: vi.NormalizedBoundingPoly) -> str:
        tl = box.vertices[0]
        return f"({tl.x:.5f}, {tl.y:.5f})"

    def box_bottom_right(box: vi.NormalizedBoundingPoly) -> str:
        br = box.vertices[2]
        return f"({br.x:.5f}, {br.y:.5f})"

    annotations = results.text_annotations
    annotations = [a for a in annotations if contained_text in a.text]
    for annotation in annotations:
        print(f" {annotation.text} ".center(80, "-"))
        for text_segment in annotation.segments:
            for frame in text_segment.frames:
                frame_ms = frame.time_offset.total_seconds()
                box = frame.rotated_bounding_box
                print(
                    f"{frame_ms:>7.3f}",
                    box_top_left(box),
                    box_bottom_right(box),
                    sep=" | ",
                )
                

কোন ফ্রেমগুলোতে বর্ণনাকারীর নাম দেখা যাচ্ছে তা পরীক্ষা করতে ফাংশনটি কল করুন:

contained_text = "Goodall"
print_text_frames(results, contained_text)

আপনার এইরকম কিছু দেখা উচিত:

--------------------------------- Jane Goodall ---------------------------------
 23.080 | (0.39922, 0.49861) | (0.62752, 0.55888)
 23.200 | (0.38750, 0.49028) | (0.62692, 0.56306)
...
 26.800 | (0.36016, 0.49583) | (0.61094, 0.56048)
 26.920 | (0.45859, 0.49583) | (0.60365, 0.56174)

যদি আপনি সংশ্লিষ্ট ফ্রেমগুলোর উপরে বাউন্ডিং বক্সগুলো আঁকেন, তাহলে আপনি এইরকম কিছু পাবেন:

7e530d3d25f2f40e.gif

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে টেক্সট ডিটেকশন এবং ট্র্যাকিং করতে সক্ষম হয়েছেন। আপনি টেক্সট ডিটেকশন এবং ট্র্যাকিং সম্পর্কে আরও পড়তে পারেন।

১০. বস্তু সনাক্ত ও অনুসরণ করুন

আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে থাকা বস্তু শনাক্ত ও ট্র্যাক করতে পারেন।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def track_objects(
    video_uri: str, segments: Optional[Sequence[vi.VideoSegment]] = None
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.OBJECT_TRACKING]
    context = vi.VideoContext(segments=segments)
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

৯৮ থেকে ১১২ সেকেন্ড পর্যন্ত ভিডিওটি বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=98),
    end_time_offset=timedelta(seconds=112),
)

results = track_objects(video_uri, [segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

শনাক্তকৃত অবজেক্টগুলোর তালিকা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_detected_objects(
    results: vi.VideoAnnotationResults,
    min_confidence: float = 0.7,
):
    annotations = results.object_annotations
    annotations = [a for a in annotations if min_confidence <= a.confidence]

    print(
        f" Detected objects: {len(annotations)}"
        f" ({min_confidence:.0%} <= confidence) ".center(80, "-")
    )
    for annotation in annotations:
        entity = annotation.entity
        description = entity.description
        entity_id = entity.entity_id
        confidence = annotation.confidence
        t1 = annotation.segment.start_time_offset.total_seconds()
        t2 = annotation.segment.end_time_offset.total_seconds()
        frames = len(annotation.frames)
        print(
            f"{description:<22}",
            f"{entity_id:<10}",
            f"{confidence:4.0%}",
            f"{t1:>7.3f}",
            f"{t2:>7.3f}",
            f"{frames:>2} fr.",
            sep=" | ",
        )
        

ফাংশনটি কল করুন:

print_detected_objects(results)

আপনার এইরকম কিছু দেখা উচিত:

------------------- Detected objects: 3 (70% <= confidence) --------------------
insect                 | /m/03vt0   |  87% |  98.840 | 101.720 | 25 fr.
insect                 | /m/03vt0   |  71% | 108.440 | 111.080 | 23 fr.
butterfly              | /m/0cyf8   |  91% | 111.200 | 111.920 |  7 fr.

শনাক্তকৃত অবজেক্ট ফ্রেম এবং বাউন্ডিং বক্সের তালিকা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_object_frames(
    results: vi.VideoAnnotationResults,
    entity_id: str,
    min_confidence: float = 0.7,
):
    def keep_annotation(annotation: vi.ObjectTrackingAnnotation) -> bool:
        return (
            annotation.entity.entity_id == entity_id
            and min_confidence <= annotation.confidence
        )

    annotations = results.object_annotations
    annotations = [a for a in annotations if keep_annotation(a)]
    for annotation in annotations:
        description = annotation.entity.description
        confidence = annotation.confidence
        print(
            f" {description},"
            f" confidence: {confidence:.0%},"
            f" frames: {len(annotation.frames)} ".center(80, "-")
        )
        for frame in annotation.frames:
            t = frame.time_offset.total_seconds()
            box = frame.normalized_bounding_box
            print(
                f"{t:>7.3f}",
                f"({box.left:.5f}, {box.top:.5f})",
                f"({box.right:.5f}, {box.bottom:.5f})",
                sep=" | ",
            )
            

পোকামাকড়ের জন্য এনটিটি আইডি দিয়ে ফাংশনটি কল করুন:

insect_entity_id = "/m/03vt0"
print_object_frames(results, insect_entity_id)

আপনার এইরকম কিছু দেখা উচিত:

--------------------- insect, confidence: 87%, frames: 25 ----------------------
 98.840 | (0.49327, 0.19617) | (0.69905, 0.69633)
 98.960 | (0.49559, 0.19308) | (0.70631, 0.69671)
...
101.600 | (0.46668, 0.19776) | (0.76619, 0.69371)
101.720 | (0.46805, 0.20053) | (0.76447, 0.68703)
--------------------- insect, confidence: 71%, frames: 23 ----------------------
108.440 | (0.47343, 0.10694) | (0.63821, 0.98332)
108.560 | (0.46960, 0.10206) | (0.63033, 0.98285)
...
110.960 | (0.49466, 0.05102) | (0.65941, 0.99357)
111.080 | (0.49572, 0.04728) | (0.65762, 0.99868)

যদি আপনি সংশ্লিষ্ট ফ্রেমগুলোর উপরে বাউন্ডিং বক্সগুলো আঁকেন, তাহলে আপনি এইরকম কিছু পাবেন:

8f5796f6e73d1a46.gif

c195a2dca4573f95.gif

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে অবজেক্ট ডিটেকশন এবং ট্র্যাকিং করতে সক্ষম হয়েছেন। আপনি অবজেক্ট ডিটেকশন এবং ট্র্যাকিং সম্পর্কে আরও পড়তে পারেন।

১১. লোগো সনাক্ত ও ট্র্যাক করুন

আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে লোগো সনাক্ত ও ট্র্যাক করতে পারেন। এক লক্ষেরও বেশি ব্র্যান্ড এবং লোগো সনাক্ত করা সম্ভব।

নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করুন:

from datetime import timedelta
from typing import Optional, Sequence, cast

from google.cloud import videointelligence_v1 as vi


def detect_logos(
    video_uri: str, segments: Optional[Sequence[vi.VideoSegment]] = None
) -> vi.VideoAnnotationResults:
    video_client = vi.VideoIntelligenceServiceClient()
    features = [vi.Feature.LOGO_RECOGNITION]
    context = vi.VideoContext(segments=segments)
    request = vi.AnnotateVideoRequest(
        input_uri=video_uri,
        features=features,
        video_context=context,
    )

    print(f'Processing video "{video_uri}"...')
    operation = video_client.annotate_video(request)

    # Wait for operation to complete
    response = cast(vi.AnnotateVideoResponse, operation.result())
    # A single video is processed
    results = response.annotation_results[0]

    return results
    

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

ভিডিওটির শেষ পর্বের আগের পর্বটি বিশ্লেষণ করতে ফাংশনটি কল করুন:

video_uri = "gs://cloud-samples-data/video/JaneGoodall.mp4"
segment = vi.VideoSegment(
    start_time_offset=timedelta(seconds=146),
    end_time_offset=timedelta(seconds=156),
)

results = detect_logos(video_uri, [segment])

ভিডিওটি প্রসেস হওয়ার জন্য অপেক্ষা করুন:

Processing video: "gs://cloud-samples-data/video/JaneGoodall.mp4"...

শনাক্তকৃত লোগোগুলোর তালিকা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_detected_logos(results: vi.VideoAnnotationResults):
    annotations = results.logo_recognition_annotations

    print(f" Detected logos: {len(annotations)} ".center(80, "-"))
    for annotation in annotations:
        entity = annotation.entity
        entity_id = entity.entity_id
        description = entity.description
        for track in annotation.tracks:
            confidence = track.confidence
            t1 = track.segment.start_time_offset.total_seconds()
            t2 = track.segment.end_time_offset.total_seconds()
            logo_frames = len(track.timestamped_objects)
            print(
                f"{confidence:4.0%}",
                f"{t1:>7.3f}",
                f"{t2:>7.3f}",
                f"{logo_frames:>3} fr.",
                f"{entity_id:<15}",
                f"{description}",
                sep=" | ",
            )
            

ফাংশনটি কল করুন:

print_detected_logos(results)

আপনার এইরকম কিছু দেখা উচিত:

------------------------------ Detected logos: 1 -------------------------------
 92% | 150.680 | 155.720 |  43 fr. | /m/055t58       | Google Maps

শনাক্তকৃত লোগো ফ্রেম এবং বাউন্ডিং বক্সের তালিকা প্রিন্ট করার জন্য এই ফাংশনটি যোগ করুন:

def print_logo_frames(results: vi.VideoAnnotationResults, entity_id: str):
    def keep_annotation(annotation: vi.LogoRecognitionAnnotation) -> bool:
        return annotation.entity.entity_id == entity_id

    annotations = results.logo_recognition_annotations
    annotations = [a for a in annotations if keep_annotation(a)]
    for annotation in annotations:
        description = annotation.entity.description
        for track in annotation.tracks:
            confidence = track.confidence
            print(
                f" {description},"
                f" confidence: {confidence:.0%},"
                f" frames: {len(track.timestamped_objects)} ".center(80, "-")
            )
            for timestamped_object in track.timestamped_objects:
                t = timestamped_object.time_offset.total_seconds()
                box = timestamped_object.normalized_bounding_box
                print(
                    f"{t:>7.3f}",
                    f"({box.left:.5f}, {box.top:.5f})",
                    f"({box.right:.5f}, {box.bottom:.5f})",
                    sep=" | ",
                )
                

গুগল ম্যাপ লোগো এনটিটি আইডি দিয়ে ফাংশনটি কল করুন:

maps_entity_id = "/m/055t58"
print_logo_frames(results, maps_entity_id)

আপনার এইরকম কিছু দেখা উচিত:

------------------- Google Maps, confidence: 92%, frames: 43 -------------------
150.680 | (0.42024, 0.28633) | (0.58192, 0.64220)
150.800 | (0.41713, 0.27822) | (0.58318, 0.63556)
...
155.600 | (0.41775, 0.27701) | (0.58372, 0.63986)
155.720 | (0.41688, 0.28005) | (0.58335, 0.63954)

যদি আপনি সংশ্লিষ্ট ফ্রেমগুলোর উপরে বাউন্ডিং বক্সগুলো আঁকেন, তাহলে আপনি এইরকম কিছু পাবেন:

554743aff6d8824c.gif

সারসংক্ষেপ

এই ধাপে, আপনি ভিডিও ইন্টেলিজেন্স এপিআই ব্যবহার করে একটি ভিডিওতে লোগো শনাক্তকরণ এবং ট্র্যাকিং করতে সক্ষম হয়েছেন। আপনি লোগো শনাক্তকরণ এবং ট্র্যাকিং সম্পর্কে আরও পড়তে পারেন।

১২. একাধিক বৈশিষ্ট্য সনাক্ত করুন

একসাথে সমস্ত তথ্য পেতে আপনি এই ধরনের অনুরোধ করতে পারেন:

from google.cloud import videointelligence_v1 as vi

video_client = vi.VideoIntelligenceServiceClient()
video_uri = "gs://..."
features = [
    vi.Feature.SHOT_CHANGE_DETECTION,
    vi.Feature.LABEL_DETECTION,
    vi.Feature.EXPLICIT_CONTENT_DETECTION,
    vi.Feature.SPEECH_TRANSCRIPTION,
    vi.Feature.TEXT_DETECTION,
    vi.Feature.OBJECT_TRACKING,
    vi.Feature.LOGO_RECOGNITION,
    vi.Feature.FACE_DETECTION,  # NEW
    vi.Feature.PERSON_DETECTION,  # NEW
]
context = vi.VideoContext(
    segments=...,
    shot_change_detection_config=...,
    label_detection_config=...,
    explicit_content_detection_config=...,
    speech_transcription_config=...,
    text_detection_config=...,
    object_tracking_config=...,
    face_detection_config=...,  # NEW
    person_detection_config=...,  # NEW
)
request = vi.AnnotateVideoRequest(
    input_uri=video_uri,
    features=features,
    video_context=context,
)

# video_client.annotate_video(request)

১৩. অভিনন্দন!

cfaa6ffa7bc5ca70.png

আপনি পাইথন ব্যবহার করে ভিডিও ইন্টেলিজেন্স এপিআই (Video Intelligence API) ব্যবহার করার পদ্ধতি শিখেছেন!

পরিষ্কার করা

আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট পরিষ্কার করতে, ক্লাউড শেল থেকে:

  • আপনি যদি এখনও আপনার IPython সেশনে থাকেন, তাহলে শেল-এ ফিরে যান: exit
  • পাইথন ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার বন্ধ করুন: deactivate
  • আপনার ভার্চুয়াল এনভায়রনমেন্ট ফোল্ডারটি মুছে ফেলুন: cd ~ ; rm -rf ./venv-videointel

ক্লাউড শেল থেকে আপনার গুগল ক্লাউড প্রজেক্ট ডিলিট করতে:

  • আপনার বর্তমান প্রজেক্ট আইডি পুনরুদ্ধার করুন: PROJECT_ID=$(gcloud config get-value core/project)
  • নিশ্চিত করুন যে এটিই সেই প্রজেক্ট যা আপনি মুছতে চান: echo $PROJECT_ID
  • প্রজেক্টটি মুছে ফেলুন: gcloud projects delete $PROJECT_ID

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।