Ho aha mokhoa oa ho lemoha sefahleho o thehiloeng ho Golang le OpenCV

Ho aha mokhoa oa ho lemoha sefahleho o thehiloeng ho Golang le OpenCV
OpenCV ke laebrari e etselitsoeng merero ea pono ea khomphutha. O se a le lilemo li ka bang 20. Ke e sebelisitse k'holejeng 'me ke ntse ke e sebelisa bakeng sa merero ea ka ea C ++ le Python hobane e na le tšehetso e ntle bakeng sa lipuo tseo.

Empa ha ke qala ho ithuta le ho sebelisa Go, ke ile ka ipotsa hore na OpenCV e ka sebelisoa ho sebetsa ka puo ena. Ka nako eo, mehlala le lithuto tsa ho kopanya li ne li se li ntse li le teng, empa ho 'na ho ne ho bonahala eka li rarahane haholo. Nakoana hamorao, ke ile ka kopana le sephutheloana se entsoeng ke The Hybrid Group. Sehloohong sena, ke tla u bontša mokhoa oa ho qala ka GoCV ka ho theha mokhoa o bonolo oa ho lemoha sefahleho ka Haar Cascades.

Skillbox e khothaletsa: Tsela e sebetsang "Moetsi oa Python ho tloha qalong".

Re hopotsa: bakeng sa babali bohle ba "Habr" - theolelo ea li-ruble tse 10 ha u ngolisa thupelong efe kapa efe ea Skillbox u sebelisa khoutu ea papatso ea "Habr".

Ho hlokahala eng:

  • Tsamaea;
  • OpenCV (lihokelo tsa ho kenya ka tlase);
  • web kapa camcorder e tlwaelehileng.

bophirima

mohlala 1

Mohlala oa pele, re tla leka ho etsa kopo e bulang fensetere ka molapo oa video oa khamera.

Pele u hloka ho kenya lilaebrari tseo u li hlokang ho sebetsa.

kenya (
"log"
“gocv.io/x/gocv”
)

Ka mor'a moo, o hloka ho etsa ntho ea VideoCapture u sebelisa mosebetsi oa VideoCaptureDevice. E qetellang e etsa hore ho khonehe ho hapa molaetsa oa video o sebelisa k'hamera. Ts'ebetso e nka palo e felletseng joalo ka parameter (e emela ID ea sesebelisoa).

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

Hona joale re hloka ho theha matrix a n-dimensional. E tla boloka litšoantšo tse baloang khamera.

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

Ho bonts'a molatsoana oa video, o hloka ho theha fensetere - sena se ka etsoa ka ts'ebetso ea NewWindow.

window := gocv.NewWindow(“webcamwindow”)
defer window.Close()

Joale ha re tsoeleng pele ho karolo e khahlisang haholo.

Kaha video ke letoto le tsoelang pele la liforeimi tsa litšoantšo, re tla hloka ho theha loop e sa feleng ho bala video ea kh'amera ka ho sa feleng. Sena se hloka mokhoa oa Bala oa mofuta oa VideoCapture. E tla lebella mofuta oa Mat (matrix eo re e entseng ka holimo), ho khutlisetsa boolean e bontšang hore na foreimi e tsoang ho VideoCapture e balile ka katleho kapa che.

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

Hona joale re hloka ho bonts'a foreimi ka fensetere e entsoeng. Emisa ho ea foreiming e latelang - 50 ms.

fensetere.IMShow(img)
fensetere.WaitKey(50)

Kamora ho qala ts'ebeliso, fensetere e nang le molapo oa video ho tsoa khamera e tla buleha.

Ho aha mokhoa oa ho lemoha sefahleho o thehiloeng ho Golang le 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)
}
}

mohlala 2

Mohlala ona, ha re sebeliseng mohlala o fetileng mme re hahe mokhoa oa ho lemoha sefahleho o thehiloeng ho Haar Cascades.

Haar cascades ke li-classifiers tsa cascaded tse koetlisitsoeng ho latela mokhoa oa Haar wavelet. Ba sekaseka lipikselse setšoantšong ho sheba likarolo tse itseng. Ho ithuta haholoanyane ka Haar Cascades, ka kopo latela likhokahano tse ka tlase.

Moralo oa ho lemoha lintho tsa Viola-Jones
Cascading classifiers
Tšobotsi e kang ea Haar

Khoasolla li-cascade tse seng li koetlisitsoe e ka ba mona. Mohlala oa hajoale, li-cascade li tla sebelisoa ho khetholla sefahleho sa motho ka pele.

E le hore u etse sena, u lokela ho theha classifier le ho e fepa faele e seng e koetlisitsoe (sehokelo se fanoe ka holimo). Ke se ke kentse faele ea pencv_haarcascade_frontalface_default.xml bukeng eo lenaneo la rona le leng teng.

harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

Ho lemoha lifahleho setšoantšong, u lokela ho sebelisa mokhoa DetectMultiScale. Ts'ebetso ena e nka foreime (ea mofuta oa Mat) e sa tsoa baloa video ea khamera mme e khutlisa mofuta oa Rectangle. Boholo ba sehlopha bo emela palo ea lifahleho tseo mohlophisi a khonneng ho li bona foreiming. Joale, ho etsa bonnete ba hore re bona seo e se fumaneng, a re ke re phete lethathamong la khutlonnetsepa ebe re hatisa ntho ea Rectangle ho console, re thehe moeli ho potoloha khutlonnetsepa e fumanoeng. Sena se ka etsoa ka ts'ebetso ea Rectangle. E tla nka Mat e baloang ke khamera, ntho ea Rectangle e khutliselitsoeng ke mokhoa oa DetectMultiScale, le 'mala le botenya bakeng sa moeli.

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

Ho aha mokhoa oa ho lemoha sefahleho o thehiloeng ho Golang le OpenCV

Ho aha mokhoa oa ho lemoha sefahleho o thehiloeng ho Golang le 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)
}
}

Mme ... e, tsohle li ile tsa sebetsa! Hona joale re na le mokhoa o bonolo oa ho lemoha sefahleho o ngotsoeng ho Go. Haufinyane, ke rera ho tsoela pele ka liteko tsena le ho theha lintho tse ncha tse pholileng ka ho kopanya Go le OpenCV.

Haeba o na le thahasello, ka kopo reiti Seva ea webo ea gRPC, eo ke e ngotseng ho Python le OpenCV. E tsamaisa data hang ha sefahleho se fumanoa. Ona ke motheo oa ho theha bareki ba fapaneng ka lipuo tse fapaneng tsa mananeo. Ba tla khona ho hokela ho seva mme ba bale data ho tsoa ho eona.

Ke leboha ho bala sehlooho seo!

Skillbox e khothaletsa:

Source: www.habr.com

Eketsa ka tlhaloso