Ṣiṣe eto idanimọ oju ti o da lori Golang ati OpenCV

Ṣiṣe eto idanimọ oju ti o da lori Golang ati OpenCV
OpenCV jẹ ile-ikawe ti o dagbasoke fun awọn iṣẹ akanṣe iran kọnputa. Ó ti pé ọmọ ogún ọdún. Mo lo ni kọlẹji ati pe Mo tun lo fun awọn iṣẹ akanṣe C ++ ati Python nitori pe o ni atilẹyin to dara fun awọn ede yẹn.

Ṣugbọn nigbati mo bẹrẹ ẹkọ ati lilo Go, Mo ṣe iyalẹnu boya OpenCV le ṣee lo lati ṣiṣẹ pẹlu ede yii. Ni akoko yẹn awọn apẹẹrẹ ati awọn ikẹkọ wa tẹlẹ lori isọpọ, ṣugbọn o dabi fun mi pe wọn jẹ idiju pupọ. Ni igba diẹ, Mo wa kọja a murasilẹ ti a ṣẹda nipasẹ The Hybrid Group. Ninu nkan yii, Emi yoo fihan ọ bi o ṣe le bẹrẹ pẹlu GoCV nipa idagbasoke eto idanimọ oju ti o rọrun pẹlu Haar Cascades.

Skillbox ṣe iṣeduro: Ilana ti o wulo "Olùgbéejáde Python lati ibere".

A leti: fun gbogbo awọn oluka ti "Habr" - ẹdinwo ti 10 rubles nigbati o forukọsilẹ ni eyikeyi iṣẹ-ẹkọ Skillbox nipa lilo koodu ipolowo “Habr”.

Ohun ti o nilo:

  • Lọ;
  • OpenCV (awọn ọna asopọ si insitola ni isalẹ);
  • ayelujara tabi deede oniṣẹmeji.

eto

Apẹẹrẹ 1

Ni apẹẹrẹ akọkọ, a yoo gbiyanju lati ṣẹda ohun elo kan ti o ṣi window pẹlu ṣiṣan fidio kamẹra kan.

Ni akọkọ o nilo lati gbe wọle awọn ile-ikawe ti o nilo lati ṣiṣẹ.

gbe wọle (
"logi"
"gocv.io/x/gocv"
)

Lẹhin iyẹn, o nilo lati ṣẹda ohun elo VideoCapture nipa lilo iṣẹ VideoCaptureDevice. Igbẹhin jẹ ki o ṣee ṣe lati mu ṣiṣan fidio kan nipa lilo kamẹra kan. Iṣẹ naa gba odidi bi paramita (o duro fun ID ẹrọ).

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

Bayi a nilo lati ṣẹda matrix n-onisẹpo. Yoo tọju awọn aworan ti a ka lati kamẹra.

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

Lati ṣe afihan ṣiṣan fidio, o nilo lati ṣẹda window kan - eyi le ṣee ṣe nipa lilo iṣẹ NewWindow.

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

Bayi jẹ ki a lọ si apakan ti o nifẹ julọ.

Niwọn bi fidio naa ti jẹ ṣiṣan lilọsiwaju ti awọn fireemu aworan, a yoo nilo lati ṣẹda lupu ailopin lati ka ṣiṣan fidio kamẹra ni ailopin. Eyi nilo ọna kika ti iru VideoCapture. Yoo nireti iru Mat kan (matrix ti a ṣẹda loke), ti o pada bolianu kan ti o nfihan boya fireemu kan lati VideoCapture ti ka ni aṣeyọri tabi rara.

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

Bayi a nilo lati ṣafihan fireemu ni window ti o ṣẹda. Sinmi lati gbe si tókàn fireemu - 50 ms.

window.IMShow(img)
window.WaitKey(50)

Lẹhin ifilọlẹ ohun elo naa, window kan pẹlu ṣiṣan fidio lati kamẹra yoo ṣii.

Ṣiṣe eto idanimọ oju ti o da lori Golang ati 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)
}
}

Apẹẹrẹ 2

Ninu apẹẹrẹ yii, jẹ ki a lo apẹẹrẹ iṣaaju ki a kọ eto idanimọ oju ti o da lori Haar Cascades.

Awọn kasikedi Haar jẹ awọn kilasika cascaded ti o jẹ ikẹkọ ti o da lori ilana igbi igbi Haar. Wọn ṣe itupalẹ awọn piksẹli ni aworan lati wa awọn ẹya kan pato. Lati kọ diẹ sii nipa Haar Cascades, jọwọ tẹle awọn ọna asopọ ni isalẹ.

Viola-Jones ilana wiwa ohun
Cascading classifiers
Haar-bi ẹya-ara

Ṣe igbasilẹ awọn kasikedi ti oṣiṣẹ tẹlẹ le wa nibi. Ninu apẹẹrẹ lọwọlọwọ, awọn kasikedi yoo ṣee lo lati ṣe idanimọ oju eniyan ni iwaju.

Lati le ṣe eyi, o nilo lati ṣẹda olutọpa kan ki o jẹ ifunni faili ti o ti ni ikẹkọ tẹlẹ (ọna asopọ ni a fun ni oke). Mo ti gbe faili pencv_haarcascade_frontalface_default.xml silẹ tẹlẹ si itọsọna nibiti eto wa wa.

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

Lati ṣe awari awọn oju ni aworan, o nilo lati lo ọna naa DetectMultiScale. Iṣẹ yii gba fireemu kan (ti iru Mat) ti o ṣẹṣẹ ka lati inu ṣiṣan fidio kamẹra ati dapada ọpọlọpọ iru onigun mẹta. Iwọn titobi naa duro fun nọmba awọn oju ti classifier ni anfani lati rii ninu fireemu naa. Lẹhinna, lati rii daju pe a rii ohun ti o rii, jẹ ki a ṣe atunwo nipasẹ atokọ ti awọn onigun mẹrin ki o tẹ ohun elo Rectangle si console, ṣiṣẹda aala ni ayika igun onigun ti a rii. Eyi le ṣee ṣe nipa lilo iṣẹ onigun. Yoo gba Mat ka nipasẹ kamẹra, ohun onigun ti o pada nipasẹ ọna DetectMultiScale, ati awọ ati sisanra fun aala.

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

Ṣiṣe eto idanimọ oju ti o da lori Golang ati OpenCV

Ṣiṣe eto idanimọ oju ti o da lori Golang ati 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)
}
}

Ati ... bẹẹni, ohun gbogbo ṣiṣẹ jade! Bayi a ni eto idanimọ oju ti o rọrun ti a kọ ni Go. Ni ọjọ iwaju to sunmọ, Mo gbero lati tẹsiwaju awọn adanwo wọnyi ati ṣẹda awọn ohun tutu tuntun nipa apapọ Go ati OpenCV.

Ti o ba nifẹ, jọwọ ṣe oṣuwọn gRPC olupin ayelujara, eyiti mo ko ni Python ati OpenCV. O san data ni kete ti a ti rii oju kan. Eyi ni ipilẹ fun ṣiṣẹda awọn alabara oriṣiriṣi ni awọn ede siseto oriṣiriṣi. Wọn yoo ni anfani lati sopọ si olupin naa ki o ka data lati inu rẹ.

O ṣeun fun kika nkan naa!

Skillbox ṣe iṣeduro:

orisun: www.habr.com

Fi ọrọìwòye kun