Tsim kom muaj lub ntsej muag lees paub raws li Golang thiab OpenCV

Tsim kom muaj lub ntsej muag lees paub raws li Golang thiab OpenCV
OpenCV yog ib lub tsev qiv ntawv tsim los rau cov khoos phis tawj pom kev. Nws twb muaj 20 xyoo lawm. Kuv siv nws hauv tsev kawm ntawv qib siab thiab tseem siv rau kuv cov haujlwm C ++ thiab Python vim nws muaj kev txhawb nqa zoo rau cov lus.

Tab sis thaum kuv pib kawm thiab siv Go, kuv xav paub seb OpenCV puas tuaj yeem siv los ua haujlwm nrog hom lus no. Lub sijhawm ntawd, twb muaj cov piv txwv thiab cov lus qhia txog kev sib koom ua ke, tab sis nws zoo li kuv tias lawv nyuaj heev. Ib me ntsis tom qab, kuv tuaj hla ib daim ntawv qhwv tsim los ntawm Pab Pawg Hybrid. Hauv tsab xov xwm no, kuv yuav qhia koj yuav ua li cas pib nrog GoCV los ntawm kev txhim kho lub ntsej muag pom kev yooj yim nrog Haar Cascades.

Skillbox pom zoo: Cov chav kawm siv tau "Python developer los ntawm kos".

Peb nco qab: rau txhua tus neeg nyeem Habr - 10 ruble luv nqi thaum tso npe rau hauv ib chav kawm Skillbox siv Habr promo code.

Yuav tsum ua li cas:

  • Mus;
  • OpenCV (installer txuas hauv qab no);
  • lub vev xaib lossis lub koob yees duab yees duab tsis tu ncua.

chaw

Piv txwv li 1

Hauv thawj qhov piv txwv, peb yuav sim tsim ib daim ntawv thov uas qhib lub qhov rais uas qhia lub koob yees duab yees duab kwj.

Ua ntej koj yuav tsum tau import cov tsev qiv ntawv xav tau rau kev ua haujlwm.

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

Tom qab no, koj yuav tsum tsim ib qho VideoCapture khoom siv VideoCaptureDevice muaj nuj nqi. Qhov kawg ua rau nws tuaj yeem ntes cov kwj video siv lub koob yees duab. Txoj haujlwm siv tus lej suav ua qhov ntsuas (nws sawv cev rau tus lej ID).

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

Tam sim no peb yuav tsum tsim ib qho n-dimensional matrix. Nws yuav khaws cov duab nyeem los ntawm lub koob yees duab.

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

Txhawm rau tso tawm cov kwj video, koj yuav tsum tsim lub qhov rais - qhov no tuaj yeem ua tiav siv NewWindow muaj nuj nqi.

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

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.

Tsim kom muaj lub ntsej muag lees paub raws li Golang thiab 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)
}
}

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.

Viola-Jones object detection moj khaum
Cascading classifiers
Haar zoo li feature

Download twb kawm cascades yuav nyob ntawm no. Hauv qhov piv txwv tam sim no, cascades yuav raug siv los txheeb xyuas tus neeg lub ntsej muag ntawm sab xub ntiag.

Txhawm rau ua qhov no, koj yuav tsum tsim ib qho kev faib tawm thiab pub nws cov ntaub ntawv kawm tiav (qhov txuas tau muab rau saum toj). Kuv twb tau xa cov ntaub ntawv pencv_haarcascade_frontalface_default.xml mus rau cov npe uas peb qhov kev pab cuam nyob.

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

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

Tsim kom muaj lub ntsej muag lees paub raws li Golang thiab OpenCV

Tsim kom muaj lub ntsej muag lees paub raws li Golang thiab 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)
}
}

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.

Ua tsaug rau koj nyeem tsab xov xwm!

Skillbox pom zoo:

Tau qhov twg los: www.hab.com

Ntxiv ib saib