د ګولنګ او OpenCV پر بنسټ د مخ پیژندنې سیسټم جوړول

د ګولنګ او OpenCV پر بنسټ د مخ پیژندنې سیسټم جوړول
OpenCV یو کتابتون دی چې د کمپیوټر لید پروژو لپاره ډیزاین شوی. هغه لا دمخه شاوخوا 20 کلن دی. ما دا په کالج کې کارولی او لاهم دا زما د C ++ او Python پروژو لپاره کاروم ځکه چې دا د دې ژبو لپاره ښه ملاتړ لري.

مګر کله چې ما زده کړه او د Go کارول پیل کړل، زه لیواله شوم چې ایا OpenCV د دې ژبې سره کار کولو لپاره کارول کیدی شي. په هغه وخت کې، د ادغام په اړه لا دمخه مثالونه او لارښوونې شتون درلود، مګر داسې ښکاري چې دوی خورا پیچلي وو. یو څه وروسته ، زه د هایبرډ ګروپ ټیم لخوا رامینځته شوی یو ریپر سره مخ شوم. پدې مقاله کې ، زه به تاسو ته وښیم چې څنګه د هار کاسکیډز سره د مخ پیژندنې ساده سیسټم رامینځته کولو سره د GoCV سره پیل کول.

Skillbox وړاندیز کوي: عملي کورس "د پایتون پراختیا کونکی له پیل څخه".

موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.

څه شی دی:

  • ځو؛
  • OpenCV (لاندې د نصب کونکي لینکونه)؛
  • ویب یا منظم ویډیو کیمره.

د جوړولو

د مثال په 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()

اوس موږ اړتیا لرو چې یو n-dimensional matrix جوړ کړو. دا به د کیمرې څخه لوستل شوي عکسونه ذخیره کړي.

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
     }
.
.
.
}

اوس تاسو اړتیا لرئ په جوړه شوې کړکۍ کې چوکاټ ښکاره کړئ. بل چوکاټ ته د تګ لپاره وقفه 50 ms ده.

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

د غوښتنلیک په لاره اچولو وروسته ، د کیمرې څخه د ویډیو جریان سره یوه کړکۍ به خلاص شي.

د ګولنګ او OpenCV پر بنسټ د مخ پیژندنې سیسټم جوړول

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

په دې مثال کې، راځئ چې پخوانی مثال وکاروو او د هار کاسکیډز پر بنسټ د مخ پیژندنې سیسټم جوړ کړو.

د هار کاسکیډونه د cascade طبقه بندي کونکي دي چې د هار ویولیټ تخنیک په کارولو سره روزل کیږي. دوی په عکس کې پکسلونه تحلیلوي ترڅو ځینې ځانګړتیاوې ومومي. د Haar Cascades په اړه د نورو معلوماتو لپاره، مهرباني وکړئ لاندې لینکونه تعقیب کړئ.

Viola-Jones د اعتراض کشف چوکاټ
کاسکیډینګ طبقه بندي
د هار په څیر ځانګړتیا

دمخه روزل شوي کاسکیډونه ډاونلوډ کړئ دلته کیدی شي. په اوسني مثال کې، cascades به د مخ څخه د یو شخص د مخ پیژندلو لپاره وکارول شي.

د دې کولو لپاره ، تاسو اړتیا لرئ یو کټګوري جوړ کړئ او دا دمخه روزل شوي فایل ته تغذیه کړئ (د پورته لینک لینک ورکړل شوی). ما دمخه د 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)
}

د ګولنګ او OpenCV پر بنسټ د مخ پیژندنې سیسټم جوړول

د ګولنګ او OpenCV پر بنسټ د مخ پیژندنې سیسټم جوړول

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

Add a comment