गोलांग और ओपनसीवी पर आधारित एक चेहरा पहचान प्रणाली का निर्माण

गोलांग और ओपनसीवी पर आधारित एक चेहरा पहचान प्रणाली का निर्माण
OpenCV कंप्यूटर विज़न परियोजनाओं के लिए विकसित एक लाइब्रेरी है। वह पहले से ही लगभग 20 साल की है। मैंने इसे कॉलेज में इस्तेमाल किया और अब भी इसे अपने C++ और Python प्रोजेक्ट के लिए उपयोग करता हूं क्योंकि इसमें उन भाषाओं के लिए अच्छा समर्थन है।

लेकिन जब मैंने गो सीखना और उसका उपयोग करना शुरू किया, तो मुझे आश्चर्य हुआ कि क्या ओपनसीवी का उपयोग इस भाषा के साथ काम करने के लिए किया जा सकता है। उस समय एकीकरण पर पहले से ही उदाहरण और ट्यूटोरियल मौजूद थे, लेकिन मुझे ऐसा लगा कि वे बहुत जटिल थे। थोड़ी देर बाद, मुझे द हाइब्रिड ग्रुप द्वारा बनाया गया एक रैपर मिला। इस लेख में, मैं आपको दिखाऊंगा कि Haar Cascades के साथ एक सरल चेहरा पहचान प्रणाली विकसित करके GoCV के साथ शुरुआत कैसे करें।

स्किलबॉक्स अनुशंसा करता है: व्यावहारिक पाठ्यक्रम "शुरुआत से पायथन डेवलपर".

अनुस्मारक: "हैबर" के सभी पाठकों के लिए - "हैबर" प्रचार कोड का उपयोग करके किसी भी स्किलबॉक्स पाठ्यक्रम में नामांकन करते समय 10 रूबल की छूट।

क्या आवश्यक होगा:

  • जाना;
  • OpenCV (इंस्टॉलर के लिंक नीचे हैं);
  • वेब या नियमित कैमकॉर्डर।

स्थापना

उदाहरण 1

पहले उदाहरण में, हम एक एप्लिकेशन बनाने का प्रयास करेंगे जो कैमरा वीडियो स्ट्रीम के साथ एक विंडो खोलता है।

सबसे पहले आपको उन पुस्तकालयों को आयात करना होगा जिनकी आपको काम करने के लिए आवश्यकता है।

आयात करना(
"लकड़ी का लट्ठा"
"gocv.io/x/gocv"
)

उसके बाद, आपको VideoCaptureDevice फ़ंक्शन का उपयोग करके एक VideoCapture ऑब्जेक्ट बनाना होगा। उत्तरार्द्ध कैमरे का उपयोग करके वीडियो स्ट्रीम कैप्चर करना संभव बनाता है। फ़ंक्शन एक पूर्णांक को पैरामीटर के रूप में लेता है (यह डिवाइस आईडी का प्रतिनिधित्व करता है)।

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()

अब सबसे दिलचस्प भाग पर चलते हैं।

चूँकि वीडियो छवि फ़्रेमों की एक सतत धारा है, इसलिए हमें कैमरे की वीडियो स्ट्रीम को अंतहीन रूप से पढ़ने के लिए एक अनंत लूप बनाने की आवश्यकता होगी। इसके लिए VideoCapture प्रकार की Read विधि की आवश्यकता होती है। यह एक मैट प्रकार (जो मैट्रिक्स हमने ऊपर बनाया है) की अपेक्षा करेगा, एक बूलियन लौटाएगा जो यह दर्शाता है कि वीडियोकैप्चर से एक फ्रेम सफलतापूर्वक पढ़ा गया था या नहीं।

for {     
        if ok := webcam.Read(&img); !ok || img.Empty( {
        log.Println(“Unable to read from the webcam”)    continue
     }
.
.
.
}

अब हमें बनाई गई विंडो में फ़्रेम को प्रदर्शित करने की आवश्यकता है। अगले फ़्रेम पर जाने के लिए रुकें - 50 एमएस।

window.IMShow(img)
विंडो.वेटकी(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)
}
}

और... हाँ, सब कुछ ठीक हो गया! अब हमारे पास गो में लिखित एक सरल चेहरा पहचान प्रणाली है। निकट भविष्य में, मैं इन प्रयोगों को जारी रखने और गो और ओपनसीवी को मिलाकर नई अच्छी चीजें बनाने की योजना बना रहा हूं।

यदि आप रुचि रखते हैं, तो कृपया रेटिंग दें जीआरपीसी वेब सर्वर, जिसे मैंने Python और OpenCV में लिखा था। किसी चेहरे का पता चलते ही यह डेटा स्ट्रीम कर देता है। यह विभिन्न प्रोग्रामिंग भाषाओं में अलग-अलग क्लाइंट बनाने का आधार है। वे सर्वर से जुड़ सकेंगे और उससे डेटा पढ़ सकेंगे।

लेख पढ़ने के लिए धन्यवाद!

स्किलबॉक्स अनुशंसा करता है:

स्रोत: www.habr.com

एक टिप्पणी जोड़ें