گولنگ ۽ اوپن سي وي جي بنياد تي منهن جي سڃاڻپ واري نظام جي تعمير

گولنگ ۽ اوپن سي وي جي بنياد تي منهن جي سڃاڻپ واري نظام جي تعمير
OpenCV هڪ لائبريري آهي جيڪا ڪمپيوٽر ويزن پروجيڪٽ لاءِ تيار ڪئي وئي آهي. هوء اڳ ۾ ئي 20 سالن جي باري ۾ آهي. مون ان کي ڪاليج ۾ استعمال ڪيو ۽ اڃا تائين ان کي استعمال ڪيو منهنجي C++ ۽ Python منصوبن لاءِ ڇاڪاڻ ته ان کي انهن ٻولين لاءِ سٺي مدد حاصل آهي.

پر جڏهن مون سکڻ ۽ Go استعمال ڪرڻ شروع ڪيو، مون حيران ڪيو ته ڇا OpenCV هن ٻولي سان ڪم ڪرڻ لاءِ استعمال ٿي سگهي ٿو. ان وقت انضمام تي اڳ ۾ ئي مثال ۽ سبق موجود هئا، پر اهو مون کي لڳي ٿو ته اهي تمام پيچيده هئا. ٿوري دير کان پوء، مون کي هڪ لپيٽ ۾ آيو هو هائبرڊ گروپ پاران ٺاهيل. هن آرٽيڪل ۾، مان توهان کي ڏيکاريندس ته ڪيئن شروع ڪجي GoCV سان هڪ سادي چهري جي سڃاڻپ وارو نظام ٺاهي هار Cascades سان.

Skillbox سفارش ڪري ٿو: عملي ڪورس "شروع کان پٿون ڊولپر".

اسان توهان کي ياد ڏياريون ٿا: "Habr" جي سڀني پڙهندڙن لاءِ - 10 روبل جي رعايت جڏهن "Habr" پروموشنل ڪوڊ استعمال ڪندي ڪنهن به اسڪل باڪس ڪورس ۾ داخلا.

ڇا گهربل آهي

  • وڃ؛
  • OpenCV (هيٺ ڏنل انسٽالر جي لنڪ)؛
  • ويب يا باقاعده camcorder.

تنصيب

مثال طور 1

پهرين مثال ۾، اسان هڪ ايپليڪيشن ٺاهڻ جي ڪوشش ڪنداسين جيڪا ڪئميرا ويڊيو اسٽريم سان ونڊو کولي.

پهرين توهان کي ڪم ڪرڻ جي ضرورت آهي لائبريريون درآمد ڪرڻ جي ضرورت آهي.

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

ان کان پوء، توهان کي VideoCaptureDevice فنڪشن استعمال ڪندي هڪ وڊيو ڪيپچر اعتراض ٺاهڻ جي ضرورت آهي. بعد ۾ اهو ممڪن بڻائي ٿو ته هڪ ڪئميرا استعمال ڪندي هڪ وڊيو وهڪرو کي پڪڙڻ لاء. فنڪشن هڪ انٽيجر کي پيٽرولر جي طور تي وٺندو آهي (اهو ڊوائيس ID جي نمائندگي ڪري ٿو).

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

ھاڻي اسان کي ھڪ ن-dimensional ميٽرڪس ٺاهڻو پوندو. اهو ڪئميرا مان پڙهيل تصويرون محفوظ ڪندو.

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

وڊيو اسٽريم کي ڏيکارڻ لاءِ، توھان کي ھڪڙي ونڊو ٺاھڻ جي ضرورت آھي - اھو ڪم ڪري سگھجي ٿو NewWindow فنڪشن کي استعمال ڪندي.

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 تي ٻڌل هڪ منهن جي سڃاڻپ وارو نظام ٺاهيو.

هار cascades cascaded classifier آهن جيڪي هار جي ويجليٽ ٽيڪنڪ جي بنياد تي تربيت ڏنيون وينديون آهن. اهي مخصوص خصوصيتن کي ڏسڻ لاءِ تصوير ۾ پکسلز جو تجزيو ڪن ٿا. هار Cascades بابت وڌيڪ سکڻ لاء، مهرباني ڪري هيٺ ڏنل لنڪ جي پيروي ڪريو.

Viola-Jones اعتراض جي ڳولا واري فريم ورڪ
Cascading classifiers
هار جهڙي خاصيت

ڊائون لوڊ ڪريو اڳ ۾ ئي تربيت يافته cascades هتي ئي ٿي سگهي ٿو. موجوده مثال ۾، cascades استعمال ڪيو ويندو سامهون هڪ شخص جي منهن کي سڃاڻڻ لاء.

هن کي ڪرڻ لاءِ، توهان کي هڪ درجي بندي ٺاهڻ جي ضرورت آهي ۽ ان کي اڳ ۾ ئي تربيت يافته فائل فيڊ ڪرڻ جي ضرورت آهي (لنڪ مٿي ڏنل آهي). مون پهريان ئي pencv_haarcascade_frontalface_default.xml فائل ڊاريڪٽري ۾ اپلوڊ ڪئي آهي جتي اسان جو پروگرام واقع آهي.

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

تصوير ۾ منهن ڳولڻ لاء، توهان کي طريقو استعمال ڪرڻو پوندو DetectMultiScale. هي فنڪشن هڪ فريم (قسم جي Mat) وٺي ٿو جيڪو صرف ڪئميرا جي وڊيو اسٽريم مان پڙهيو ويو آهي ۽ هڪ قسم جي مستطيل کي واپس ڏئي ٿو. صف جي سائيز منهن جي تعداد جي نمائندگي ڪري ٿي جيڪا درجه بندي فريم ۾ ڳولڻ جي قابل هئي. پوء، پڪ ڪرڻ لاء اسان ڏسون ٿا ته اهو ڇا مليو، اچو ته مستطيل جي فهرست ذريعي ٻيهر ورجائي ۽ ڪنسول تي مستطيل اعتراض کي پرنٽ ڪريو، مليل مستطيل جي چوڌاري سرحد ٺاهي. اهو استعمال ڪري سگهجي ٿو مستطيل فنڪشن. اهو وٺندو Mat کي ڪئميرا ذريعي پڙهي، مستطيل اعتراض 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

تبصرو شامل ڪريو