گولنگ ۽ اوپن سي وي جي بنياد تي منهن جي سڃاڻپ واري نظام جي تعمير
OpenCV هڪ لائبريري آهي جيڪا ڪمپيوٽر ويزن پروجيڪٽ لاءِ تيار ڪئي وئي آهي. هوء اڳ ۾ ئي 20 سالن جي باري ۾ آهي. مون ان کي ڪاليج ۾ استعمال ڪيو ۽ اڃا تائين ان کي استعمال ڪيو منهنجي C++ ۽ Python منصوبن لاءِ ڇاڪاڻ ته ان کي انهن ٻولين لاءِ سٺي مدد حاصل آهي.
پر جڏهن مون سکڻ ۽ Go استعمال ڪرڻ شروع ڪيو، مون حيران ڪيو ته ڇا OpenCV هن ٻولي سان ڪم ڪرڻ لاءِ استعمال ٿي سگهي ٿو. ان وقت انضمام تي اڳ ۾ ئي مثال ۽ سبق موجود هئا، پر اهو مون کي لڳي ٿو ته اهي تمام پيچيده هئا. ٿوري دير کان پوء، مون کي هڪ لپيٽ ۾ آيو هو هائبرڊ گروپ پاران ٺاهيل. هن آرٽيڪل ۾، مان توهان کي ڏيکاريندس ته ڪيئن شروع ڪجي GoCV سان هڪ سادي چهري جي سڃاڻپ وارو نظام ٺاهي هار Cascades سان.
پهرين مثال ۾، اسان هڪ ايپليڪيشن ٺاهڻ جي ڪوشش ڪنداسين جيڪا ڪئميرا ويڊيو اسٽريم سان ونڊو کولي.
پهرين توهان کي ڪم ڪرڻ جي ضرورت آهي لائبريريون درآمد ڪرڻ جي ضرورت آهي.
درآمد (
"لاگ"
"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()
جيئن ته وڊيو تصويري فريم جو هڪ مسلسل وهڪرو آهي، اسان کي هڪ لامحدود لوپ ٺاهڻ جي ضرورت پوندي ڪئميرا جي وڊيو اسٽريم کي لامحدود طور تي پڙهڻ لاءِ. ھن جي ضرورت آھي پڙھڻ جو طريقو VideoCapture قسم جو. اهو هڪ ميٽ قسم جي توقع ڪندو (جيڪو ميٽرڪس اسان مٿي ٺاهيو آهي)، هڪ بوليان واپس ڪندي اهو ظاهر ڪري ٿو ته ڇا ويڊيو ڪيپچر مان هڪ فريم ڪاميابي سان پڙهيو ويو يا نه.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(“Unable to read from the webcam”) continue
}
.
.
.
}
هاڻي اسان کي ٺهيل ونڊو ۾ فريم ڏيکارڻ جي ضرورت آهي. ايندڙ فريم ڏانھن وڃڻ لاء روڪيو - 50 ms.
تصوير ۾ منهن ڳولڻ لاء، توهان کي طريقو استعمال ڪرڻو پوندو 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 ۾ لکيو. اهو ڊيٽا کي وهڪرو ڪري ٿو جيئن ئي هڪ چهرو معلوم ٿئي ٿو. هي مختلف پروگرامنگ ٻولين ۾ مختلف ڪلائنٽ ٺاهڻ جو بنياد آهي. اهي سرور سان ڳنڍڻ ۽ ان مان ڊيٽا پڙهڻ جي قابل هوندا.