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.
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.
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.
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.
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ị.
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)
}
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.