OpenCV یو کتابتون دی چې د کمپیوټر لید پروژو لپاره ډیزاین شوی. هغه لا دمخه شاوخوا 20 کلن دی. ما دا په کالج کې کارولی او لاهم دا زما د C ++ او Python پروژو لپاره کاروم ځکه چې دا د دې ژبو لپاره ښه ملاتړ لري.
مګر کله چې ما زده کړه او د Go کارول پیل کړل، زه لیواله شوم چې ایا OpenCV د دې ژبې سره کار کولو لپاره کارول کیدی شي. په هغه وخت کې، د ادغام په اړه لا دمخه مثالونه او لارښوونې شتون درلود، مګر داسې ښکاري چې دوی خورا پیچلي وو. یو څه وروسته ، زه د هایبرډ ګروپ ټیم لخوا رامینځته شوی یو ریپر سره مخ شوم. پدې مقاله کې ، زه به تاسو ته وښیم چې څنګه د هار کاسکیډز سره د مخ پیژندنې ساده سیسټم رامینځته کولو سره د GoCV سره پیل کول.
Skillbox وړاندیز کوي: عملي کورس
"د پایتون پراختیا کونکی له پیل څخه" .موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.
څه شی دی:
- ځو؛
- OpenCV (لاندې د نصب کونکي لینکونه)؛
- ویب یا منظم ویډیو کیمره.
د جوړولو
- لینوکس:
gocv.io/getting-started/linux - macOS:
gocv.io/getting-started/macos - ونډوز:
gocv.io/getting-started/windows
د مثال په 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)
د غوښتنلیک په لاره اچولو وروسته ، د کیمرې څخه د ویډیو جریان سره یوه کړکۍ به خلاص شي.
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 په اړه د نورو معلوماتو لپاره، مهرباني وکړئ لاندې لینکونه تعقیب کړئ.
دمخه روزل شوي کاسکیډونه ډاونلوډ کړئ
د دې کولو لپاره ، تاسو اړتیا لرئ یو کټګوري جوړ کړئ او دا دمخه روزل شوي فایل ته تغذیه کړئ (د پورته لینک لینک ورکړل شوی). ما دمخه د pencv_haarcascade_frontalface_default.xml فایل ډایرکټر ته پورته کړی چیرې چې زموږ برنامه موقعیت لري.
harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()
په انځور کې د مخونو موندلو لپاره، تاسو باید دا طریقه وکاروئ
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 په ترکیب سره نوي ښه شیان رامینځته کړم.
که تاسو علاقه لرئ ، مهرباني وکړئ نرخ ورکړئ
د مقالې لوستلو لپاره مننه!
Skillbox وړاندیز کوي:
- دوه کلن عملي کورس
"زه د پرو ویب جوړونکی یم" .- تعلیمي آنلاین کورس
"د جاوا پرمخ وړونکی مسلک" .- یو کلن عملي کورس
"د پی ایچ پی جوړونکی له 0 څخه تر پرو" .
سرچینه: www.habr.com