گولانگ اور اوپن سی وی پر مبنی چہرے کی شناخت کے نظام کی تعمیر

گولانگ اور اوپن سی وی پر مبنی چہرے کی شناخت کے نظام کی تعمیر
اوپن سی وی ایک لائبریری ہے جسے کمپیوٹر ویژن پروجیکٹس کے لیے ڈیزائن کیا گیا ہے۔ وہ پہلے ہی تقریباً 20 سال کی ہو چکی ہے۔ میں نے اسے کالج میں استعمال کیا اور اب بھی اسے اپنے C++ اور Python پروجیکٹس کے لیے استعمال کرتا ہوں کیونکہ اس میں ان زبانوں کے لیے اچھی سپورٹ ہے۔

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

Skillbox تجویز کرتا ہے: پریکٹیکل کورس "شروع سے ازگر کا ڈویلپر".

ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔

کیا ضرورت ہے:

  • جاؤ؛
  • OpenCV (نیچے انسٹالر لنکس)؛
  • ویب یا باقاعدہ ویڈیو کیمرہ۔

تنصیب

مثال کے طور پر 1

پہلی مثال میں، ہم ایک ایسی ایپلی کیشن بنانے کی کوشش کریں گے جو ایک ونڈو کو کھولے جس میں کیمرہ ویڈیو سٹریم نظر آئے۔

سب سے پہلے آپ کو کام کے لیے درکار لائبریریوں کو درآمد کرنے کی ضرورت ہے۔

درآمد (
"لاگ"
"gocv.io/x/gocv"
)

اس کے بعد، آپ کو VideoCaptureDevice فنکشن کا استعمال کرتے ہوئے ایک VideoCapture آبجیکٹ بنانے کی ضرورت ہے۔ مؤخر الذکر کیمرے کا استعمال کرتے ہوئے ویڈیو اسٹریم پر قبضہ کرنا ممکن بناتا ہے۔ فنکشن ایک عدد کو پیرامیٹر کے طور پر استعمال کرتا ہے (یہ ڈیوائس ID کی نمائندگی کرتا ہے)۔

webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {    log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()

اب ہمیں ایک n-dimensional میٹرکس بنانے کی ضرورت ہے۔ یہ کیمرے سے پڑھی گئی تصاویر کو محفوظ کرے گا۔

img := gocv.NewMat()
defer img.Close()

ویڈیو سٹریم کو ظاہر کرنے کے لیے، آپ کو ایک ونڈو بنانے کی ضرورت ہے - یہ نیو ونڈو فنکشن کا استعمال کرتے ہوئے کیا جا سکتا ہے۔

window := gocv.NewWindow(“webcamwindow”)
defer window.Close()

اب سب سے دلچسپ حصے کی طرف چلتے ہیں۔

چونکہ ویڈیو تصویری فریموں کا ایک مسلسل سلسلہ ہے، اس لیے ہمیں کیمرے کی ویڈیو اسٹریم کو لامتناہی طور پر پڑھنے کے لیے ایک لامحدود لوپ بنانے کی ضرورت ہوگی۔ ایسا کرنے کے لیے، آپ کو ویڈیو کیپچر قسم کے پڑھنے کا طریقہ درکار ہے۔ یہ ایک میٹ قسم کی توقع کرے گا (میٹرکس جو ہم نے اوپر بنایا ہے)، ایک بولین ویلیو واپس کرتے ہوئے یہ بتاتا ہے کہ آیا VideoCapture کا فریم کامیابی سے پڑھا گیا تھا یا نہیں۔

for {     
        if ok := webcam.Read(&img); !ok || img.Empty( {
        log.Println(“Unable to read from the webcam”)    continue
     }
.
.
.
}

اب آپ کو تیار کردہ ونڈو میں فریم کو ظاہر کرنے کی ضرورت ہے۔ اگلے فریم پر جانے کا وقفہ 50 ms ہے۔

window.IMShow(img)
window.WaitKey(50)

ایپلیکیشن لانچ کرنے کے بعد، کیمرے سے ویڈیو سٹریم والی ونڈو کھل جائے گی۔

گولانگ اور اوپن سی وی پر مبنی چہرے کی شناخت کے نظام کی تعمیر

package main
 
import (
"log"
 
"gocv.io/x/gocv"
)
 
func main() {
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {
    log.Fatalf("error opening device: %v", err)
}
defer webcam.Close()
 
img := gocv.NewMat()
defer img.Close()
 
window := gocv.NewWindow("webcamwindow")
defer window.Close()
 
for {
if ok := webcam.Read(&img); !ok || img.Empty() {
log.Println("Unable to read from the webcam")
continue
}
 
window.IMShow(img)
window.WaitKey(50)
}
}

مثال کے طور پر 2

اس مثال میں، آئیے پچھلی مثال کو استعمال کریں اور Haar Cascades پر مبنی چہرے کی شناخت کا نظام بنائیں۔

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

Viola-Jones آبجیکٹ کا پتہ لگانے کا فریم ورک
کاسکیڈنگ درجہ بندی
ہار جیسی خصوصیت

پہلے سے تربیت یافتہ جھرنوں کو ڈاؤن لوڈ کریں۔ یہاں ہو سکتا ہے. موجودہ مثال میں، سامنے سے کسی شخص کے چہرے کی شناخت کے لیے جھرنوں کا استعمال کیا جائے گا۔

ایسا کرنے کے لیے، آپ کو ایک درجہ بندی بنانے کی ضرورت ہے اور اسے پہلے سے تربیت یافتہ فائل فیڈ کرنی ہوگی (لنک اوپر دیا گیا ہے)۔ میں نے پہلے ہی pencv_haarcascade_frontalface_default.xml فائل کو اس ڈائریکٹری میں اپ لوڈ کر دیا ہے جہاں ہمارا پروگرام موجود ہے۔

harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

تصویر میں چہروں کا پتہ لگانے کے لیے، آپ کو طریقہ استعمال کرنے کی ضرورت ہے۔ ملٹی اسکیل کا پتہ لگائیں۔. یہ فنکشن ایک فریم (ٹائپ میٹ) لیتا ہے جسے ابھی کیمرے کے ویڈیو اسٹریم سے پڑھا گیا تھا اور قسم مستطیل کی ایک صف واپس کرتا ہے۔ صف کا سائز ان چہروں کی تعداد کی نمائندگی کرتا ہے جن کا درجہ بندی فریم میں پتہ لگانے کے قابل تھا۔ پھر، اس بات کو یقینی بنانے کے لیے کہ ہمیں کیا ملا ہے، آئیے مستطیلوں کی فہرست کے ذریعے اعادہ کریں اور مستطیل آبجیکٹ کو کنسول پر پرنٹ کریں، جس سے دریافت شدہ مستطیل کے گرد ایک بارڈر بنایا جائے۔ یہ مستطیل فنکشن کا استعمال کرتے ہوئے کیا جا سکتا ہے۔ یہ کیمرے کے ذریعے پڑھی گئی چٹائی کو قبول کرے گا، مستطیل آبجیکٹ جو DetectMultiScale طریقہ سے واپس کیا گیا تھا، بارڈر کے لیے رنگ اور موٹائی۔

for _, r := range rects {
fmt.Println(“detected”, r)
gocv.Rectangle(&img, r, color, 2)
}

گولانگ اور اوپن سی وی پر مبنی چہرے کی شناخت کے نظام کی تعمیر

گولانگ اور اوپن سی وی پر مبنی چہرے کی شناخت کے نظام کی تعمیر

package main
 
import (
"fmt"
"image/color"
"log"
 
"gocv.io/x/gocv"
)
 
func main() {
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {
log.Fatalf("error opening web cam: %v", err)
}
defer webcam.Close()
 
img := gocv.NewMat()
defer img.Close()
 
window := gocv.NewWindow("webcamwindow")
defer window.Close()
 
harrcascade := "opencv_haarcascade_frontalface_default.xml"
classifier := gocv.NewCascadeClassifier()
classifier.Load(harrcascade)
defer classifier.Close()
 
color := color.RGBA{0, 255, 0, 0}
for {
if ok := webcam.Read(&img); !ok || img.Empty() {
log.Println("Unable to read from the device")
continue
}
 
rects := classifier.DetectMultiScale(img)
for _, r := range rects {
fmt.Println("detected", r)
gocv.Rectangle(&img, r, color, 3)
}
 
window.IMShow(img)
window.WaitKey(50)
}
}

اور... ہاں، سب کچھ ہو گیا! ہمارے پاس اب Go میں لکھا ہوا چہرے کی شناخت کا ایک آسان نظام ہے۔ جلد ہی میں ان تجربات کو جاری رکھنے اور Go اور OpenCV کو ملا کر نئی عمدہ چیزیں بنانے کا ارادہ رکھتا ہوں۔

اگر آپ دلچسپی رکھتے ہیں، تو براہ مہربانی شرح کریں gRPC ویب سرور، جسے میں نے Python اور OpenCV میں لکھا تھا۔ جب چہرے کا پتہ چلتا ہے تو یہ ڈیٹا کو اسٹریم کرتا ہے۔ یہ مختلف پروگرامنگ زبانوں میں مختلف کلائنٹس بنانے کی بنیاد ہے۔ وہ سرور سے منسلک ہو سکیں گے اور اس سے ڈیٹا پڑھ سکیں گے۔

مضمون پڑھنے کے لیے آپ کا شکریہ!

Skillbox تجویز کرتا ہے:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں