A’ togail siostam aithneachaidh aghaidh stèidhichte air Golang agus OpenCV

A’ togail siostam aithneachaidh aghaidh stèidhichte air Golang agus OpenCV
Is e leabharlann a th’ ann an OpenCV a chaidh a dhealbhadh airson pròiseactan lèirsinn coimpiutair. Tha i mu thràth mu 20 bliadhna a dh'aois. Chleachd mi e sa cholaiste agus bidh mi fhathast ga chleachdadh airson na pròiseactan C ++ agus Python agam leis gu bheil taic mhath aige dha na cànanan sin.

Ach nuair a thòisich mi ag ionnsachadh agus a’ cleachdadh Go, ghabh mi ùidh an gabhadh OpenCV a chleachdadh airson a bhith ag obair leis a’ chànan seo. Aig an àm sin, bha eisimpleirean ann mu thràth agus clasaichean teagaisg air amalachadh, ach bha e coltach riumsa gu robh iad ro iom-fhillte. Beagan nas fhaide air adhart, thàinig mi tarsainn air pasgan a chruthaich sgioba The Hybrid Group. San artaigil seo, seallaidh mi dhut mar a thòisicheas tu le GoCV le bhith a’ leasachadh siostam aithneachaidh aghaidh sìmplidh le Haar Cascades.

Tha Skillbox a’ moladh: Cùrsa practaigeach "Python leasaiche bhon toiseach".

Tha sinn a ’cur nar cuimhne: airson a h-uile leughadair de "Habr" - lasachadh de 10 rubles nuair a chlàraicheas tu ann an cùrsa sam bith Skillbox a 'cleachdadh a' chòd adhartachaidh "Habr".

Na tha a dhĂŹth:

  • Rach;
  • OpenCV (ceanglaichean stĂ laidh gu h-ĂŹosal);
  • lĂŹn no camara bhidio Ă bhaisteach.

suidheachadh

Mar eisimpleir 1

Anns a 'chiad eisimpleir, feuchaidh sinn ri tagradh a chruthachadh a dh'fhosglas uinneag a' sealltainn sruth bhidio camara.

An toiseach feumaidh tu na leabharlannan a tha a dhĂŹth airson obair a thoirt a-steach.

ion-phortadh (
"log"
“gocv.io/x/gocv”
)

Às deidh seo, feumaidh tu rud VideoCapture a chruthachadh a’ cleachdadh gnìomh VideoCaptureDevice. Tha an tè mu dheireadh ga dhèanamh comasach sruth bhidio a ghlacadh a’ cleachdadh camara. Bidh an gnìomh a’ cleachdadh àireamh iomlan mar pharamadair (tha e a’ riochdachadh ID an uidheim).

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

A-nis feumaidh sinn matrix n-dimensional a chruthachadh. Bidh e a’ stòradh ìomhaighean air an leughadh bhon chamara.

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

Gus sruth bhidio a thaisbeanadh, feumaidh tu uinneag a chruthachadh - faodar seo a dhèanamh a ’cleachdadh gnìomh NewWindow.

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

A-nis gluaisidh sinn air adhart chun phĂ irt as inntinniche.

Leis gur e sruth leantainneach de fhrèamaichean ìomhaigh a th’ ann am bhidio, feumaidh sinn lùb gun chrìoch a chruthachadh gus sruth bhidio a’ chamara a leughadh gun chrìoch. Gus seo a dhèanamh, feumaidh tu an dòigh Leugh an seòrsa VideoCapture. Bidh dùil ri seòrsa Mat (am matrix a chruthaich sinn gu h-àrd), a ’tilleadh luach boolean a’ nochdadh an deach am frèam bhon VideoCapture a leughadh gu soirbheachail no nach deach.

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

A-nis feumaidh tu am frèam a thaisbeanadh san uinneag chruthaichte. Is e 50 ms an stad airson gluasad chun ath fhrèam.

uinneag.IMShow(img)
uinneag.WaitKey(50)

Às deidh an tagradh a chuir air bhog, fosglaidh uinneag le sruth bhidio bhon chamara.

A’ togail siostam aithneachaidh aghaidh stèidhichte air 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)
}
}

Mar eisimpleir 2

San eisimpleir seo, cleachdamaid an eisimpleir roimhe seo agus togaidh sinn siostam aithneachaidh aghaidh stèidhichte air Haar Cascades.

Tha cascades Haar nan luchd-seòrsachaidh cascade a tha air an trèanadh le bhith a’ cleachdadh innleachd tonn-tonn Haar. Bidh iad a’ sgrùdadh na piogsail ann an ìomhaigh gus feartan sònraichte a lorg. Gus tuilleadh fhaighinn a-mach mu Haar Cascades, feuch an lean thu na ceanglaichean gu h-ìosal.

Frèam lorg nithean Viola-Jones
Cascading classifiers
Feart coltach ri Haar

Luchdaich a-nuas cascades air an trèanadh mar-thà urrainn a bhith an seo. Anns an eisimpleir làithreach, thèid cascades a chleachdadh gus aghaidh neach aithneachadh bhon aghaidh.

Gus seo a dhèanamh, feumaidh tu seòrsaiche a chruthachadh agus faidhle a tha air a thrèanadh mar-thà a bhiadhadh (tha an ceangal gu h-àrd air a thoirt seachad). Tha mi mu thràth air am faidhle pencv_haarcascade_frontalface_default.xml a luchdachadh suas chun an eòlaire far a bheil am prògram againn suidhichte.

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

Gus aghaidhean a lorg ann an ìomhaigh, feumaidh tu an dòigh a chleachdadh Lorg MultiScale. Bidh an gnìomh seo a’ gabhail frèam (seòrsa Mat) a chaidh a leughadh dìreach bho shruth bhidio a’ chamara agus a’ tilleadh sreath de sheòrsa ceart-cheàrnach. Tha meud an t-sreath a’ riochdachadh na h-àireamh de aghaidhean a b’ urrainn don neach-seòrsachaidh a lorg san fhrèam. An uairsin, gus dèanamh cinnteach gum faic sinn na lorg sinn, rachamaid tron ​​​​liosta ceart-cheàrnach agus clò-bhuail an rud Rectangle air a’ chonsail, a’ cruthachadh crìoch timcheall air a’ cheart-cheàrnach a chaidh a lorg. Faodar seo a dhèanamh a’ cleachdadh an gnìomh Rectangle. Gabhaidh e ris a’ Mat air a leughadh leis a’ chamara, an nì Rectangle a chaidh a thilleadh leis an dòigh DetectMultiScale, an dath agus an tiugh airson a’ chrìch.

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

A’ togail siostam aithneachaidh aghaidh stèidhichte air Golang agus OpenCV

A’ togail siostam aithneachaidh aghaidh stèidhichte air 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... tha, dh'obraich a h-uile càil a-mach! Tha siostam aithneachaidh aghaidh sìmplidh againn a-nis sgrìobhte ann an Go. A dh’ aithghearr tha mi an dùil leantainn air adhart leis na deuchainnean sin agus rudan ùra fionnar a chruthachadh le bhith a’ cothlamadh Go agus OpenCV.

Ma tha ùidh agad, feuch an dèan thu measadh frithealaiche lìn gRP, a sgrìobh mi ann am Python agus OpenCV. Bidh e a’ sruthadh dàta cho luath ‘s a lorgar aghaidh. Tha seo na bhunait airson a bhith a’ cruthachadh luchd-dèiligidh eadar-dhealaichte ann an diofar chànanan prògramaidh. Bidh e comasach dhaibh ceangal ris an fhrithealaiche agus dàta a leughadh bhuaithe.

Tapadh leibh airson an artaigil a leughadh!

Tha Skillbox a’ moladh:

Source: www.habr.com

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster