Kupanga makina ozindikira nkhope kutengera Golang ndi OpenCV

Kupanga makina ozindikira nkhope kutengera Golang ndi OpenCV
OpenCV ndi laibulale yopangidwira ma projekiti apakompyuta. Ali kale ndi zaka 20. Ndidagwiritsa ntchito ku koleji ndikuigwiritsabe ntchito pamapulojekiti anga a C ++ ndi Python chifukwa imathandizidwa bwino ndi zilankhulozo.

Koma nditayamba kuphunzira ndi kugwiritsa ntchito Go, ndidakhala ndi chidwi chofuna kudziwa ngati OpenCV ingagwiritsidwe ntchito chilankhulochi. Panthawiyo, panali kale zitsanzo ndi maphunziro ophatikizana, koma zinkawoneka kwa ine kuti zinali zovuta kwambiri. Patangopita nthawi pang'ono, ndidakumana ndi pepala lopangidwa ndi gulu la The Hybrid Group. M'nkhaniyi, ndikuwonetsani momwe mungayambire ndi GoCV popanga njira yosavuta yodziwira nkhope ndi Haar Cascades.

Skillbox imalimbikitsa: Njira yothandiza "Wopanga python kuyambira poyambira".

Tikukukumbutsani: kwa owerenga onse a Habr - kuchotsera ma ruble 10 polembetsa maphunziro aliwonse a Skillbox pogwiritsa ntchito nambala yotsatsira ya Habr.

Zofunika:

  • Pitani;
  • OpenCV (malumikizidwe oyika pansipa);
  • web kapena kanema kamera wamba.

kolowera

Mwachitsanzo 1

Muchitsanzo choyamba, tidzayesa kupanga pulogalamu yomwe imatsegula zenera lowonetsa kanema wa kanema wa kamera.

Choyamba muyenera kuitanitsa malaibulale ofunikira kuti mugwire ntchito.

itanitsa (
"chipika"
"gocv.io/x/gocv"
)

Pambuyo pake, muyenera kupanga chinthu cha VideoCapture pogwiritsa ntchito ntchito ya VideoCaptureDevice. Chotsatiracho chimapangitsa kuti zitheke kujambula kanema wa kanema pogwiritsa ntchito kamera. Ntchitoyi imagwiritsa ntchito nambala ngati gawo (imayimira ID ya chipangizo).

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

Tsopano tiyenera kupanga n-dimensional matrix. Idzasunga zithunzi zowerengedwa kuchokera ku kamera.

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

Kuti muwonetse kanema wa kanema, muyenera kupanga zenera - izi zitha kuchitika pogwiritsa ntchito NewWindow.

window := gocv.NewWindow(β€œwebcamwindow”)
defer window.Close()

Tsopano tiyeni tipite ku gawo losangalatsa kwambiri.

Popeza kanema ndi mtsinje wosalekeza wa mafelemu azithunzi, tidzafunika kupanga chipika chopanda malire kuti tiwerenge mosalekeza mavidiyo a kamera. Kuti muchite izi, muyenera Werengani njira ya mtundu wa VideoCapture. Idzayembekezera mtundu wa Mat (matrix omwe tapanga pamwambapa), kubwezera mtengo wa boolean wosonyeza ngati chimango chochokera ku VideoCapture chinawerengedwa bwino kapena ayi.

for {     
        if ok := webcam.Read(&img); !ok || img.Empty( {
        log.Println(β€œUnable to read from the webcam”)    continue
     }
.
.
.
}

Tsopano muyenera kusonyeza chimango mu analenga zenera. Kuima kwa kusunthira ku chimango china ndi 50 ms.

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

Pambuyo poyambitsa pulogalamuyi, zenera lokhala ndi kanema kuchokera ku kamera lidzatsegulidwa.

Kupanga makina ozindikira nkhope kutengera Golang ndi 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)
}
}

Mwachitsanzo 2

Muchitsanzo ichi, tiyeni tigwiritse ntchito chitsanzo cham'mbuyomu ndikupanga mawonekedwe ozindikira nkhope potengera Haar Cascades.

Ma cascades a Haar ndi magulu a cascade omwe amaphunzitsidwa pogwiritsa ntchito njira ya Haar wavelet. Amasanthula ma pixel pachithunzi kuti adziwe zina. Kuti mudziwe zambiri za Haar Cascades, chonde tsatirani maulalo omwe ali pansipa.

Njira yodziwira zinthu za Viola-Jones
Cascading classifiers
Chiwonetsero chofanana ndi Haar

Tsitsani makaseti ophunzitsidwa kale akhoza kukhala pano. Mu chitsanzo chamakono, ma cascades adzagwiritsidwa ntchito kuzindikira nkhope ya munthu kutsogolo.

Kuti muchite izi, muyenera kupanga classifier ndikudyetsa fayilo yophunzitsidwa kale (ulalo waperekedwa pamwambapa). Ndakweza kale fayilo ya pencv_haarcascade_frontalface_default.xml kumalo komwe pulogalamu yathu ili.

harrcascade := β€œopencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

Kuti muzindikire nkhope mu chithunzi, muyenera kugwiritsa ntchito njirayo DetectMultiScale. Ntchitoyi imatenga chimango (mtundu wa Mat) yomwe idangowerengedwa kuchokera pamakanema a kamera ndikubwezeretsanso mtundu wa Rectangle. Kukula kwamagulu kumayimira kuchuluka kwa nkhope zomwe wowerengerayo adatha kuzizindikira mu chimango. Kenako, kuti tiwonetsetse kuti tawona zomwe zapeza, tiyeni tibwereze pamndandanda wamakona anayi ndikusindikiza chinthu cha Rectangle ku kontrakitala, ndikupanga malire kuzungulira kakona komwe kapezeka. Izi zitha kuchitika pogwiritsa ntchito Rectangle. Ivomereza Mat yowerengedwa ndi kamera, chinthu cha Rectangle chomwe chinabwezedwa ndi njira ya DetectMultiScale, mtundu ndi makulidwe a malire.

for _, r := range rects {
fmt.Println(β€œdetected”, r)
gocv.Rectangle(&img, r, color, 2)
}

Kupanga makina ozindikira nkhope kutengera Golang ndi OpenCV

Kupanga makina ozindikira nkhope kutengera Golang ndi 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)
}
}

Ndipo ... inde, zonse zinayenda bwino! Tsopano tili ndi njira yosavuta yozindikiritsa nkhope yolembedwa mu Go. Posachedwa ndikukonzekera kupitiliza zoyesererazi ndikupanga zinthu zatsopano zoziziritsa kukhosi pophatikiza Go ndi OpenCV.

Ngati mukufuna, chonde perekani gRPC seva yapaintaneti, zomwe ndinalemba mu Python ndi OpenCV. Imayendetsa deta pomwe nkhope yadziwika. Awa ndiye maziko opangira makasitomala osiyanasiyana m'zilankhulo zosiyanasiyana zamapulogalamu. Adzatha kulumikiza ku seva ndikuwerenga deta kuchokera pamenepo.

Zikomo powerenga nkhaniyi!

Skillbox imalimbikitsa:

Source: www.habr.com

Kuwonjezera ndemanga