Tam sim no cia peb mus rau qhov nthuav tshaj plaws.
Txij li cov yeeb yaj kiab yog cov kwj tsis tu ncua ntawm cov duab thav ntawv, peb yuav tsum tsim kom muaj lub voj voog tsis kawg kom nyeem tsis tu ncua ntawm lub koob yees duab cov kwj video. Txhawm rau ua qhov no, koj xav tau Txoj Kev Nyeem Ntawv ntawm hom VideoCapture. Nws yuav cia siab tias yuav muaj hom Mat (cov matrix peb tau tsim los saum toj no), rov qab tus nqi boolean qhia seb lub thav duab los ntawm VideoCapture tau nyeem tau zoo lossis tsis tau.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(βUnable to read from the webcamβ) continue
}
.
.
.
}
Tam sim no koj yuav tsum tau tso saib tus ncej nyob rau hauv lub qhov rais tsim. Lub ncua kev txav mus rau lub thav duab tom ntej yog 50 ms.
windows.IMShow(img)
windows.WaitKey(50)
Tom qab tso tawm daim ntawv thov, lub qhov rais nrog cov kwj video los ntawm lub koob yees duab yuav qhib.
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)
}
}
Piv txwv li 2
Hauv qhov piv txwv no, cia peb siv qhov piv txwv yav dhau los thiab tsim kom muaj lub ntsej muag lees paub raws li Haar Cascades.
Haar cascades yog cascade classifiers uas tau kawm siv cov txheej txheem Haar wavelet. Lawv txheeb xyuas cov pixels hauv ib daim duab kom pom qee yam nta. Yog xav paub ntxiv txog Haar Cascades, thov ua raws li cov kev txuas hauv qab no.
Txhawm rau txheeb xyuas lub ntsej muag hauv daim duab, koj yuav tsum siv txoj hauv kev DetectMultiScale. Qhov kev ua haujlwm no yuav siv lub thav duab (hom Mat) uas nyuam qhuav nyeem los ntawm lub koob yees duab cov kwj video thiab xa rov qab ib qho array ntawm hom Rectangle. Qhov loj array sawv cev rau tus naj npawb ntawm lub ntsej muag uas tus classifier tuaj yeem ntes tau hauv tus ncej. Tom qab ntawd, kom paub tseeb tias peb pom dab tsi nws pom, cia peb rov qab los ntawm cov npe ntawm cov duab plaub thiab luam cov duab plaub rau lub console, tsim ib ciam teb nyob ib ncig ntawm cov duab plaub. Qhov no tuaj yeem ua tiav siv Rectangle muaj nuj nqi. Nws yuav lees txais Mat nyeem los ntawm lub koob yees duab, cov khoom Rectangle uas tau xa rov qab los ntawm txoj kev DetectMultiScale, xim thiab thickness rau ciam teb.
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)
}
}
Thiab ... yog, txhua yam ua tiav! Peb tam sim no muaj qhov yooj yim lub ntsej muag paub qhov system sau hauv Go. Tsis ntev kuv npaj yuav txuas ntxiv cov kev sim no thiab tsim cov tshiab tshiab los ntawm kev sib txuas Go thiab OpenCV.
Yog tias koj txaus siab, thov ntsuas gRPC web server, uas kuv tau sau hauv Python thiab OpenCV. Nws ntws cov ntaub ntawv thaum lub ntsej muag pom. Qhov no yog lub hauv paus tsim cov neeg siv khoom sib txawv hauv hom lus sib txawv. Lawv yuav tuaj yeem txuas rau lub server thiab nyeem cov ntaub ntawv los ntawm nws.