Getting Started with GoCV: Your Guide to Computer Vision in Go

Mar 16, 2024 | Data Science

Welcome to the world of computer vision in the Go programming language! GoCV is a powerful package that provides Go language bindings for the OpenCV 4 computer vision library. With GoCV, developers can create various applications that analyze and interpret visual data. In this guide, we’ll walk you through how to get started with GoCV, including usage examples, installation instructions, and troubleshooting tips.

How to Use GoCV

Let’s dive into some quick examples of how you can use GoCV to perform tasks like video capture and face detection.

Hello, Video Example

This example opens a video capture device, reads frames from it, and displays the video in a GUI window. Think of this as opening a camera app on your phone that continuously shows you what the camera sees.

package main

import (
    "gocv.io/x/gocv"
)

func main() {
    webcam, _ := gocv.OpenVideoCapture(0)
    window := gocv.NewWindow("Hello")
    img := gocv.NewMat()
    for {
        webcam.Read(img)
        window.IMShow(img)
        window.WaitKey(1)
    }
}

Face Detection Example

This more advanced example uses a camera to detect faces in the video stream. It accomplished this by drawing rectangles around detected faces, similar to how security cameras might function.

package main

import (
    "fmt"
    "image/color"
    "gocv.io/x/gocv"
)

func main() {
    // set to use a video capture device 0
    deviceID := 0
    // open webcam
    webcam, err := gocv.OpenVideoCapture(deviceID)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer webcam.Close()

    // open display window
    window := gocv.NewWindow("Face Detection")
    defer window.Close()

    // prepare image matrix
    img := gocv.NewMat()
    defer img.Close()

    // color for the rect when faces are detected
    blue := color.RGBA{0, 255, 0, 0}

    // load classifier to recognize faces
    classifier := gocv.NewCascadeClassifier()
    defer classifier.Close()
    if !classifier.Load("data/haarcascade_frontalface_default.xml") {
        fmt.Println("Error reading cascade file: data/haarcascade_frontalface_default.xml")
        return
    }

    fmt.Printf("Start reading camera device: %v\n", deviceID)
    for {
        if ok := webcam.Read(img); !ok {
            fmt.Printf("Cannot read device %v\n", deviceID)
            return
        }
        if img.Empty() {
            continue
        }

        // detect faces
        rects := classifier.DetectMultiScale(img)
        fmt.Printf("Found %d faces\n", len(rects))
        // draw a rectangle around each face on the original image
        for _, r := range rects {
            gocv.Rectangle(img, r, blue, 3)
        }

        // show the image in the window, and wait 1 millisecond
        window.IMShow(img)
        window.WaitKey(1)
    }
}

Installation Steps

To utilize GoCV, you first need to have OpenCV installed on your system. Below are simple instructions for different operating systems.

For Ubuntu

  • Change directories to where you want to install GoCV.
  • Use git to clone the repository:
  • cd $HOME/folder_with_your_src
    git clone https://github.com/hybridgroup/gocv.git
  • Install OpenCV:
  • cd gocv
    make install

For macOS

  • Install OpenCV using Homebrew:
  • brew uninstall opencv
    brew install opencv

For Windows

  • Download and install MinGW-W64 and CMake.
  • Use the following command to build OpenCV:
  • chdir %GOPATH%/src/gocv.io/x/gocv
    win_build_opencv.cmd

Troubleshooting

If you experience any issues, here are some common troubleshooting ideas:

  • Ensure all paths are correctly specified when loading classifier files or in the installation commands.
  • If GoCV cannot read from the video device, verify if the camera is working independently
  • If you’re using CUDA or OpenVINO, refer to their respective README for further details.

For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.

Final Thoughts

At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

Stay Informed with the Newest F(x) Insights and Blogs

Tech News and Blog Highlights, Straight to Your Inbox