OpenCV нь компьютерийн харааны төслүүдэд зориулагдсан номын сан юм. Тэр аль хэдийн 20 орчим настай. Би үүнийг коллежид ашиглаж байсан ч C++ болон Python төслүүддээ ашигладаг, учир нь эдгээр хэлийг сайн дэмждэг.
Гэхдээ би Go-г сурч, ашиглаж эхлэхэд OpenCV-ийг энэ хэлтэй ажиллахад ашиглаж болох уу гэж бодсон. Тэр үед интеграцийн тухай жишээ, заавар аль хэдийн байсан ч надад хэтэрхий төвөгтэй санагдсан. Хэсэг хугацааны дараа би The Hybrid группын бүтээсэн боодолтой таарлаа. Энэ нийтлэлд би Haar Cascades-тай нүүр таних энгийн системийг хөгжүүлснээр GoCV-ийг хэрхэн эхлүүлэхийг харуулах болно.
Skillbox зөвлөж байна: Практик курс
"Эхнээс нь Python хөгжүүлэгч" .Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.
Чамд юу хэрэгтэй вэ:
- Явах;
- OpenCV (доорх суулгагчийн холбоосууд);
- вэб эсвэл ердийн камер.
тохиргоо
- Линукс:
gocv.io/getting-started/linux - макос:
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()
Одоо хамгийн сонирхолтой хэсэг рүүгээ орцгооё.
Видео нь зургийн жаазуудын тасралтгүй урсгал учраас бид камерын видео урсгалыг эцэс төгсгөлгүй уншихын тулд хязгааргүй давталт үүсгэх шаардлагатай болно. Энэ нь VideoCapture төрлийн Унших аргыг шаарддаг. Энэ нь VideoCapture-ийн фрэймийг амжилттай уншсан эсвэл уншаагүй эсэхийг илтгэх логик буцаах Mat төрлийн (бидний дээр үүсгэсэн матриц) хүлээж байна.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(“Unable to read from the webcam”) continue
}
.
.
.
}
Одоо бид үүсгэсэн цонхонд хүрээг харуулах хэрэгтэй. Дараагийн хүрээ рүү шилжихийн тулд түр зогсоо - 50 мс.
цонх.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 долгионы техник дээр тулгуурлан бэлтгэгдсэн шаталсан ангилагч юм. Тэд тодорхой шинж чанаруудыг хайхын тулд зураг дээрх пикселүүдийг шинжилдэг. 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 хөгжүүлэгч" .- Практик жилийн курс
"0-ээс PRO хүртэл PHP хөгжүүлэгч" .
Эх сурвалж: www.habr.com