OpenCV китобхонаест, ки барои лоиҳаҳои биниши компютер пешбинӣ шудааст. Вай аллакай тақрибан 20-сола аст. Ман онро дар коллеҷ истифода кардам ва то ҳол онро барои лоиҳаҳои C++ ва Python истифода мебарам, зеро он барои ин забонҳо дастгирии хуб дорад.
Аммо вақте ки ман омӯхтан ва истифодаи Go-ро оғоз кардам, ман ба он шавқ пайдо кардам, ки оё OpenCV барои кор бо ин забон истифода мешавад. Он вақтҳо аллакай мисолҳо ва дастурҳои дарсӣ оид ба ҳамгироӣ вуҷуд доштанд, аммо ба назарам онҳо хеле печида буданд. Каме дертар, ман бо парпеччае дучор омадам, ки аз ҷониби дастаи Hybrid Group сохта шудааст. Дар ин мақола, ман ба шумо нишон медиҳам, ки чӣ гуна бо GoCV тавассути таҳияи системаи оддии шинохти чеҳра бо Haar Cascades оғоз кунед.
Skillbox тавсия медиҳад: Курси амалӣ
"Таҳиягари Python аз сифр" .Мо ба шумо хотиррасон мекунем: барои ҳамаи хонандагони "Habr" - тахфифи 10 000 рубл ҳангоми номнавис шудан ба курсҳои Skillbox бо истифода аз рамзи таблиғотии "Habr".
Чӣ бояд кард:
- Бирав;
- OpenCV (пайвандҳои насбкунанда дар зер);
- веб ё камераи видеоии муқаррарӣ.
параметр
- Linux:
gocv.io/getting-started/linux - macOS:
gocv.io/getting-started/macos - Windows:
gocv.io/getting-started/windows
Масалан 1
Дар мисоли аввал, мо кӯшиш мекунем, ки замимаеро эҷод кунем, ки равзанаи ҷараёни видеои камераро мекушояд.
Аввал шумо бояд китобхонаҳои барои кор заруриро ворид кунед.
воридот (
"лог"
"gocv.io/x/gocv"
)
Пас аз ин, шумо бояд бо истифода аз функсияи VideoCaptureDevice объекти VideoCapture эҷод кунед. Охирин имкон медиҳад, ки ҷараёни видеоро бо истифода аз камера сабт кунед. Функсия адади бутунро ҳамчун параметр истифода мебарад (он ID-и дастгоҳро ифода мекунад).
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil { log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()
Акнун мо бояд матритсаи n-ченака созем. Он тасвирҳои аз камера хондашударо нигоҳ медорад.
img := gocv.NewMat()
defer img.Close()
Барои намоиш додани ҷараёни видео, шумо бояд тиреза эҷод кунед - ин метавонад бо истифода аз функсияи NewWindow анҷом дода шавад.
window := gocv.NewWindow(“webcamwindow”)
defer window.Close()
Акнун биёед ба қисми ҷолибтарин мегузарем.
Азбаски видео ҷараёни пайвастаи чаҳорчӯбаҳои тасвирӣ аст, мо бояд як ҳалқаи беохир эҷод кунем, то ҷараёни видеои камераро беохир хонем. Барои ин ба шумо усули Read-и навъи VideoCapture лозим аст. Он намуди Матро интизор мешавад (матрисае, ки мо дар боло офаридаем), арзиши логикиро бармегардонад, ки оё чаҳорчӯба аз VideoCapture бомуваффақият хонда шудааст ё не.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(“Unable to read from the webcam”) continue
}
.
.
.
}
Акнун шумо бояд чаҳорчӯбаро дар равзанаи сохташуда нишон диҳед. Танаффус барои гузаштан ба чаҳорчӯбаи навбатӣ 50 мс аст.
window.IMShow(img)
window.WaitKey(50)
Пас аз оғози барнома, тиреза бо ҷараёни видео аз камера кушода мешавад.
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)
}
}
Масалан 2
Дар ин мисол, биёед мисоли қаблиро истифода барем ва системаи шинохти чеҳраро дар асоси Haar Cascades созем.
Каскадҳои Ҳаар як таснифотҳои каскадӣ мебошанд, ки бо истифода аз техникаи мавҷҳои Haar таълим дода мешаванд. Онҳо пикселҳоро дар тасвир таҳлил мекунанд, то хусусиятҳои муайянро муайян кунанд. Барои гирифтани маълумоти бештар дар бораи Haar Cascades, лутфан истиноди зерро пайгирӣ кунед.
Каскадҳои аллакай омӯзонидашударо зеркашӣ кунед
Барои ин ба шумо лозим аст, ки классификатор эҷод кунед ва онро файли аллакай омӯзонидашударо таъмин кунед (пайванд дар боло оварда шудааст). Ман аллакай файли pencv_haarcascade_frontalface_default.xml-ро ба директорияе, ки барномаи мо ҷойгир аст, бор кардаам.
harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()
Барои муайян кардани чеҳраҳо дар тасвир, шумо бояд ин усулро истифода баред
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)
}
}
Ва... бале, ҳама чиз хуб шуд! Ҳоло мо системаи оддии шинохти чеҳра дорем, ки дар Go навишта шудааст. Ба наздикӣ ман нақша дорам, ки ин таҷрибаҳоро идома диҳам ва бо омезиши Go ва OpenCV чизҳои нави олӣ эҷод кунам.
Агар шумо таваҷҷӯҳ дошта бошед, лутфан баҳо диҳед
Ташаккур барои хондани мақола!
Skillbox тавсия медиҳад:
- Курси дусолаи амалй
"Ман таҳиягари веби PRO ҳастам" .- Курси онлайни таълимӣ
"Касби Java Developer" .- Курси солонаи амалӣ
"Таҳиягари PHP аз 0 то PRO" .
Манбаъ: will.com