Ngawangun sistem pangenal wajah dumasar kana Golang sareng OpenCV

Ngawangun sistem pangenal wajah dumasar kana Golang sareng OpenCV
OpenCV mangrupikeun perpustakaan anu dirancang pikeun proyék visi komputer. Umurna geus kira-kira 20 taun. I dipaké dina kuliah jeung masih make eta keur C ++ jeung proyék Python kuring sabab boga rojongan alus pikeun basa maranéhanana.

Tapi nalika kuring mimiti diajar sareng nganggo Go, kuring janten kabetot naha OpenCV tiasa dianggo pikeun damel sareng basa ieu. Waktu éta, geus aya conto na tutorials on integrasi, tapi seemed kuring yén maranéhna teuing pajeulit. Sakedap deui, kuring mendakan bungkus anu diciptakeun ku tim The Hybrid Group. Dina tulisan ieu, kuring bakal nunjukkeun anjeun kumaha ngamimitian GoCV ku ngamekarkeun sistem pangenal wajah anu sederhana sareng Haar Cascades.

Skillbox nyarankeun: Kursus praktis "Pamekar Python ti mimiti".

Kami ngingetan: pikeun sakabéh pamiarsa "Habr" - diskon 10 rubles nalika enrolling dina sagala Tangtu Skillbox ngagunakeun "Habr" kode promosi.

Anu anjeun peryogikeun:

  • Indit;
  • OpenCV (link installer handap);
  • web atawa kaméra video biasa.

setting

conto 1

Dina conto kahiji, urang bakal nyoba nyieun hiji aplikasi nu muka jandela mintonkeun stream video kaméra.

Mimiti anjeun kedah ngimpor perpustakaan anu diperyogikeun pikeun damel.

impor (
"log"
"gocv.io/x/gocv"
)

Saatos ieu, anjeun kedah nyiptakeun obyék VideoCapture nganggo pungsi VideoCaptureDevice. Anu terakhir ngamungkinkeun pikeun moto aliran pidéo nganggo kaméra. Fungsi ngagunakeun integer salaku parameter (eta ngagambarkeun ID alat).

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

Ayeuna urang kudu nyieun hiji matrix n-dimensi. Bakal nyimpen gambar dibaca tina kaméra.

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

Pikeun mintonkeun aliran video, Anjeun kudu nyieun jandela - ieu bisa dipigawé maké fungsi NewWindow.

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

Ayeuna hayu urang ngaléngkah ka bagian anu paling pikaresepeun.

Kusabab pidéo mangrupikeun aliran pigura gambar anu terus-terusan, urang kedah nyiptakeun gelung anu teu terbatas pikeun maca aliran pidéo kaméra sacara teu terbatas. Jang ngalampahkeun ieu, anjeun peryogi metode Baca tina jinis VideoCapture. Bakal nyangka tipe Mat (matrix kami dijieun di luhur), balik hiji nilai boolean nunjukkeun naha pigura ti VideoCapture ieu dibaca hasil atanapi henteu.

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

Ayeuna anjeun kudu mintonkeun pigura dina jandela dijieun. Jeda pikeun pindah ka pigura salajengna nyaéta 50 mdet.

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

Saatos ngaluncurkeun aplikasi, jandela sareng aliran pidéo tina kaméra bakal dibuka.

Ngawangun sistem pangenal wajah dumasar kana Golang sareng 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)
}
}

conto 2

Dina conto ieu, hayu urang nganggo conto sateuacana sareng ngawangun sistem pangenal wajah dumasar kana Haar Cascades.

Kaskade Haar mangrupikeun klasifikasi kaskade anu dilatih ngagunakeun téknik wavelet Haar. Aranjeunna nganalisis piksel dina hiji gambar pikeun ngadeteksi fitur nu tangtu. Kanggo inpo nu langkung lengkep ihwal Haar Cascades, mangga tuturkeun tautan di handap ieu.

Viola-Jones kerangka deteksi obyék
Klasifikasi Cascading
fitur Haar-kawas

Unduh kaskade anu parantos dilatih tiasa didieu. Dina conto ayeuna, cascades bakal dipaké pikeun ngaidentipikasi beungeut hiji jalma ti hareup.

Jang ngalampahkeun ieu, anjeun kudu nyieun classifier sarta eupan eta hiji file geus dilatih (link dirumuskeun di luhur). Kuring geus diunggah file pencv_haarcascade_frontalface_default.xml ka diréktori tempat program urang.

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

Pikeun ngadeteksi rupa dina gambar, anjeun kedah nganggo metodeu DetectMultiScale. Pungsi ieu nyandak pigura (tipe Mat) nu karek maca tina aliran video kaméra sarta mulih Asép Sunandar Sunarya ti tipe Sagi opat. Ukuran Asép Sunandar Sunarya ngagambarkeun jumlah rupa nu classifier éta bisa ngadeteksi dina pigura. Lajeng, pikeun mastikeun urang ningali naon eta kapanggih, hayu urang iterate ngaliwatan daptar rectangles tur nyitak objék Rectangle kana konsol nu, nyieun wates sabudeureun sagi opat kauninga. Ieu tiasa dilakukeun nganggo fungsi Rectangle. Bakal nampa Mat dibaca ku kaméra, obyék Rectangle anu dipulangkeun ku métode DetectMultiScale, warna jeung ketebalan pikeun wates.

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

Ngawangun sistem pangenal wajah dumasar kana Golang sareng OpenCV

Ngawangun sistem pangenal wajah dumasar kana Golang sareng 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)
}
}

Jeung ... enya, sagalana digawé kaluar! Urang ayeuna boga sistem pangenal raray basajan ditulis dina Go. Moal lami deui abdi rencanana neruskeun percobaan ieu sarta nyieun hal tiis anyar ku ngagabungkeun Go jeung OpenCV.

Mun anjeun kabetot, mangga meunteun server wéb gRPC, anu kuring nyerat dina Python sareng OpenCV. Éta ngalirkeun data nalika aya wajah anu dideteksi. Ieu mangrupikeun dasar pikeun nyiptakeun klien anu béda dina basa pamrograman anu béda. Aranjeunna bakal tiasa nyambung ka server sareng maca data tina éta.

Hatur nuhun pikeun maca artikel!

Skillbox nyarankeun:

sumber: www.habr.com

Tambahkeun komentar