Fausia se faiga e iloagofie ai foliga e fa'avae ile Golang ma OpenCV

Fausia se faiga e iloagofie ai foliga e fa'avae ile Golang ma OpenCV
O le OpenCV ose faletusi ua fa'atulagaina mo galuega fa'atino va'ai komepiuta. Ua tusa nei ma le 20 tausaga o lona matua. Na ou faʻaaogaina i le kolisi ma faʻaaoga pea mo aʻu galuega C++ ma Python aua e lelei le lagolago mo na gagana.

Ae ina ua amata ona ou aʻoaʻoina ma faʻaaoga le Go, na amata ona ou fiafia pe mafai ona faʻaoga OpenCV e galue ai i lenei gagana. I lena taimi, ua uma ona i ai ni faʻataʻitaʻiga ma aʻoaʻoga i le tuʻufaʻatasia, ae na foliga mai ia te aʻu e faigata tele. I se taimi mulimuli ane, na ou tau atu ai i se afifi na faia e le vaega o le Hybrid Group. I lenei tusiga, o le a ou faʻaali atu ia te oe le auala e amata ai i le GoCV e ala i le atinaʻeina o se faiga faigofie e iloa ai foliga ma Haar Cascades.

Ua fautuaina e Skillbox: Kosi fa'ata'ita'i "Python developer mai le amataga".

Matou te faʻamanatu atu ia te oe: mo tagata faitau uma o le "Habr" - o se faʻaitiitiga o 10 rubles pe a lesitala i soʻo se vasega Skillbox e faʻaaoga ai le code promotional "Habr".

O mea e manaʻomia:

  • Alu;
  • OpenCV (faʻapipiʻi fesoʻotaʻiga i lalo);
  • 'upega tafaʻilagi poʻo mea puʻe vitio masani.

faatulagaga

faataitaiga 1

I le faʻataʻitaʻiga muamua, o le a matou taumafai e fai se talosaga e tatalaina ai se faʻamalama e faʻaalia ai se ata vitio vitio.

Muamua e tatau ona e fa'aulufale mai faletusi e mana'omia mo le galuega.

faaulufale mai (
“loga”
“gocv.io/x/gocv”
)

A maeʻa lenei mea, e tatau ona e fatuina se mea VitioCapture e faʻaaoga ai le galuega VideoCaptureDevice. O le mea mulimuli e mafai ai ona pu'eina se ata vitio e fa'aaoga ai se meapueata. E fa'aaogaina e le galuega le numera atoa e fai ma parakalafa (o lo'o fa'atusalia ai le ID masini).

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

Ole taimi nei e mana'omia ona tatou faia se matrix n-dimensional. O le a teuina ata faitau mai le meapueata.

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

Ina ia faʻaalia se ata vitio, e tatau ona e fatuina se faamalama - e mafai ona faia lenei mea e faʻaaoga ai le galuega NewWindow.

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

Se'i o tatou agai atu nei i le vaega e sili ona manaia.

Talu ai o le vitio o se tafega faifaipea o faʻavaa ata, e manaʻomia ona tatou fatuina se matasele e le gata e faitau ai e le uma le ata vitio a le meapueata. Ina ia faia lenei mea, e te manaʻomia le Faitau metotia o le ituaiga VideoCapture. O le a faʻamoemoeina se ituaiga Mat (le matrix na matou faia i luga), toe faʻafoʻi mai le tau o le boolean e faʻaalia ai pe na faitau manuia le faʻavaa mai le VideoCapture pe leai.

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

Ole taimi nei e tatau ona e faʻaalia le faʻavaa i le faamalama na faia. O le malolo mo le agai i le isi faavaa e 50 ms.

faamalama.IMSshow(img)
faamalama.WaitKey(50)

A maeʻa le faʻalauiloaina o le talosaga, o le a tatalaina se faʻamalama ma se vitio mai le mea pueata.

Fausia se faiga e iloagofie ai foliga e fa'avae ile Golang ma 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)
}
}

faataitaiga 2

I lenei faʻataʻitaʻiga, tatou faʻaoga le faʻataʻitaʻiga muamua ma fausia se faiga faʻaalia foliga e faʻavae i luga o Haar Cascades.

Haar cascades o cascade classifiers o loʻo aʻoaʻoina i le faʻaogaina o le Haar wavelet technique. Latou te suʻesuʻeina pixels i se ata e iloa ai nisi o foliga. Mo nisi fa'amatalaga e uiga i Haar Cascades, fa'amolemole mulimuli i so'oga i lalo.

Viola-Jones auivi su'esu'e mea
Fa'avasegaga fa'asolosolo
Faiga e pei o Haar

La'u mai i lalo cascade ua uma ona a'oa'oina mafai ona i ai. I le faʻataʻitaʻiga o loʻo i ai nei, o le a faʻaaogaina cascade e iloa ai foliga o se tagata mai luma.

Ina ia faia lenei mea, e tatau ona e fatuina se faʻavasegaina ma fafaga i se faila ua uma ona aʻoaʻoina (o loʻo tuʻuina atu le sootaga i luga). Ua uma ona ou lafoina le pencv_haarcascade_frontalface_default.xml faila i le lisi o loʻo i ai le matou polokalame.

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

Ina ia iloa foliga i se ata, e tatau ona e faʻaogaina le auala Su'esu'e Fa'atele. O lenei galuega e ave ai se faavaa (ituaiga Mat) lea faatoa faitau mai le ata vitio a le meapueata ma toe faafoi mai ai se vaega o ituaiga Rectangle. Ole lapo'a fa'atusa o lo'o fa'atusalia ai le aofa'i o foliga na mafai e le fa'avasegaga ona iloa ile fa'avaa. Ma, ina ia mautinoa tatou te vaʻai i mea na maua, seʻi o tatou faʻasolosolo i le lisi o rectangles ma lolomi le Rectangle mea i le faʻamafanafanaga, faia se tuaoi faataamilo i le rectangle iloa. E mafai ona faia lenei mea i le faʻaaogaina o le Rectangle function. O le a talia le Mat faitau e le mea pueata, o le Rectangle mea na toe faafoi mai e le DetectMultiScale metotia, le lanu ma le mafiafia mo le tuaoi.

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

Fausia se faiga e iloagofie ai foliga e fa'avae ile Golang ma OpenCV

Fausia se faiga e iloagofie ai foliga e fa'avae ile Golang ma 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)
}
}

Ma... ioe, sa lelei mea uma! Ua i ai nei se faiga faigofie e iloagofie ai foliga ua tusia i le Go. E le o toe mamao ae ou fuafua e faʻaauau nei faʻataʻitaʻiga ma faia ni mea manaia fou e ala i le tuʻufaʻatasia o Go ma OpenCV.

Afai e te fiafia, faamolemole fua mai gRPC web server, lea na ou tusia i le Python ma OpenCV. E fa'asalalau fa'amaumauga i le taimi e iloa ai se foliga. O le fa'avae lea mo le fatuina o tagata fa'atau eseese i gagana fa'apolokalame eseese. O le a mafai ona latou faʻafesoʻotaʻi i le 'auʻaunaga ma faitau faʻamatalaga mai ai.

Faafetai mo le faitauina o le tusiga!

Ua fautuaina e Skillbox:

puna: www.habr.com

Faaopoopo i ai se faamatalaga