YOLOv7 PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ Python میں ویڈیو سے ریئل ٹائم پوز کا تخمینہ۔ عمودی تلاش۔ عی

YOLOv7 کے ساتھ ازگر میں ویڈیو سے ریئل ٹائم پوز کا تخمینہ

تعارف

آبجیکٹ کا پتہ لگانا کمپیوٹر ویژن کا ایک بڑا میدان ہے، اور کمپیوٹر ویژن کی "جنگلی میں" ایک اہم ترین ایپلی کیشن ہے۔ اس سے، کلیدی نقطہ کا پتہ لگانے (اکثر پوز تخمینہ کے لئے استعمال کیا جاتا ہے) نکالا گیا تھا۔

کلیدی پوائنٹس مختلف پوائنٹس ہو سکتے ہیں - چہرے کے حصے، جسم کے اعضاء وغیرہ۔ پوز کا تخمینہ کلیدی پوائنٹ کا پتہ لگانے کا ایک خاص معاملہ ہے - جس میں پوائنٹس انسانی جسم کے حصے ہوتے ہیں۔

پوز کا تخمینہ کمپیوٹر وژن کا ایک حیرت انگیز، انتہائی تفریحی اور عملی استعمال ہے۔ اس کی مدد سے، ہم پوز (موشن کیپچر سوٹ) کا تخمینہ لگانے کے لیے استعمال ہونے والے ہارڈ ویئر کو ختم کر سکتے ہیں، جو کہ مہنگے اور ناکارہ ہیں۔ مزید برآں، ہم انسانوں کی نقل و حرکت کو یوکلیڈین خلا میں روبوٹس کی نقل و حرکت کا نقشہ بنا سکتے ہیں، جس سے کنٹرولرز کا استعمال کیے بغیر ٹھیک ٹھیک موٹر کی نقل و حرکت کو قابل بنایا جا سکتا ہے، جو عام طور پر اعلی درجے کی درستگی کی اجازت نہیں دیتے ہیں۔ کلیدی نقطہ کا تخمینہ اے آر اور وی آر میں ہماری نقل و حرکت کو 3D ماڈلز میں ترجمہ کرنے کے لیے استعمال کیا جا سکتا ہے، اور اسے صرف ایک ویب کیم کے ساتھ کرنے کے لیے تیزی سے استعمال کیا جا رہا ہے۔ آخر میں - پوز کا تخمینہ کھیلوں اور سلامتی میں ہماری مدد کر سکتا ہے۔

اس گائیڈ میں، ہم جدید ترین YOLOv7 ماڈل کا استعمال کرتے ہوئے Python میں ایک ویڈیو سے حقیقی وقت کے پوز کا تخمینہ لگائیں گے۔

خاص طور پر، ہم جنوبی کوریا کے پیونگ چانگ میں منعقد ہونے والے 2018 کے سرمائی اولمپکس کی ایک ویڈیو کے ساتھ کام کریں گے:

الجونا ساوچینکو اور برونو میسوٹ نے ایک حیرت انگیز کارکردگی کا مظاہرہ کیا، جس میں کیمرے کے خلاف جسم کو اوورلیپ کرنا، تیز سیال حرکت اور ہوا میں گھومنا شامل ہے۔ یہ دیکھنے کا ایک حیرت انگیز موقع ہوگا کہ ماڈل کس طرح مشکل سے اندازہ لگانے والے حالات کو ہینڈل کرتا ہے!

یولو اور پوز کا تخمینہ

یولو (آپ صرف ایک بار دیکھیں) ایک طریقہ کار ہے، اور ساتھ ہی آبجیکٹ کا پتہ لگانے کے لیے بنائے گئے ماڈلز کا خاندان۔ 2015 میں آغاز کے بعد سے، YOLOv1، YOLOv2 (YOLO9000) اور YOLOv3 ایک ہی مصنف (مصنفوں) کی طرف سے تجویز کیے گئے ہیں - اور گہری سیکھنے والی کمیونٹی نے مسلسل سالوں میں کھلے ذرائع سے ترقی کے ساتھ جاری رکھا۔

Ultralytics' YOLOv5 صنعت کے درجے کی آبجیکٹ کا پتہ لگانے کا ذخیرہ ہے، جو YOLO طریقہ کے اوپر بنایا گیا ہے۔ یہ PyTorch میں لاگو کیا گیا ہے، جیسا کہ پچھلے YOLO ماڈلز کے لیے C++ کے برخلاف ہے، مکمل طور پر اوپن سورس ہے، اور اس میں ایک خوبصورت سادہ اور طاقتور API ہے جو آپ کو پروجیکٹ کو لچکدار طریقے سے اندازہ لگانے، تربیت دینے اور اپنی مرضی کے مطابق بنانے دیتا ہے۔ یہ اتنا اہم ہے کہ YOLO طریقہ کار کو بہتر بنانے کی زیادہ تر نئی کوششیں اس کے اوپری حصے میں آتی ہیں۔

اس طرح YOLOR (آپ صرف ایک نمائندگی سیکھتے ہیں) اور YOLOv7 جو YOLOR (ایک ہی مصنف) کے سب سے اوپر بنایا گیا تھا اسی طرح تخلیق کیا گیا تھا!

YOLOv7 صرف ایک آبجیکٹ کا پتہ لگانے کا فن تعمیر نہیں ہے - یہ نئے ماڈل ہیڈز فراہم کرتا ہے، جو کلیدی پوائنٹس (کنکال) کو آؤٹ پٹ کر سکتا ہے اور صرف باؤنڈنگ باکس ریگریشن کے علاوہ مثال کی تقسیم بھی انجام دے سکتا ہے، جو پچھلے YOLO ماڈلز کے ساتھ معیاری نہیں تھا۔ یہ حیرت کی بات نہیں ہے، کیونکہ بہت سے آبجیکٹ کا پتہ لگانے کے فن تعمیر کو پہلے بھی مثال کے طور پر سیگمنٹیشن اور کلیدی پوائنٹ کا پتہ لگانے کے کاموں کے لیے دوبارہ تیار کیا گیا تھا، مشترکہ عمومی فن تعمیر کی وجہ سے، کام پر منحصر مختلف آؤٹ پٹ کے ساتھ۔

اگرچہ یہ حیرت کی بات نہیں ہے - معاون مثال کی تقسیم اور کلیدی نقطہ کا پتہ لگانے کا امکان YOLO پر مبنی ماڈلز کے لیے نیا معیار بن جائے گا، جس نے درستگی اور رفتار دونوں کے لحاظ سے کچھ سال پہلے عملی طور پر دیگر تمام دو مراحل کے ڈٹیکٹرز کو پیچھے چھوڑنا شروع کر دیا ہے۔

یہ مثال کی تقسیم اور کلیدی پوائنٹ کا پتہ لگانے کو پہلے سے کہیں زیادہ تیز تر بناتا ہے، دو مرحلے کے ڈٹیکٹروں کے مقابلے میں ایک آسان فن تعمیر کے ساتھ۔

یہ ماڈل خود تعمیراتی تبدیلیوں کے ساتھ ساتھ تربیت کے پہلوؤں کو بہتر بنانے کے ذریعے بنایا گیا تھا، جسے "بیگ آف فریبیز" کا نام دیا گیا، جس نے تخمینہ لاگت میں اضافہ کیے بغیر درستگی میں اضافہ کیا۔

YOLOv7 انسٹال کرنا

آئیے سورس کوڈ کو حاصل کرنے کے لیے ریپوزٹری کو کلون کرکے شروع کریں:

! git clone https://github.com/WongKinYiu/yolov7.git

اب، میں منتقل کرتے ہیں yolov7 ڈائریکٹری، جس میں پروجیکٹ ہے، اور مندرجات پر ایک نظر ڈالیں:

%cd yolov7
!ls
/content/yolov7
cfg	   figure      output.mp4	 test.py       
data	   hubconf.py  paper		 tools
deploy	   inference   README.md	 train_aux.py
detect.py  LICENSE.md  requirements.txt  train.py
export.py  models      scripts		 utils

نوٹ: کالنگ !cd dirname آپ کو اس سیل میں ڈائرکٹری میں لے جاتا ہے۔ کال کرنا %cd dirname آپ کو آنے والے سیلوں میں بھی ڈائرکٹری میں لے جاتا ہے اور آپ کو وہاں رکھتا ہے۔

اب، YOLO کا مطلب ایک آبجیکٹ ڈیٹیکٹر ہے، اور یہ ڈیفالٹ کے مطابق پوز تخمینہ وزن کے ساتھ نہیں بھیجتا ہے۔ ہم وزن کو ڈاؤن لوڈ کرنا چاہتے ہیں اور ان سے ایک ٹھوس ماڈل مثال لوڈ کرنا چاہیں گے۔ وزن اسی GitHub ذخیرہ پر دستیاب ہیں، اور آسانی سے CLI کے ذریعے بھی ڈاؤن لوڈ کیے جا سکتے ہیں:

! curl -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt -o yolov7-w6-pose.pt

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  153M  100  153M    0     0  23.4M      0  0:00:06  0:00:06 --:--:-- 32.3M

ڈاؤن لوڈ ہونے کے بعد، ہم لائبریریوں اور مددگار طریقوں کو درآمد کر سکتے ہیں جو ہم استعمال کریں گے:

import torch
from torchvision import transforms

from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts

import matplotlib.pyplot as plt
import cv2
import numpy as np

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

زبردست! آئیے ماڈل کو لوڈ کرنے اور ایک اسکرپٹ بنانے کے ساتھ آگے بڑھتے ہیں جو آپ کو YOLOv7 اور OpenCV کے ساتھ ویڈیوز سے پوز کا اندازہ لگانے دیتا ہے۔

YOLOv7 کے ساتھ ریئل ٹائم پوز کا تخمینہ

آئیے پہلے ڈاؤن لوڈ کردہ وزن سے ماڈل کو لوڈ کرنے کا طریقہ بنائیں۔ ہم چیک کریں گے کہ ہمارے پاس کون سا ڈیوائس دستیاب ہے (CPU یا GPU):

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

def load_model():
    model = torch.load('yolov7-w6-pose.pt', map_location=device)['model']
    
    model.float().eval()

    if torch.cuda.is_available():
        
        
        model.half().to(device)
    return model

model = load_model()

اس بات پر منحصر ہے کہ آیا ہمارے پاس GPU ہے یا نہیں، ہم نصف درستگی کو آن کر دیں گے (استعمال کرتے ہوئے float16 بجائے float32 آپریشنز میں)، جو اندازہ کو نمایاں طور پر تیز کرتا ہے۔ نوٹ کریں کہ ریئل ٹائم اسپیڈ کے لیے GPU پر اس کو انجام دینے کی انتہائی حوصلہ افزائی کی جاتی ہے، کیونکہ CPUs میں ایسا کرنے کی طاقت کا فقدان ہو گا جب تک کہ چھوٹی ویڈیوز پر نہ چلیں۔

چلو inference چلانے کے لیے convinience کا طریقہ لکھتے ہیں۔ ہم تصاویر کو NumPy arrays کے طور پر قبول کریں گے (جیسا کہ ہم بعد میں ویڈیو کو پڑھتے ہوئے انہیں منتقل کریں گے)۔ سب سے پہلے، کا استعمال کرتے ہوئے letterbox() فنکشن - ہم ویڈیو کا سائز تبدیل کریں گے اور اس شکل میں پیڈ کریں گے جس کے ساتھ ماڈل کام کر سکتا ہے۔ اس کے نتیجے میں ویڈیو کی شکل (ریزولوشن) ہونے کی ضرورت نہیں ہے اور نہ ہی ہوگی!

پھر، ہم تبدیلیوں کو لاگو کریں گے، تصویر کو نصف درستگی میں تبدیل کریں گے (اگر GPU دستیاب ہے)، اسے بیچیں گے اور اسے ماڈل کے ذریعے چلائیں گے:

def run_inference(image):
    
    image = letterbox(image, 960, stride=64, auto=True)[0] 
    
    image = transforms.ToTensor()(image) 
    if torch.cuda.is_available():
      image = image.half().to(device)
    
    image = image.unsqueeze(0) 
    with torch.no_grad():
      output, _ = model(image)
    return output, image

ہم ماڈل کی پیشین گوئیوں کے ساتھ ساتھ تصویر کو بطور ٹینسر واپس کریں گے۔ یہ "معمولی" پیشین گوئیاں ہیں - ان میں بہت سی ایکٹیویشنز ہیں جو اوورلیپ ہو جاتی ہیں، اور ہم Non-Max Supression کا استعمال کرتے ہوئے "انہیں صاف" کرنا چاہیں گے، اور تصویر کے اوپر ہی پیشین گوئی شدہ کنکال پلاٹ کریں گے:

def draw_keypoints(output, image):
  output = non_max_suppression_kpt(output, 
                                     0.25, 
                                     0.65, 
                                     nc=model.yaml['nc'], 
                                     nkpt=model.yaml['nkpt'], 
                                     kpt_label=True)
  with torch.no_grad():
        output = output_to_keypoint(output)
  nimg = image[0].permute(1, 2, 0) * 255
  nimg = nimg.cpu().numpy().astype(np.uint8)
  nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
  for idx in range(output.shape[0]):
      plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)

  return nimg

ان کی جگہ پر، ہمارا عمومی بہاؤ اس طرح نظر آئے گا:

img = read_img()
outputs, img = run_inference(img)
keypoint_img = draw_keypoints(output, img)

اسے ریئل ٹائم ویڈیو سیٹنگ میں ترجمہ کرنے کے لیے - ہم ویڈیو کو پڑھنے کے لیے OpenCV کا استعمال کریں گے، اور اس عمل کو ہر فریم کے لیے چلائیں گے۔ ہر فریم پر، ہم فریم کو ایک نئی فائل میں بھی لکھیں گے، جسے ویڈیو کے طور پر انکوڈ کیا گیا ہے۔ یہ ضروری طور پر عمل کو سست کر دے گا کیونکہ ہم قیاس کو چلا رہے ہیں، اسے ڈسپلے کر رہے ہیں اور لکھ رہے ہیں - لہذا آپ ایک نئی فائل بنانے سے گریز کرکے اور اسے لوپ میں لکھ کر تخمینہ اور ڈسپلے کو تیز کر سکتے ہیں:

def pose_estimation_video(filename):
    cap = cv2.VideoCapture(filename)
    
    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    out = cv2.VideoWriter('ice_skating_output.mp4', fourcc, 30.0, (int(cap.get(3)), int(cap.get(4))))
    while cap.isOpened():
        (ret, frame) = cap.read()
        if ret == True:
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            output, frame = run_inference(frame)
            frame = draw_keypoints(output, frame)
            frame = cv2.resize(frame, (int(cap.get(3)), int(cap.get(4))))
            out.write(frame)
            cv2.imshow('Pose estimation', frame)
        else:
            break

        if cv2.waitKey(10) & 0xFF == ord('q'):
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

۔ VideoWriter کئی پیرامیٹرز کو قبول کرتا ہے - آؤٹ پٹ فائل کا نام، فور سی سی (چار کوڈیک کوڈز، ویڈیو کو انکوڈ کرنے کے لیے استعمال ہونے والے کوڈیک کی نشاندہی کرتے ہوئے)، فریمریٹ اور ریزولوشن بطور ٹوپل۔ ویڈیو کا اندازہ لگانے یا اس کا سائز تبدیل نہ کرنے کے لیے - ہم نے اصل ویڈیو کی چوڑائی اور اونچائی کا استعمال کیا ہے، جو VideoCapture مثال جس میں خود ویڈیو کے بارے میں ڈیٹا ہوتا ہے، جیسے چوڑائی، اونچائی، فریموں کی کل تعداد وغیرہ۔

اب، ہم کسی بھی ان پٹ ویڈیو پر طریقہ کو کال کر سکتے ہیں:

pose_estimation_video('../ice_skating.mp4')

یہ ایک OpenCV ونڈو کھولے گا، اصل وقت میں اندازہ ظاہر کرے گا۔ اور یہ بھی، میں ایک ویڈیو فائل لکھے گا۔ yolov7 ڈائریکٹری (جب سے ہم نے cdاس میں شامل ہوں):

YOLOv7 PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ Python میں ویڈیو سے ریئل ٹائم پوز کا تخمینہ۔ عمودی تلاش۔ عی

نوٹ: اگر آپ کا GPU جدوجہد کر رہا ہے، یا اگر آپ اس طرح کے ماڈل کے نتائج کو کسی ایسی ایپلی کیشن میں ایمبیڈ کرنا چاہتے ہیں جس میں ورک فلو کے ایک اہم پہلو کے طور پر تاخیر ہو تو - ویڈیو کو چھوٹا بنائیں اور چھوٹے فریموں پر کام کریں۔ یہ ایک مکمل HD 1920×1080 ویڈیو ہے، اور اسے زیادہ تر گھریلو سسٹمز پر تیزی سے چلانے کے قابل ہونا چاہیے، لیکن اگر یہ آپ کے سسٹم پر کام نہیں کرتا ہے، تو تصویر (تصاویر) کو چھوٹا بنائیں۔

نتیجہ

اس گائیڈ میں، ہم نے YOLO طریقہ، YOLOv7 اور YOLO اور آبجیکٹ کا پتہ لگانے، پوز تخمینہ اور مثال کی تقسیم کے درمیان تعلق پر ایک نظر ڈالی ہے۔ اس کے بعد ہم نے اس پر ایک نظر ڈالی ہے کہ آپ پروگرامیٹک API کا استعمال کرتے ہوئے YOLOv7 کے ساتھ کس طرح آسانی سے انسٹال اور کام کر سکتے ہیں، اور نتیجہ اخذ کرنے اور ظاہر کرنے کو آسان بنانے کے لیے کئی قائلین طریقے بنائے ہیں۔

آخر میں، ہم نے OpenCV کا استعمال کرتے ہوئے ایک ویڈیو کھولی، YOLOv7 کے ساتھ اندازہ لگایا، اور حقیقی وقت میں پوز کا تخمینہ لگانے کے لیے ایک فنکشن بنایا، نتیجے میں آنے والی ویڈیو کو مکمل ریزولوشن اور 30FPS میں آپ کی مقامی ڈسک پر محفوظ کیا۔

مزید جانا - کمپیوٹر وژن کے لیے عملی گہری تعلیم

آپ کی جستجو کرنے والی فطرت آپ کو مزید آگے بڑھنا چاہتی ہے؟ ہم اپنے کو چیک کرنے کی تجویز کرتے ہیں۔ کورس: "Python کے ساتھ کمپیوٹر وژن کے لیے عملی گہری تعلیم".

YOLOv7 PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ Python میں ویڈیو سے ریئل ٹائم پوز کا تخمینہ۔ عمودی تلاش۔ عی

ایک اور کمپیوٹر وژن کورس؟

ہم MNIST ہندسوں یا MNIST فیشن کی درجہ بندی نہیں کریں گے۔ انہوں نے بہت پہلے اپنے حصے کی خدمت کی۔ بہت سارے سیکھنے کے وسائل بنیادی ڈیٹاسیٹس اور بنیادی فن تعمیرات پر توجہ مرکوز کر رہے ہیں اس سے پہلے کہ جدید بلیک باکس فن تعمیر کو کارکردگی کا بوجھ اٹھانے دیا جائے۔

ہم توجہ مرکوز کرنا چاہتے ہیں۔ demystification, عملیی, افہام و تفہیم, انترجشتھان اور حقیقی منصوبوں. سیکھنا چاہتے ہیں۔ کس طرح کیا آپ فرق کر سکتے ہیں؟ ہم آپ کو ایک سفر پر لے جائیں گے جس طرح سے ہمارے دماغ چھاتی کے کینسر کے لیے ایک ریسرچ گریڈ ڈیپ لرننگ کلاسیفائر لکھنے سے لے کر گہرے سیکھنے کے نیٹ ورکس تک لے جائیں گے جو کہ "فریب" کرتے ہیں، عملی کام کے ذریعے آپ کو اصول اور تھیوری سکھاتے ہیں، کمپیوٹر وژن کو حل کرنے کے لیے گہری سیکھنے کا اطلاق کرنے میں ماہر بننے کا طریقہ اور اوزار۔

اندر کیاہے؟

  • بصارت کے پہلے اصول اور کمپیوٹر کو "دیکھنا" کیسے سکھایا جا سکتا ہے۔
  • کمپیوٹر وژن کے مختلف کام اور ایپلی کیشنز
  • تجارت کے اوزار جو آپ کے کام کو آسان بنائیں گے۔
  • کمپیوٹر وژن کے لیے ڈیٹاسیٹس کی تلاش، تخلیق اور استعمال
  • Convolutional Neural Networks کا نظریہ اور اطلاق
  • ڈیٹا سیٹس میں ڈومین شفٹ، شریک ہونے اور دیگر تعصبات کو ہینڈل کرنا
  • سیکھنے کو منتقل کریں اور دوسروں کے تربیتی وقت اور کمپیوٹیشنل وسائل کو اپنے فائدے کے لیے استعمال کریں۔
  • ایک جدید ترین چھاتی کے کینسر کی درجہ بندی کرنے والے کی تعمیر اور تربیت
  • مرکزی دھارے کے خیالات پر شکوک و شبہات کی صحت مند خوراک کو کیسے لاگو کیا جائے اور وسیع پیمانے پر اختیار کی جانے والی تکنیکوں کے مضمرات کو کیسے سمجھا جائے
  • T-SNE اور PCA کا استعمال کرتے ہوئے ConvNet کی "تصور کی جگہ" کا تصور کرنا
  • کیس اسٹڈیز کہ کمپنیاں بہتر نتائج حاصل کرنے کے لیے کمپیوٹر ویژن تکنیک کا استعمال کیسے کرتی ہیں۔
  • ماڈل کی مناسب تشخیص، اویکت جگہ کا تصور اور ماڈل کی توجہ کی نشاندہی کرنا
  • ڈومین ریسرچ کرنا، آپ کے اپنے ڈیٹا سیٹس پر کارروائی کرنا اور ماڈل ٹیسٹ قائم کرنا
  • جدید فن تعمیر، خیالات کی ترقی، انہیں کیا منفرد بناتا ہے اور انہیں کیسے نافذ کیا جائے
  • KerasCV – جدید ترین پائپ لائنز اور ماڈل بنانے کے لیے ایک WIP لائبریری
  • پیپرز کو کیسے پارس کریں اور پڑھیں اور خود ان پر عمل کریں۔
  • آپ کی درخواست پر منحصر ماڈلز کا انتخاب
  • آخر سے آخر تک مشین لرننگ پائپ لائن بنانا
  • تیز تر R-CNNs، RetinaNets، SSDs اور YOLO کے ساتھ آبجیکٹ کا پتہ لگانے پر زمین کی تزئین اور بصیرت
  • مثال اور سیمنٹک سیگمنٹیشن
  • YOLOv5 کے ساتھ ریئل ٹائم آبجیکٹ کی شناخت
  • YOLOv5 آبجیکٹ ڈیٹیکٹر کی تربیت
  • KerasNLP (صنعت کی طاقت WIP لائبریری) کا استعمال کرتے ہوئے ٹرانسفارمرز کے ساتھ کام کرنا
  • تصاویر کے کیپشن بنانے کے لیے ConvNets کے ساتھ ٹرانسفارمرز کو مربوط کرنا
  • DeepDream
  • کمپیوٹر ویژن کے لیے ڈیپ لرننگ ماڈل کی اصلاح

ٹائم اسٹیمپ:

سے زیادہ Stackabuse