
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 .
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
- Linux:
- macOS:
- Windows:
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.

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.
Luchdaich a-nuas cascades air an trèanadh mar-thà . 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 . 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)
} 

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 , 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:
- CĂšrsa practaigeach dĂ bhliadhna .
- CĂšrsa foghlaim air-loidhne .
- CĂšrsa bliadhna practaigeach .
Source: www.habr.com
