Mbangun sistem pangenalan pasuryan adhedhasar Golang lan OpenCV

Mbangun sistem pangenalan pasuryan adhedhasar Golang lan OpenCV
OpenCV minangka perpustakaan sing dirancang kanggo proyek visi komputer. Dheweke wis umur 20 taun. Aku digunakake ing College lan isih digunakake kanggo proyek C ++ lan Python amarga wis support apik kanggo basa sing.

Nanging nalika miwiti sinau lan nggunakake Go, aku dadi kasengsem apa OpenCV bisa digunakake kanggo nggarap basa iki. Ing wektu kasebut, wis ana conto lan tutorial babagan integrasi, nanging aku rumangsa rumit banget. Ora suwe, aku nemoni bungkus sing digawe dening tim The Hybrid Group. Ing artikel iki, aku bakal nuduhake sampeyan carane miwiti GoCV kanthi ngembangake sistem pangenalan pasuryan sing gampang karo Haar Cascades.

Skillbox nyaranake: Kursus praktis "Pengembang Python saka awal".

Kita ngelingake: kanggo kabeh sing maca "Habr" - diskon 10 rubel nalika ndhaptar kursus Skillbox nggunakake kode promosi "Habr".

Apa sing sampeyan butuhake:

  • Lunga;
  • OpenCV (pranala installer ing ngisor iki);
  • web utawa kamera video biasa.

Instalasi

contone 1

Ing conto pisanan, kita bakal nyoba nggawe aplikasi sing mbukak jendhela sing nuduhake stream video kamera.

Pisanan sampeyan kudu ngimpor perpustakaan sing dibutuhake kanggo kerja.

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

Sawise iki, sampeyan kudu nggawe obyek VideoCapture nggunakake fungsi VideoCaptureDevice. Sing terakhir ndadekake iku bisa kanggo njupuk stream video nggunakake kamera. Fungsi kasebut nggunakake integer minangka parameter (iku nuduhake ID piranti).

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

Saiki kita kudu nggawe matriks n-dimensi. Bakal nyimpen gambar sing diwaca saka kamera.

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

Kanggo nampilake stream video, sampeyan kudu nggawe jendhela - iki bisa rampung nggunakake fungsi NewWindow.

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

Saiki ayo pindhah menyang bagean sing paling menarik.

Wiwit video minangka aliran pigura gambar sing terus-terusan, kita kudu nggawe loop tanpa wates kanggo maca stream video kamera tanpa wates. Kanggo nindakake iki, sampeyan butuh metode Waca jinis VideoCapture. Bakal nyana jinis Mat (matriks kita digawe ndhuwur), bali Nilai boolean nuduhake apa pigura saka VideoCapture kasil maca utawa ora.

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

Saiki sampeyan kudu nampilake pigura ing jendhela sing digawe. Jeda kanggo pindhah menyang pigura sabanjure yaiku 50 ms.

window.IMshow(img)
window.WaitKey(50)

Sawise mbukak aplikasi, jendhela karo stream video saka kamera bakal mbukak.

Mbangun sistem pangenalan pasuryan adhedhasar Golang lan 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)
}
}

contone 2

Ing conto iki, ayo nggunakake conto sadurunge lan mbangun sistem pangenalan pasuryan adhedhasar Haar Cascades.

Kaskade Haar minangka klasifikasi kaskade sing dilatih nggunakake teknik wavelet Haar. Dheweke nganalisa piksel ing gambar kanggo ndeteksi fitur tartamtu. Kanggo ngerteni luwih akeh babagan Haar Cascades, tututi pranala ing ngisor iki.

Kerangka deteksi obyek Viola-Jones
Klasifikasi Cascading
Fitur kaya Haar

Download wis dilatih cascades bisa ono ing kene. Ing conto saiki, cascades bakal digunakake kanggo ngenali pasuryan wong saka ngarep.

Kanggo nindakake iki, sampeyan kudu nggawe classifier lan feed file sing wis dilatih (link diwenehi ing ndhuwur). Aku wis upload file pencv_haarcascade_frontalface_default.xml menyang direktori ngendi program kita dumunung.

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

Kanggo ndeteksi pasuryan ing gambar, sampeyan kudu nggunakake metode kasebut DeteksiMultiSkala. Fungsi iki njupuk pigura (jinis Mat) sing mung diwaca saka stream video kamera lan ngasilake macem-macem jinis Rectangle. Ukuran array nggambarake jumlah pasuryan sing bisa dideteksi dening classifier ing pigura. Banjur, kanggo mesthekake yen kita ndeleng apa sing ditemokake, ayo ngubengi dhaptar persegi dowo lan nyetak obyek Rectangle menyang konsol, nggawe wates ing sekitar persegi dowo sing dideteksi. Iki bisa ditindakake kanthi nggunakake fungsi Rectangle. Iku bakal nampa Mat diwaca dening kamera, obyek Rectangle sing bali dening cara DetectMultiScale, werna lan kekandelan kanggo wates.

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

Mbangun sistem pangenalan pasuryan adhedhasar Golang lan OpenCV

Mbangun sistem pangenalan pasuryan adhedhasar Golang lan 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)
}
}

Lan ... ya, kabeh wis rampung! Saiki kita duwe sistem pangenalan rai sing prasaja sing ditulis ing Go. Sakcepete aku arep nerusake eksperimen kasebut lan nggawe barang anyar sing keren kanthi nggabungake Go lan OpenCV.

Yen sampeyan kasengsem, please rate server web gRPC, sing daktulis ing Python lan OpenCV. Iki stream data nalika pasuryan dideteksi. Iki minangka basis kanggo nggawe klien sing beda ing macem-macem basa pemrograman. Dheweke bakal bisa nyambung menyang server lan maca data saka iku.

Matur nuwun kanggo maca artikel!

Skillbox nyaranake:

Source: www.habr.com

Add a comment