OpenCV ለኮምፒውተር እይታ ፕሮጀክቶች የተነደፈ ቤተ-መጽሐፍት ነው። እሷ ቀድሞውኑ 20 ዓመቷ ነው። በኮሌጅ ውስጥ ተጠቀምኩኝ እና አሁንም ለ C++ እና Python ፕሮጄክቶች እጠቀማለሁ ምክንያቱም ለእነዚያ ቋንቋዎች ጥሩ ድጋፍ አለው።
ነገር ግን Go መማር እና መጠቀም ስጀምር OpenCV ከዚህ ቋንቋ ጋር ለመስራት ይቻል እንደሆነ ለማወቅ ፍላጎት አደረብኝ። በዚያን ጊዜ ስለ ውህደት ምሳሌዎች እና አጋዥ ስልጠናዎች ነበሩ፣ ግን በጣም የተወሳሰቡ መሰለኝ። ትንሽ ቆይቶ፣ በሃይብሪድ ግሩፕ ቡድን የተፈጠረ መጠቅለያ አገኘሁ። በዚህ ጽሑፍ ውስጥ ከሃር ካስኬድስ ጋር ቀላል የፊት ለይቶ ማወቂያ ስርዓትን በማዘጋጀት በ GoCV እንዴት እንደሚጀመር አሳያችኋለሁ።
Skillbox ይመክራል፡ ተግባራዊ ኮርስ
"Python ገንቢ ከባዶ" .እኛ እናስታውስዎታለን- ለሁሉም የ "ሀብር" አንባቢዎች - የ "Habr" የማስተዋወቂያ ኮድን በመጠቀም በማንኛውም የ Skillbox ኮርስ ውስጥ ሲመዘገቡ የ 10 ሩብልስ ቅናሽ.
ምን ይጠየቃል?
- ሂድ;
- OpenCV (ከታች ጫኚ አገናኞች);
- ድር ወይም መደበኛ የቪዲዮ ካሜራ።
ቅንብር
- Linux:
gocv.io/getting-start/linux - macOS:
gocv.io/getting-start/macos - ዊንዶውስ
gocv.io/ጀማሪ-መጀመር/መስኮቶች
ለምሳሌ 1
በመጀመሪያው ምሳሌ የካሜራ ቪዲዮ ዥረት የሚያሳይ መስኮት የሚከፍት መተግበሪያ ለመፍጠር እንሞክራለን።
በመጀመሪያ ለስራ የሚያስፈልጉትን ቤተ-መጻሕፍት ማስመጣት ያስፈልግዎታል።
ማስመጣት (
"ሎግ"
"gocv.io/x/gocv"
)
ከዚህ በኋላ የ VideoCaptureDevice ተግባርን በመጠቀም የቪድዮ ቀረጻ ነገር መፍጠር ያስፈልግዎታል። የኋለኛው ደግሞ ካሜራ በመጠቀም የቪዲዮ ዥረት ለመቅረጽ ያስችላል። ተግባሩ ኢንቲጀርን እንደ መለኪያ ይጠቀማል (የመሳሪያውን መታወቂያ ይወክላል)።
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil { log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()
አሁን n-dimensional ማትሪክስ መፍጠር አለብን. ከካሜራ የተነበቡ ምስሎችን ያከማቻል።
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
}
.
.
.
}
አሁን በተፈጠረው መስኮት ውስጥ ፍሬሙን ማሳየት ያስፈልግዎታል. ወደ ቀጣዩ ፍሬም ለማንቀሳቀስ ባለበት ማቆም 50 ሚሴ ነው።
መስኮት.IMShow(img)
መስኮት.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 cascades የ Haar wavelet ቴክኒክን በመጠቀም የሰለጠኑ የካስኬድ ክላሲፋየሮች ናቸው። የተወሰኑ ባህሪያትን ለማግኘት በምስል ውስጥ ያሉትን ፒክስሎች ይመረምራሉ. ስለ 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 ድር ገንቢ ነኝ" .- ትምህርታዊ የመስመር ላይ ኮርስ
"ሙያ ጃቫ ገንቢ" .- ተግባራዊ ዓመት ኮርስ
"PHP ገንቢ ከ 0 ወደ PRO" .
ምንጭ: hab.com