Iwulite usoro njirimara ihu dabere na Golang na OpenCV

Iwulite usoro njirimara ihu dabere na Golang na OpenCV
OpenCV bụ ọba akwụkwọ emere maka ọrụ ọhụụ kọmputa. Ọ dịla ihe dị ka afọ iri abụọ. Eji m ya na kọleji ma ka na-ejikwa ya maka ọrụ C ++ na Python n'ihi na ọ nwere nkwado dị mma maka asụsụ ndị ahụ.

Mana mgbe m malitere ịmụ na iji Go, enwere m mmasị na OpenCV enwere ike iji asụsụ a rụọ ọrụ. N'oge ahụ, enweelarị ihe atụ na nkuzi gbasara njikọta, mana ọ dị m ka ọ dị mgbagwoju anya. Obere oge ka e mesịrị, ahụrụ m ihe mkpuchi nke ndị otu The Hybrid Group mepụtara. N'isiokwu a, m ga-egosi gị otu esi amalite na GoCV site na ịmepụta usoro njirimara ihu dị mfe na Haar Cascades.

Skillbox na-atụ aro: Usoro bara uru "Onye nrụpụta Python si ọkọ".

Anyị na -echetara: maka ndị na-agụ Habr niile - ego 10 ruble mgbe ị na-edebanye aha na nkuzi Skillbox ọ bụla site na iji koodu mgbasa ozi Habr.

Ihe achọrọ:

  • Gaa;
  • OpenCV (njikọ installer n'okpuru);
  • webụ ma ọ bụ igwefoto vidiyo oge niile.

ọnọdụ

atụ 1

N'ihe atụ nke mbụ, anyị ga-agbalị ịmepụta ngwa na-emepe windo na-egosi iyi vidiyo igwefoto.

Mbụ ị ga-ebubata ụlọ akwụkwọ ndị achọrọ maka ọrụ.

mbubata (
"log"
"gocv.io/x/gocv"
)

Mgbe nke a gasịrị, ịkwesịrị ịmepụta ihe VideoCapture site na iji ọrụ VideoCaptureDevice. Nke ikpeazụ na-eme ka o kwe omume iji igwefoto weghara iyi vidiyo. Ọrụ a na-eji ọnụọgụ dị ka paramita (ọ na-anọchite anya NJ ngwaọrụ).

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

Ugbu a, anyị kwesịrị ịmepụta matrix n-akụkụ. Ọ ga-echekwa foto ndị a gụrụ na igwefoto.

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

Iji gosipụta iyi vidiyo, ịkwesịrị ịmepụta windo - enwere ike ime nke a site na iji ọrụ NewWindow.

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

Ugbu a, ka anyị gaa n'ihu n'akụkụ kacha amasị.

Ebe ọ bụ na vidiyo bụ iyi na-aga n'ihu nke okpokolo agba onyonyo, anyị ga-achọ imepụta akaghị ngwụcha iji gụọ iyi vidiyo igwefoto na-enweghị ngwụcha. Iji mee nke a, ịchọrọ usoro ọgụgụ nke ụdị VideoCapture. Ọ ga-atụ anya ụdị Mat (matriks anyị kere n'elu), na-eweghachi uru boolean na-egosi ma a gụchara etiti si VideoCapture nke ọma ma ọ bụ na ọ bụghị.

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

Ugbu a ịkwesịrị igosipụta etiti ahụ na windo mepụtara. Nkwụsịtụ maka ịkwaga na etiti na-esote bụ 50 ms.

windo.IMShow(img)
window.ChereKey(50)

Mgbe ịmalitere ngwa ahụ, windo nwere iyi vidiyo sitere na igwefoto ga-emeghe.

Iwulite usoro njirimara ihu dabere na Golang na 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)
}
}

atụ 2

N'ihe atụ a, ka anyị jiri ihe atụ gara aga wee wulite usoro njirimara ihu dabere na Haar Cascades.

Haar cascades bụ nkesa cascade nke a zụrụ azụ site na iji usoro Haar wavelet. Ha na-enyocha pikselụ dị na onyonyo iji chọpụta ụfọdụ atụmatụ. Maka ịmatakwu gbasara Haar Cascades, biko soro njikọ dị n'okpuru.

Usoro nchọpụta ihe Viola-Jones
Klascading classifiers
Njirimara dị ka hear

Budata cascades zụrụ azụ nwere ike ịnọ ebe a. N'ihe atụ nke dị ugbu a, a ga-eji cascades mata ihu mmadụ site n'ihu.

Iji mee nke a, ịkwesịrị ịmepụta klas ma nye ya faịlụ a zụrụ azụ (njikọ enyere n'elu). Ebugola m faịlụ pencv_haarcascade_frontalface_default.xml na ndekọ ebe mmemme anyị dị.

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

Iji chọpụta ihu na onyonyo, ịkwesịrị iji usoro ahụ ChọpụtaMultiScale. Ọrụ a na-ewe fremu (ụdị Mat) nke a na-agụ ugbu a site na iyi vidiyo igwefoto wee weghachi ọtụtụ ụdị Rectangle. Nha n'usoro na-anọchi anya ọnụọgụ ihu nke classifier nwere ike ịchọpụta na fremu. Mgbe ahụ, iji jide n'aka na anyị hụrụ ihe ọ chọtara, ka anyị nyochaa site na listi rectangles wee bipụta ihe Rectangle na console, na-eke ókè gburugburu akụkụ anọ ahụ achọpụtara. Enwere ike ime nke a site na iji ọrụ Rectangle. Ọ ga-anabata Mat nke igwefoto na-agụ, ihe Rectangle nke usoro DetectMultiScale weghachiri, agba na ọkpụrụkpụ maka oke.

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

Iwulite usoro njirimara ihu dabere na Golang na OpenCV

Iwulite usoro njirimara ihu dabere na Golang na 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)
}
}

Na ... ee, ihe niile rụrụ! Ugbu a anyị nwere usoro njirimara ihu dị mfe edere na Go. N'oge na-adịghị anya, m na-eme atụmatụ ịga n'ihu na nnwale ndị a wee mepụta ihe ọhụrụ dị mma site na ijikọta Go na OpenCV.

Ọ bụrụ na ị nwere mmasị, biko tụọ gRPC sava weebụ, nke m dere na Python na OpenCV. Ọ na-ebunye data ozugbo achọpụtara ihu. Nke a bụ ntọala maka ịmepụta ndị ahịa dị iche iche n'asụsụ mmemme dị iche iche. Ha ga-enwe ike jikọọ na ihe nkesa wee gụọ data sitere na ya.

Daalụ maka ịgụ akụkọ ahụ!

Skillbox na-atụ aro:

isi: www.habr.com

Tinye a comment