Kuvaka iyo yekuziva chiso system yakavakirwa paGolang uye OpenCV

Kuvaka iyo yekuziva chiso system yakavakirwa paGolang uye OpenCV
OpenCV iraibhurari yakagadzirirwa mapurojekiti ekuona komputa. Atova nemakore anenge makumi maviri. Ndakaishandisa kukoreji uye ndichiri kuishandisa kune yangu C ++ nePython mapurojekiti nekuti ine rutsigiro rwakanaka kumitauro iyoyo.

Asi pandakatanga kudzidza nekushandisa Go, ndakafarira kuziva kana OpenCV ingashandiswa kushanda nemutauro uyu. Panguva iyoyo, pakanga patove nemienzaniso uye zvidzidzo zvekubatanidza, asi zvaiita sekuti zvainge zvakanyanya kuomarara. Kwapera chinguva, ndakasangana nekapeta yakagadzirwa neThe Hybrid Group timu. Muchikamu chino, ini ndinokuratidza maitiro ekutanga neGoCV nekugadzira yakapusa yekuziva chiso system neHaar Cascades.

Skillbox inokurudzira: Nzira inoshanda "Python developer kubva pakutanga".

Tinoyeuchidza: kune vese vaverengi veHabr - a 10 ruble mutengo paunenge uchinyoresa mune chero Skillbox kosi uchishandisa iyo Habr promo kodhi.

Chii chinodiwa:

  • Go;
  • OpenCV (zvisungo zvinongedzo pazasi);
  • web kana yenguva dzose vhidhiyo kamera.

Kuiswa

muenzaniso 1

Mumuenzaniso wekutanga, isu tichaedza kugadzira application inovhura hwindo rinoratidza kamera vhidhiyo kuyerera.

Kutanga unofanira kupinza kunze maraibhurari anodiwa kubasa.

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

Mushure meizvi, unofanirwa kugadzira chinhu cheVideoCapture uchishandisa VideoCaptureDevice basa. Iyo yekupedzisira inoita kuti zvikwanise kutora vhidhiyo rwizi uchishandisa kamera. Basa racho rinoshandisa nhamba yakakwana separameter (inomiririra ID yemudziyo).

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

Iye zvino tinoda kugadzira n-dimensional matrix. Ichachengeta mifananidzo yakaverengwa kubva pakamera.

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

Kuti uratidze kuyerera kwevhidhiyo, unofanirwa kugadzira hwindo - izvi zvinogona kuitwa uchishandisa iyo NewWindow basa.

window := gocv.NewWindow(β€œwebcamwindow”)
defer window.Close()

Zvino ngatiendei kune chikamu chinonyanya kufadza.

Sezvo vhidhiyo iri kuenderera mberi kwemafuremu emifananidzo, isu tichada kugadzira isingaperi loop kuti tiverenge nekusingaperi vhidhiyo yekhamera. Kuti uite izvi, unoda nzira yeKuverenga yemhando yeVideoCapture. Inotarisira mhando yeMat (matrix yatakagadzira pamusoro), ichidzosa kukosha kweboolean kuratidza kana furemu kubva kuVideoCapture yakaverengwa zvakabudirira kana kwete.

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

Iye zvino unoda kuratidza furemu muhwindo rakagadzirwa. Kumbomira kwekuenda kune inotevera furemu ndeye 50 ms.

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

Mushure mekutangisa application, hwindo rine vhidhiyo rwizi kubva kamera rinovhura.

Kuvaka iyo yekuziva chiso system yakavakirwa paGolang uye 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)
}
}

muenzaniso 2

Mumuenzaniso uyu, ngatishandisei muenzaniso wekare uye tivake hurongwa hwekuzivikanwa kumeso kwakavakirwa paHaar Cascades.

Haar cascades ndeye cascade classifiers vanodzidziswa vachishandisa nzira yeHaar wavelet. Vanoongorora mapikseli mumufananidzo kuti vaone zvimwe zvinhu. Kuti uzive zvakawanda nezve Haar Cascades, ndapota tevera zvinongedzo pazasi.

Viola-Jones chinhu chekuona chimiro
Cascading classifiers
Haar-like chimiro

Dhaunirodha macascades akatodzidziswa unogona kuva pano. Mumuenzaniso wazvino, macascades achashandiswa kuratidza chiso chemunhu kubva kumberi.

Kuti uite izvi, unofanirwa kugadzira classifier uye kuidyisa iyo yakatodzidziswa faira (iyo link inopiwa pamusoro). Ndakatoisa pencv_haarcascade_frontalface_default.xml faira kudhairekitori uko chirongwa chedu chiripo.

harrcascade := β€œopencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

Kuti uone zviso mumufananidzo, unofanirwa kushandisa nzira DetectMultiScale. Iri basa rinotora furemu (type Mat) iyo ichangobva kuverengwa kubva kuvhidhiyo yekamera rwizi uye inodzosera rondedzero yemhando Rectangle. Saizi yehurongwa inomiririra huwandu hwezviso zvakakwanisa kuona mukirasi muchimiro. Zvadaro, kuti tive nechokwadi chokuti tinoona zvayakawana, ngatidzokororei kuburikidza nerondedzero yemakona uye kudhinda Rectangle chinhu kune console, tichigadzira muganho wakakomberedza rectangle yakaonekwa. Izvi zvinogona kuitwa uchishandisa Rectangle basa. Ichagamuchira Mat yakaverengwa nekamera, iyo Rectangle chinhu chakadzoserwa neDetectMultiScale nzira, ruvara uye ukobvu hwemuganhu.

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

Kuvaka iyo yekuziva chiso system yakavakirwa paGolang uye OpenCV

Kuvaka iyo yekuziva chiso system yakavakirwa paGolang uye 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)
}
}

Uye ... hongu, zvose zvakashanda! Isu tave nemaitiro akareruka ekuzivikanwa kwechiso akanyorwa muGo. Munguva pfupi ini ndinoronga kuenderera mberi nekuyedza uye kugadzira zvinhu zvitsva zvinotonhorera nekubatanidza Go uye OpenCV.

Kana uchifarira, ndapota reta gRPC web server, yandakanyora muPython uye OpenCV. Inofambisa data panguva iyo chiso chinoonekwa. Iyi ndiyo hwaro hwekugadzira vatengi vakasiyana mumitauro yakasiyana-siyana yekuronga. Vachakwanisa kubatana kune sevha uye kuverenga data kubva mairi.

Ndinokutendai nokuverenga nyaya yacho!

Skillbox inokurudzira:

Source: www.habr.com

Voeg