
OpenCV dia tranomboky natao ho an'ny tetikasa fahitana solosaina. Efa 20 taona eo ho eo izy. Nampiasa azy tany amin'ny oniversite aho ary mbola mampiasa azy io ho an'ny tetikasa C ++ sy Python satria manana fanohanana tsara ho an'ireo fiteny ireo.
Saingy rehefa nanomboka nianatra sy nampiasa ny Go aho dia nanjary liana tamin'ny hoe azo ampiasaina amin'ny fampiasana io fiteny io ny OpenCV. Tamin'izany fotoana izany dia efa nisy ohatra sy fampianarana momba ny fampidirana, saingy toa sarotra be izany. Fotoana fohy taorian'izay dia nahita fonon-javatra noforonin'ny ekipa The Hybrid Group aho. Ato amin'ity lahatsoratra ity, hasehoko anao ny fomba hanombohana amin'ny GoCV amin'ny alàlan'ny famolavolana rafitra famantarana endrika tsotra miaraka amin'i Haar Cascades.
Skillbox dia manoro hevitra: Mazava ho azy .
Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".
Ny zavatra takiana:
- Mandehana;
- OpenCV (rohy installer etsy ambany);
- tranonkala na fakan-tsary mahazatra.
fametrahana
- Linux:
- macOS:
- Windows:
ohatra 1
Ao amin'ny ohatra voalohany, dia hiezaka ny hamorona fampiharana izay manokatra varavarankely mampiseho ny fakan-tsary stream.
Voalohany dia mila manafatra ireo tranomboky ilaina amin'ny asa ianao.
import (
"log"
"gocv.io/x/gocv"
)
Aorian'izany dia mila mamorona zavatra VideoCapture ianao amin'ny fampiasana ny fiasa VideoCaptureDevice. Ity farany dia ahafahana maka sary mihetsika amin'ny alàlan'ny fakantsary. Ny fiasa dia mampiasa integer ho mari-pamantarana (misolo tena ny ID fitaovana izany).
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil { log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()Ankehitriny dia mila mamorona matrix n-dimensional isika. Hitahiry sary vakiana avy amin'ny fakantsary izany.
img := gocv.NewMat()
defer img.Close()Mba hampisehoana horonan-tsary dia mila mamorona varavarankely ianao - azo atao izany amin'ny alàlan'ny fiasa NewWindow.
window := gocv.NewWindow(“webcamwindow”)
defer window.Close()Andeha isika hifindra any amin'ny ampahany mahaliana indrindra.
Satria ny horonan-tsary dia rindran-tsary mitohy, dia mila mamorona tady tsy manam-petra isika mba hamakiana tsy misy farany ny onjan-dahatsary an'ny fakantsary. Mba hanaovana izany dia mila ny fomba Mamaky ny karazana VideoCapture. Hanantena karazana Mat (ny matrix noforoninay etsy ambony) izy io, mamerina sanda boolean manondro raha novakiana soa aman-tsara na tsia ny frame avy amin'ny VideoCapture.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(“Unable to read from the webcam”) continue
}
.
.
.
}Ankehitriny dia mila mampiseho ny frame ao amin'ny varavarankely noforonina ianao. Ny fiatoana amin'ny fifindran'ny sary manaraka dia 50 ms.
window.IMshow(img)
window.WaitKey(50)
Aorian'ny fandefasana ny fampiharana dia hisokatra ny varavarankely misy horonan-tsary avy amin'ny fakantsary.

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)
}
}ohatra 2
Amin'ity ohatra ity, andao hampiasa ny ohatra teo aloha ary hanangana rafitra famantarana ny tarehy mifototra amin'ny Haar Cascades.
Haar cascades dia mpanasokajy cascade izay voaofana amin'ny teknika wavelet Haar. Manadihady ny piksel amin'ny sary iray izy ireo mba hamantarana ny endri-javatra sasany. Raha te hahalala bebe kokoa momba ny Haar Cascades, araho azafady ny rohy eto ambany.
Misintona cascade efa voaofana . Amin'ny ohatra amin'izao fotoana izao, ny cascades dia hampiasaina hamantarana ny endrik'olona iray avy eo anoloana.
Mba hanaovana izany dia mila mamorona classifier ianao ary mamahana azy amin'ny rakitra efa voaofana (ny rohy dia omena etsy ambony). Efa nampiakatra ny rakitra pencv_haarcascade_frontalface_default.xml ho any amin'ny lahatahiry misy ny programantsika aho.
harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()Mba hamantarana tarehy amin'ny sary, dia mila mampiasa ny fomba . Ity fiasa ity dia maka frame (karazana Mat) izay vao avy novakiana avy amin'ny horonan-tsarimihetsika fakantsary ary mamerina karazana Rectangle maromaro. Ny haben'ny array dia maneho ny isan'ny endrika azon'ny mpanasokajy hita ao amin'ny frame. Avy eo, mba hahazoana antoka fa hahita izay hitany isika, andao hiverina amin'ny lisitry ny mahitsizoro ary manonta ny zavatra Rectangle amin'ny console, mamorona sisintany manodidina ny mahitsizoro hita. Izany dia azo atao amin'ny fampiasana ny asa Rectangle. Hanaiky ny Mat vakian'ny fakantsary, ny zavatra Rectangle izay naverin'ny fomba DetectMultiScale, ny loko sy ny hatevin'ny sisintany.
for _, r := range rects {
fmt.Println(“detected”, r)
gocv.Rectangle(&img, r, color, 2)
} 

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)
}
}Ary... eny, nandeha ny zava-drehetra! Manana rafi-pamantaran-tava tsotra voasoratra ao amin'ny Go isika izao. Tsy ho ela dia mikasa ny hanohy ireo andrana ireo aho ary hamorona zavatra mahafinaritra vaovao amin'ny fampifangaroana ny Go sy ny OpenCV.
Raha liana ianao dia mba omeo naoty , izay nosoratako tamin'ny Python sy OpenCV. Mandefa angona izy io rehefa misy endrika hita. Izany no fototry ny famoronana mpanjifa samihafa amin'ny fiteny fandaharana samihafa. Ho afaka hifandray amin'ny mpizara izy ireo ary hamaky ny angona avy aminy.
Misaotra anao namaky ny lahatsoratra!
Skillbox dia manoro hevitra:
- Taranja azo ampiharina roa taona .
- Fampianarana an-tserasera .
- Taranja fanao isan-taona .
Source: www.habr.com
