I-OpenCV iwumtapo wolwazi oklanyelwe amaphrojekthi ombono wekhompyutha. Useneminyaka engaba ngu-20. Ngayisebenzisa ekolishi futhi ngisayisebenzisela amaphrojekthi wami we-C++ kanye nePython ngoba inokusekelwa okuhle kwalezo zilimi.
Kodwa lapho ngiqala ukufunda nokusebenzisa i-Go, ngaba nentshisekelo yokuthi i-OpenCV ingasetshenziswa yini ukusebenza ngalolu limi. Ngaleso sikhathi, kwase kunezibonelo kanye nezifundo zokuhlanganisa, kodwa kwakubonakala sengathi zaziyinkimbinkimbi kakhulu. Kamuva, ngahlangana ne-wrapper eyakhiwe ithimba le-The Hybrid Group. Kulesi sihloko, ngizokukhombisa ukuthi ungaqala kanjani nge-GoCV ngokwakha uhlelo olulula lokuqaphela ubuso nge-Haar Cascades.
I-Skillbox iyancoma: Isifundo esiwusizo
"Python developer kusukela ekuqaleni" .Siyakukhumbuza: kubo bonke abafundi be-"Habr" - isaphulelo sama-ruble angu-10 lapho ubhalisa kunoma yisiphi isifundo se-Skillbox usebenzisa ikhodi yephromoshini ethi "Habr".
Okudingayo:
- Hamba;
- OpenCV (izixhumanisi zesifaki ngezansi);
- iwebhu noma ikhamera yevidiyo evamile.
setting
- I-Linux:
gocv.io/getting-started/linux - i-macOS:
gocv.io/getting-started/macos - Windows:
gocv.io/getting-started/windows
Isibonelo se-1
Esibonelweni sokuqala, sizozama ukudala uhlelo lokusebenza oluvula iwindi elibonisa ukusakazwa kwevidiyo yekhamera.
Okokuqala udinga ukungenisa imitapo yolwazi edingekayo emsebenzini.
ngenisa (
"log"
“gocv.io/x/gocv”
)
Ngemuva kwalokhu, udinga ukudala into ye-VideoCapture usebenzisa umsebenzi we-VideoCaptureDevice. Lokhu kwakamuva kwenza kube nokwenzeka ukuthwebula ukusakazwa kwevidiyo kusetshenziswa ikhamera. Umsebenzi usebenzisa inombolo ephelele njengepharamitha (imele i-ID yedivayisi).
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil { log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()
Manje sidinga ukudala i-matrix engu-n-dimensional. Izogcina izithombe ezifundwa kukhamera.
img := gocv.NewMat()
defer img.Close()
Ukuze ubonise ukusakazwa kwevidiyo, udinga ukwakha iwindi - lokhu kungenziwa ngokusebenzisa umsebenzi we-NewWindow.
window := gocv.NewWindow(“webcamwindow”)
defer window.Close()
Manje ake siqhubekele engxenyeni ethakazelisa kakhulu.
Njengoba ividiyo iwukusakazwa okuqhubekayo kwamafreyimu ezithombe, sizodinga ukudala iluphu engapheli ukuze sifunde ngokungapheli ukusakaza kwevidiyo yekhamera. Ukuze wenze lokhu, udinga indlela yokufunda yohlobo lwe-VideoCapture. Izolindela uhlobo lwe-Mat (i-matrix esiyidalile ngenhla), ukubuyisela inani le-boolean elibonisa ukuthi uhlaka olusuka ku-VideoCapture lufundwe ngempumelelo noma cha.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(“Unable to read from the webcam”) continue
}
.
.
.
}
Manje udinga ukukhombisa ifreyimu efasiteleni elidaliwe. Ikhefu lokuya kuhlaka olulandelayo ngu-50 ms.
window.IMShow(img)
iwindi.WaitKey(50)
Ngemva kokwethula uhlelo, iwindi elinokusakaza kwevidiyo elivela kukhamera lizovuleka.
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)
}
}
Isibonelo se-2
Kulesi sibonelo, masisebenzise isibonelo sangaphambilini futhi sakhe isistimu yokuqaphela ubuso ngokusekelwe ku-Haar Cascades.
I-Haar cascades izigaba ze-cascade eziqeqeshwe kusetshenziswa indlela ye-Haar wavelet. Bahlaziya amaphikseli esithombeni ukuze bathole izici ezithile. Ukuze uthole okwengeziwe nge-Haar Cascades, sicela ulandele izixhumanisi ezingezansi.
Landa ama-cascade asevele aqeqeshiwe
Ukuze wenze lokhu, udinga ukwakha isihlukanisi futhi usinikeze ifayela eliqeqeshiwe kakade (isixhumanisi sinikezwe ngenhla). Sengivele ngililayishile ifayela le-pencv_haarcascade_frontalface_default.xml kumkhombandlela lapho uhlelo lwethu lukhona.
harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()
Ukuze uthole ubuso esithombeni, udinga ukusebenzisa indlela
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)
}
}
Futhi... yebo, konke kwaphumelela! Manje sinesistimu elula yokubona ubuso ebhalwe kokuthi Go. Maduze ngihlela ukuqhubeka nalezi zivivinyo futhi ngidale izinto ezintsha ezinhle ngokuhlanganisa i-Go ne-OpenCV.
Uma unentshisekelo, sicela ukale
Ngiyabonga ngokufunda lesi sihloko!
I-Skillbox iyancoma:
- Isifundo sokwenza iminyaka emibili
"Ngingumthuthukisi wewebhu we-PRO" .- Isifundo se-inthanethi semfundo
"Umthuthukisi we-Java ochwepheshe" .- Isifundo sonyaka esisebenzayo
"Unjiniyela we-PHP kusuka ku-0 kuye ku-PRO" .
Source: www.habr.com