OpenCV เจเฉฑเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจนเฉ เจเฉ เจเฉฐเจชเจฟเจเจเจฐ เจตเจฟเจเจผเจจ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจ เจนเฉเฅค เจเจน เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฒเจเจญเจ 20 เจธเจพเจฒเจพเจ เจฆเฉ เจนเฉเฅค เจฎเฉเจ เจเจธเจจเฉเฉฐ เจเจพเจฒเจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจ
เจคเฉ เจ
เจเฉ เจตเฉ เจเจธเจจเฉเฉฐ เจฎเฉเจฐเฉ C++ เจ
เจคเฉ เจชเจพเจเจฅเจจ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจฒเจ เจตเจฐเจคเจฆเจพ เจนเจพเจ เจเจฟเจเจเจเจฟ เจเจธ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจญเจพเจธเจผเจพเจตเจพเจ เจฒเจ เจเฉฐเจเจพ เจธเจฎเจฐเจฅเจจ เจนเฉเฅค
เจชเจฐ เจเจฆเฉเจ เจฎเฉเจ เจเฉ เจจเฉเฉฐ เจธเจฟเฉฑเจเจฃเจพ เจ
เจคเฉ เจตเจฐเจคเจฃเจพ เจธเจผเฉเจฐเฉ เจเฉเจคเจพ, เจคเจพเจ เจฎเฉเจจเฉเฉฐ เจเจธ เจเฉฑเจฒ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจนเฉ เจเจ เจเจฟ เจเฉ OpenCV เจจเฉเฉฐ เจเจธ เจญเจพเจธเจผเจพ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจตเจฐเจคเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจธ เจธเจฎเฉเจ, เจเจเฉเจเจฐเจฃ 'เจคเฉ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจฆเจพเจนเจฐเจฃเจพเจ เจ
เจคเฉ เจเจฟเจเจเฉเจฐเจฟเจ
เจฒ เจธเจจ, เจชเจฐ เจเจน เจฎเฉเจจเฉเฉฐ เจเจพเจชเจฆเจพ เจธเฉ เจเจฟ เจเจน เจฌเจนเฉเจค เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจธเจจเฅค เจฅเฉเฉเฉ เจฆเฉเจฐ เจฌเจพเจ
เจฆ, เจฎเฉเจจเฉเฉฐ เจนเจพเจเจฌเฉเจฐเจฟเจก เจเจฐเฉเฉฑเจช เจเฉเจฎ เจฆเฉเจเจฐเจพ เจฌเจฃเจพเจเจ เจเจฟเจ เจเฉฑเจ เจฐเฉเจชเจฐ เจฎเจฟเจฒเจฟเจเฅค เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ, เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเจฟเจเจพเจตเจพเจเจเจพ เจเจฟ เจนเจพเจฐ เจเฉเจธเจเฉเจกเจเจผ เจจเจพเจฒ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจเจฟเจนเจฐเจพ เจชเจเจพเจฃ เจชเฉเจฐเจฃเจพเจฒเฉ เจตเจฟเจเจธเจฟเจค เจเจฐเจเฉ GoCV เจจเจพเจฒ เจเจฟเจตเฉเจ เจธเจผเฉเจฐเฉเจเจค เจเจฐเจจเฉ เจนเฉเฅค
เจธเจเจฟเฉฑเจฒเจฌเจพเจเจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ: เจชเฉเจฐเฉเจเจเฉเจเจฒ เจเฉเจฐเจธ
"เจธเจเฉเจฐเฉเจ เจคเฉเจ เจชเจพเจเจฅเจจ เจกเจฟเจตเฉเจฒเจชเจฐ" .เจ เจธเฉเจ เจฏเจพเจฆ เจฆเจฟเจตเจพเจเจเจฆเฉ เจนเจพเจ: "Habr" เจฆเฉ เจธเจพเจฐเฉ เจชเจพเจ เจเจพเจ เจฒเจ - "Habr" เจชเฉเจฐเจเจพเจฐ เจเฉเจก เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจเจฟเจธเฉ เจตเฉ เจธเจเจฟเฉฑเจฒเจฌเจพเจเจธ เจเฉเจฐเจธ เจตเจฟเฉฑเจ เจฆเจพเจเจฒเจพ เจฒเฉเจฃ เจตเฉเจฒเฉ 10 เจฐเฉเจฌเจฒ เจฆเฉ เจเฉเจเฅค
เจเฉ เจฒเฉเฉ เจนเฉ:
- เจเจพเจฃเจพ;
- OpenCV (เจนเฉเจ เจพเจ เจเฉฐเจธเจเจพเจฒเจฐ เจฒเจฟเฉฐเจ);
- เจตเฉเฉฑเจฌ เจเจพเจ เจจเจฟเจฏเจฎเจค เจตเฉเจกเฉเจ เจเฉเจฎเจฐเจพเฅค
เจธเฉเจเจฟเฉฐเจ
- เจฒเฉเจจเจเจธ:
gocv.io/getting-started/linux - macOS:
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()
เจเฉฑเจ เจตเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎ เจจเฉเฉฐ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจตเจฟเฉฐเจกเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ - เจเจน NewWindow เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
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 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
เจเจธ เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ, เจเจ เจชเจฟเจเจฒเฉ เจเจฆเจพเจนเจฐเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเจ เจ เจคเฉ เจนเจพเจฐ เจเฉเจธเจเฉเจกเจเจผ 'เจคเฉ เจเจงเจพเจฐเจฟเจค เจเฉฑเจ เจเจฟเจนเจฐเจพ เจชเจเจพเจฃ เจชเฉเจฐเจฃเจพเจฒเฉ เจฌเจฃเจพเจเจเฅค
เจนเจพเจฐ เจเฉเจธเจเฉเจก เจเฉเจธเจเฉเจก เจตเจฐเจเฉเจเจฐเจฃ เจนเจจ เจเฉ เจนเจพเจฐ เจตเฉเจตเจฒเฉเจ เจคเจเจจเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเจฟเจเจฒเจพเจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจเจน เจเฉเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจฃ เจฒเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจชเจฟเจเจธเจฒ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจฆเฉ เจนเจจเฅค เจนเจพเจฐ เจเฉเจธเจเฉเจกเจเจผ เจฌเจพเจฐเฉ เจนเฉเจฐ เจเจพเจฃเจจ เจฒเจ, เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจฒเจฟเฉฐเจเจพเจ เจฆเฉ เจชเจพเจฒเจฃเจพ เจเจฐเฉเฅค
เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจธเจฟเจเจฒเจพเจ เจชเฉเจฐเจพเจชเจค เจเฉเจธเจเฉเจกเจพเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉ
เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฒเจพเจธเฉเจซเจพเจเจฐ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเจธ เจจเฉเฉฐ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจนเฉ เจธเจฟเจเจฒเจพเจ เจชเฉเจฐเจพเจชเจค เจซเจพเจเจฒ เจซเฉเจก เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ (เจฒเจฟเฉฐเจ เจเฉฑเจชเจฐ เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ)เฅค เจฎเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ 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 เจ เจคเฉ OpenCV เจจเฉเฉฐ เจเฉเฉ เจเฉ เจจเจตเฉเจเจ เจธเจผเจพเจจเจฆเจพเจฐ เจเฉเจเจผเจพเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพ เจฐเจฟเจนเจพ เจนเจพเจเฅค
เจเฉ เจคเฉเจธเฉเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจฐเฉเจ เจเจฐเฉ
เจฒเฉเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจฒเจ เจคเฉเจนเจพเจกเจพ เจงเฉฐเจจเจตเจพเจฆ!
เจธเจเจฟเฉฑเจฒเจฌเจพเจเจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ:
- เจฆเฉ เจธเจพเจฒเจพ เจชเฉเจฐเฉเจเจเฉเจเจฒ เจเฉเจฐเจธ
"เจฎเฉเจ เจเฉฑเจ เจชเฉเจฐเฉ เจตเฉเฉฑเจฌ เจกเจฟเจตเฉเจฒเจชเจฐ เจนเจพเจ" .- เจตเจฟเจฆเจฟเจ เจ เจเจจเจฒเจพเจเจจ เจเฉเจฐเจธ
"เจชเฉเจฐเฉเจซเฉเจธเจผเจจ เจเจพเจตเจพ เจกเจฟเจตเฉเจฒเจชเจฐ" .- เจชเฉเจฐเฉเจเจเฉเจเจฒ เจธเจพเจฒ เจฆเจพ เจเฉเจฐเจธ
"0 เจคเฉเจ PRO เจคเฉฑเจ PHP เจกเจฟเจตเฉเจฒเจชเจฐ" .
เจธเจฐเฉเจค: www.habr.com