Установка и настройка OpenCV

  • Автор темы Автор темы mexan
  • Дата начала Дата начала
Сообщения
202
Реакции
0
Все действия инструкции будут расписаны под Windows. В моем случае это Windows 11.
Для работы с библиотекой OpenCV, мы будем использовать пакет GoCV. Он поддерживает последние версии Go и OpenCV v4.10.0 на Linux, macOS и Windows.

Установка CMake и MinGW-W64
  • скачиваем установщик,
  • устанавливаем по умолчанию, установщик добавит CMake в ваш системный путь.
  • с MinGW-W64 непонятные проблемы с онлайн установщиком, поэтому все делается вручную.

Установка MinGW-W64:
  1. идем на сай https://winlibs.com/#download-release и скачиваем последнюю версию. Я качал: GCC 14.2.0 (with POSIX threads) + LLVM/Clang/LLD/LLDB 18.1.8 + MinGW-w64 12.0.0 UCRT - release 1
  2. распаковываем на c:\mingw64\
  3. теперь открываем Переменные среды - Переменные среды пользователя - выбираем Path - Изменить - Создать - и указываем путь к папке bin: c:\mingw64\bin\
  4. сохраняемся и перезагружаем ПК
  5. запускаем cmd и проверяем: gcc --version
  6. должно получиться такое:
    Код:
    PS C:\Users\test> gcc --version
    gcc.exe (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r1) 14.2.0
    Copyright (C) 2024 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Установка пакета GoCV:
Я пользуюсь JetBrains GoLand
  1. создаем проект
  2. в терминале вводим:
    go get -u -d gocv.io/x/gocv
  3. заходим в go.mod и видим что пакет установлен
    require gocv.io/x/gocv v0.37.0 // indirect

Установка OpenCV 4.10.0 и модули OpenCV Contrib
Если следовать точь в точь офф документации то скорее всего будут постоянные ошибки.
  1. Поэтому надо перейти в каталог, куда установлен пакет GoCV.
    У меня это: c:\Users\test\go\pkg\mod\gocv.io\x\gocv@v0.37.0\
  2. Открываем cmd и теперь запускаем: chdir c:\Users\test\go\pkg\mod\gocv.io\x\gocv@v0.37.0
    в данном случае мы перешли в директорию с gocv
  3. теперь запускаем: win_build_opencv.cmd
  4. ждем пока закончится загрузка и сборка
  5. по пути c:\opencv\ у вас будет находиться скаченная библиотека
  6. теперь открываем Переменные среды - Переменные среды пользователя - выбираем Path - Изменить - Создать - и указываем путь:
    c:\opencv\build\install\x64\mingw\bin\

Проверка установки
Для проверки можно запустить такой код:
Код:
package main

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

func main() {
    fmt.Println("GoCV version:", gocv.Version())
}
ответ будет:
GoCV version: 0.37.0
 
Тестовый проект для проверки работоспособности.

Код:
package main

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

func main() {
    // Установим ID камеры
    deviceID := 0

    // Установим путь к XML файлу классификатора
    xmlFile := "haarcascade_frontalface_default.xml"

    // Открываем веб-камеру
    webcam, err := gocv.VideoCaptureDevice(deviceID)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer webcam.Close()

    // Открываем окно отображения
    window := gocv.NewWindow("Face Detect")
    defer window.Close()

    // Подготавливаем матрицу изображения
    img := gocv.NewMat()
    defer img.Close()

    // Цвет для прямоугольника, когда лица обнаружены
    blue := color.RGBA{0, 0, 255, 0}

    // Загружаем классификатор для распознавания лиц
    classifier := gocv.NewCascadeClassifier()
    defer classifier.Close()

    if !classifier.Load(xmlFile) {
        fmt.Printf("Error reading cascade file: %vn", xmlFile)
        return
    }

    fmt.Printf("start reading camera device: %vn", deviceID)
    for {
        if ok := webcam.Read(&img); !ok {
            fmt.Printf("cannot read device %dn", deviceID)
            return
        }
        if img.Empty() {
            continue
        }

        // Зеркально отобразить изображение
        gocv.Flip(img, &img, -1) // 0 - вертикальное отражение, 1 - горизонтальное, -1 - и вертикальное, и горизонтальное

        // Обнаруживаем лица
        rects := classifier.DetectMultiScale(img)
        fmt.Printf("found %d facesn", len(rects))

        // Рисуем прямоугольник вокруг каждого лица на оригинальном изображении,
        // вместе с текстом "Human"
        for _, r := range rects {
            gocv.Rectangle(&img, r, blue, 3)

            size := gocv.GetTextSize("Human", gocv.FontHersheyPlain, 1.2, 2)
            pt := image.Pt(r.Min.X+(r.Min.X/2)-(size.X/2), r.Min.Y-2)
            gocv.PutText(&img, "Human", pt, gocv.FontHersheyPlain, 1.2, blue, 2)
        }

        // Показываем изображение в окне и ждем 1 миллисекунду
        window.IMShow(img)
        if window.WaitKey(1) >= 0 {
            break
        }
    }
}
 
Назад
Сверху