OpenCV เช เชเชฎเซเชชเซเชฏเซเชเชฐ เชตเชฟเชเชจ เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชเซ. เชคเซเชฃเซ เชชเชนเซเชฒเซเชฅเซ เช เชฒเชเชญเช 20 เชตเชฐเซเชทเชจเซ เชเซ. เชฎเซเช เชคเซเชจเซ เชเซเชฒเซเชเชฎเชพเช เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเชคเซ เช
เชจเซ เชนเชเซ เชชเชฃ เชฎเชพเชฐเชพ C++ เช
เชจเซ Python เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชเชพเชฐเชฃ เชเซ เชคเซเชฎเชพเช เชคเซ เชญเชพเชทเชพเช เชฎเชพเชเซ เชธเชพเชฐเซ เชธเชชเซเชฐเซเช เชเซ.
เชชเชฐเชเชคเซ เชเซเชฏเชพเชฐเซ เชฎเซเช Go เชถเซเชเชตเชพเชจเซเช เช
เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช, เชคเซเชฏเชพเชฐเซ เชฎเชจเซ เช เชญเชพเชทเชพ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ OpenCV เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ เชเซเชฎ เชคเซเชฎเชพเช เชฐเชธ เชชเชกเซเชฏเซ. เชคเซ เชธเชฎเชฏเซ, เชเชเซเชเชฐเชฃ เชชเชฐ เชชเชนเซเชฒเชพเชฅเซ เช เชเชฆเชพเชนเชฐเชฃเซ เช
เชจเซ เชเซเชฏเซเชเซเชฐเชฟเชฏเชฒเซเชธ เชนเชคเชพ, เชชเชฐเชเชคเซ เชคเซ เชฎเชจเซ เชฒเชพเชเชคเซเช เชนเชคเซเช เชเซ เชคเซ เชเซเชฌ เชเชเชฟเชฒ เชนเชคเชพ. เชฅเซเชกเซ เชตเชพเชฐ เชชเชเซ, เชนเซเช เชง เชนเชพเชเชฌเซเชฐเชฟเชก เชเซเชฐเซเชช เชเซเชฎ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซเชฒ เชฐเซเชชเชฐ เชธเชพเชฎเซ เชเชตเซเชฏเซ. เช เชฒเซเชเชฎเชพเช, เชนเซเช เชคเชฎเชจเซ เชฌเชคเชพเชตเซเชถ เชเซ Haar Cascades เชธเชพเชฅเซ เชเช เชธเชฐเชณ เชเชนเซเชฐเซ เชเชณเชเชตเชพเชจเซ เชธเชฟเชธเซเชเชฎ เชตเชฟเชเชธเชพเชตเซเชจเซ GoCV เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชถเชฐเซเชเชค เชเชฐเชตเซ.
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ: เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"เชถเชฐเซเชเชคเชฅเซ เชชเชพเชฏเชฅเซเชจ เชกเซเชตเชฒเชชเชฐ" .เช เชฎเซ เชฏเชพเชฆ เชเชฐเชพเชตเซเช เชเซเช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชเชเซ เชฎเชพเชเซ - Habr เชชเซเชฐเซเชฎเซ เชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชชเชฃ เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชเซเชฐเซเชธเชฎเชพเช เชจเซเชเชงเชฃเซ เชเชฐเชคเซ เชตเชเชคเซ 10 เชฐเซเชฌเชฒ เชกเชฟเชธเซเชเชพเชเชจเซเช.
เชถเซเช เชเชฐเซเชฐเซ เชเซ:
- เชเชพเช;
- OpenCV (เชจเซเชเซ เชเชจเซเชธเซเชเซเชฒเชฐ เชฒเชฟเชเชเซเชธ);
- เชตเซเชฌ เช เชฅเชตเชพ เชจเชฟเชฏเชฎเชฟเชค เชตเชฟเชกเชฟเชฏเซ เชเซเชฎเซเชฐเชพ.
เชธเซเชฅเชพเชชเชจ
- เชฒเชฟเชจเชเซเชธ:
gocv.io/getting-started/linux - เชฎOSเชเซเชธ:
gocv.io/getting-started/macos - เชตเชฟเชจเซเชกเซเช:
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()
เชตเชฟเชกเชฟเช เชธเซเชเซเชฐเซเชฎ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชตเชฟเชจเซเชกเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ - เช เชจเซเชฏเซเชตเชฟเชจเซเชกเซ เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
window := gocv.NewWindow(โwebcamwindowโ)
defer window.Close()
เชนเชตเซ เชเชพเชฒเซ เชธเซเชฅเซ เชฐเชธเชชเซเชฐเชฆ เชญเชพเช เชคเชฐเชซ เชเชเชณ เชตเชงเซเช.
เชตเชฟเชกเชฟเชฏเซ เช เชเชฎเซเช เชซเซเชฐเซเชฎเซเชธเชจเซ เชธเชคเชค เชชเซเชฐเชตเชพเชน เชนเซเชตเชพเชฅเซ, เชเซเชฎเซเชฐเชพเชจเชพ เชตเชฟเชกเชฟเชฏเซ เชธเซเชเซเชฐเซเชฎเชจเซ เช เชตเชฟเชฐเชคเชชเชฃเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เช เชฎเชพเชฐเซ เช เชจเชเชค เชฒเซเชช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชตเชฟเชกเซเชฏเซเชเซเชชเซเชเชฐ เชชเซเชฐเชเชพเชฐเชจเซ เชฐเซเชก เชชเชฆเซเชงเชคเชฟเชจเซ เชเชฐเซเชฐ เชเซ. เชคเซ เชฎเซเช เชชเซเชฐเชเชพเชฐ (เช เชฎเซ เชเชชเชฐ เชฌเชจเชพเชตเซเชฒ เชฎเซเชเซเชฐเชฟเชเซเชธ) เชจเซ เช เชชเซเชเซเชทเชพ เชฐเชพเชเชถเซ, เชฌเซเชฒเชฟเชฏเชจ เชฎเซเชฒเซเชฏ เชชเชฐเชค เชเชฐเชถเซ เชเซ เชฆเชฐเซเชถเชพเชตเซ เชเซ เชเซ เชถเซเช VideoCaptureเชฎเชพเชเชฅเซ เชซเซเชฐเซเชฎ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชตเชพเชเชเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ เชเซ เชจเชนเซเช.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(โUnable to read from the webcamโ) continue
}
.
.
.
}
เชนเชตเซ เชคเชฎเชพเชฐเซ เชฌเชจเชพเชตเซเชฒเซ เชตเชฟเชเชกเซเชฎเชพเช เชซเซเชฐเซเชฎ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเชเชฒเซ เชซเซเชฐเซเชฎ เชชเชฐ เชเชตเชพ เชฎเชพเชเซเชจเซ เชตเชฟเชฐเชพเชฎ 50 ms เชเซ.
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 เชชเชฐ เชเชงเชพเชฐเชฟเชค เชซเซเชธ เชฐเซเชเชเซเชจเชฟเชถเชจ เชธเชฟเชธเซเชเชฎ เชฌเชจเชพเชตเซเช.
เชนเชพเชฐ เชเชพเชธเซเชเซเชก เช เชเชพเชธเซเชเซเชก เชตเชฐเซเชเซเชเซเชค เชเซ เชเซเชจเซ เชนเชพเชฐ เชตเซเชตเชฒเซเช เชคเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชพเชฒเซเชฎ เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเช เช เชฎเซเช เชตเชฟเชถเซเชทเชคเชพเชเชจเซ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชเชฎเซเชเชฎเชพเช เชชเชฟเชเซเชธเซเชฒเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เชเซ. เชนเชพเชฐ เชเชพเชธเซเชเซเชกเซเชธ เชตเชฟเชถเซ เชตเชงเซ เชเชพเชฃเชตเชพ เชฎเชพเชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชจเซเชเซเชจเซ เชฒเชฟเชเชเซเชธเชจเซ เช เชจเซเชธเชฐเซ.
เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชถเชฟเชเซเชทเชฟเชค เชเชพเชธเซเชเซเชก เชกเชพเชเชจเชฒเซเชก เชเชฐเซ
เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเซเชฒเชพเชธเชฟเชซเชพเชฏเชฐ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชคเซเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชถเชฟเชเซเชทเชฟเชค เชซเชพเชเชฒ เชซเซเชก เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เชฒเชฟเชเช เชเชชเชฐ เชเชชเซเชฒเซ เชเซ). เชฎเซเช เชชเชนเซเชฒเซเชฅเซ เช 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 เชจเซ เชเซเชกเซเชจเซ เชจเชตเซ เชถเชพเชจเชฆเชพเชฐ เชตเชธเซเชคเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเชกเซ เชฐเชนเซเชฏเซ เชเซเช.
เชเซ เชคเชฎเชจเซ เชฐเชธ เชนเซเชฏ, เชคเซ เชเซเชชเชพ เชเชฐเซเชจเซ เชฐเซเช เชเชฐเซ
เชฒเซเช เชตเชพเชเชเชตเชพ เชฌเชฆเชฒ เชเชญเชพเชฐ!
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ:
- เชฌเซ เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"เชนเซเช เชชเซเชฐเซ เชตเซเชฌ เชกเซเชตเชฒเชชเชฐ เชเซเช" .- เชถเซเชเซเชทเชฃเชฟเช เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ
"เชชเซเชฐเซเชซเซเชถเชจ เชเชพเชตเชพ เชกเซเชตเชฒเชชเชฐ" .- เชเช เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"0 เชฅเซ PRO เชธเซเชงเซ PHP เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ" .
เชธเซเชฐเซเชธ: www.habr.com