Córas aitheantais aghaidh a thógáil bunaithe ar Golang agus OpenCV

Córas aitheantais aghaidh a thógáil bunaithe ar Golang agus OpenCV
Leabharlann is ea OpenCV atá deartha do thionscadail fís ríomhaire. Tá sí thart ar 20 bliain d'aois cheana féin. D'úsáid mé é sa choláiste agus fós úsáidim é le haghaidh mo thionscadail C++ agus Python mar go bhfuil tacaíocht mhaith aige do na teangacha sin.

Ach nuair a thosaigh mé ag foghlaim agus ag úsáid Go, chuir mé spéis ann an bhféadfaí OpenCV a úsáid chun oibriú leis an teanga seo. Ag an am sin, bhí samplaí agus ranganna teagaisc ar chomhtháthú cheana féin, ach ba chosúil dom go raibh siad ró-chasta. Beagán níos déanaí, tháinig mé trasna ar fhillteán a chruthaigh foireann The Hybrid Group. San Airteagal seo, taispeánfaidh mé duit conas tosú le GoCV trí chóras aitheantais aghaidh simplí a fhorbairt le Haar Cascades.

Molann Skillbox: Cúrsa praiticiúil "Forbróir Python ón tús".

Meabhraímid: do léitheoirí uile "Habr" - lascaine de 10 rúbal nuair a chláraíonn siad in aon chúrsa Scilbox ag baint úsáide as an gcód bolscaireachta "Habr".

Cad a theastaíonn:

  • Téigh;
  • OpenCV (naisc suiteálaí thíos);
  • ceamara gréasáin nó ceamara físe rialta.

Suiteáil

Sampla 1

Sa chéad shampla, déanfaimid iarracht feidhmchlár a chruthú a osclaíonn fuinneog a léiríonn sruth físeán ceamara.

Ar dtús ní mór duit na leabharlanna a theastaíonn don obair a allmhairiú.

allmhairiú (
"log"
“gocv.io/x/gocv”
)

Tar éis seo, ní mór duit rud VideoCapture a chruthú ag baint úsáide as an bhfeidhm VideoCaptureDevice. Leis an dara ceann is féidir sruth físeáin a ghabháil ag baint úsáide as ceamara. Úsáideann an fheidhm slánuimhir mar pharaiméadar (is ionann é agus aitheantas an ghléis).

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

Anois caithfimid maitrís n-tríthoiseach a chruthú. Stórálfaidh sé íomhánna a léifear ón gceamara.

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

Chun sruth físeáin a thaispeáint, ní mór duit fuinneog a chruthú - is féidir é seo a dhéanamh ag baint úsáide as an fheidhm NewWindow.

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

Anois, a ligean ar bogadh ar aghaidh go dtí an chuid is suimiúla.

Ós rud é gur sruth leanúnach frámaí íomhá é físeáin, beidh orainn lúb gan teorainn a chruthú chun sruth físeáin an cheamara a léamh gan deireadh. Chun seo a dhéanamh, ní mór duit an modh Léigh den chineál VideoCapture. Beidh sé ag súil le cineál Mat (an maitrís a chruthaigh muid thuas), luach boolean a thabhairt ar ais a léiríonn an ndearnadh an fráma ón VideoCapture a léamh go rathúil nó nach ea.

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

Anois ní mór duit an fráma a thaispeáint sa fhuinneog cruthaithe. Is é 50 ms an sos chun bogadh go dtí an chéad fhráma eile.

fuinneog.IMShow(img)
fuinneoige.WaitKey(50)

Tar éis duit an feidhmchlár a sheoladh, osclófar fuinneog le sruth físeáin ón gceamara.

Córas aitheantais aghaidh a thógáil bunaithe ar Golang agus 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)
}
}

Sampla 2

Sa sampla seo, déanaimis an sampla roimhe seo a úsáid agus córas aitheantais aghaidh a thógáil bunaithe ar Haar Cascades.

Is aicmitheoirí cascáideacha iad cascades Haar atá oilte ag baint úsáide as teicníc tonnlet Haar. Déanann siad anailís ar na picteilíní in íomhá chun gnéithe áirithe a bhrath. Chun tuilleadh a fháil amach faoi Haar Cascades, lean na naisc thíos le do thoil.

Creat braite réad Viola-Jones
Aicmitheoirí cascáideacha
Gné cosúil le Haar

Íosluchtaigh cascades oilte cheana féin is féidir a bheith anseo. Sa sampla reatha, bainfear úsáid as cascáidí chun aghaidh duine a aithint ón tosaigh.

Chun é seo a dhéanamh, ní mór duit aicmitheoir a chruthú agus comhad atá oilte cheana féin a thabhairt dó (tá an nasc tugtha thuas). Tá an comhad pencv_haarcascade_frontalface_default.xml uaslódáilte agam cheana chuig an eolaire ina bhfuil ár gclár suite.

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

Chun aghaidheanna in íomhá a bhrath, ní mór duit an modh a úsáid BraithMultiScale. Glacann an fheidhm seo fráma (cineál Mat) a léadh díreach ó shruth físeáin an cheamara agus cuireann sé sraith Dronuilleog cineál ar ais. Léiríonn méid an eagair líon na n-aghaidheanna a bhí an t-aicmitheoir in ann a bhrath sa fhráma. Ansin, chun a chinntiú go bhfeicimid cad a fuair sé, déanaimis athrá tríd an liosta dronuilleogach agus priontáil an réad Dronuilleog ar an gconsól, rud a chruthaíonn teorainn timpeall na dronuilleoige braite. Is féidir é seo a dhéanamh ag baint úsáide as an bhfeidhm Dronuilleog. Glacfaidh sé leis an Mat a léann an ceamara, an réad Dronuilleog a cuireadh ar ais leis an modh DetectMultiScale, an dath agus an tiús don teorainn.

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

Córas aitheantais aghaidh a thógáil bunaithe ar Golang agus OpenCV

Córas aitheantais aghaidh a thógáil bunaithe ar Golang agus 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)
}
}

Agus... sea, d'oibrigh gach rud amach! Tá córas simplí aitheantais aghaidhe againn anois scríofa in Go. Go gairid tá sé beartaithe agam leanúint leis na turgnaimh seo agus rudaí fionnuara nua a chruthú trí Go agus OpenCV a chomhcheangal.

Má tá suim agat, déan rátáil freastalaí gréasáin gRP, a scríobh mé i Python agus OpenCV. Sruthaíonn sé sonraí an nóiméad a bhraitear aghaidh. Is é seo an bonn chun cliaint éagsúla a chruthú i dteangacha ríomhchlárúcháin éagsúla. Beidh siad in ann ceangal leis an bhfreastalaí agus sonraí a léamh uaidh.

Go raibh maith agat as an alt a léamh!

Molann Skillbox:

Foinse: will.com

Add a comment