ホームページ  >  記事  >  バックエンド開発  >  Golang は画像サムネイル生成と顔検出メソッドを実装します

Golang は画像サムネイル生成と顔検出メソッドを実装します

王林
王林オリジナル
2023-08-18 15:17:041275ブラウズ

Golang は画像サムネイル生成と顔検出メソッドを実装します

Golang による画像サムネイル生成と顔検出の実装方法

要約:
この記事では、Golang を使用して画像サムネイル生成と顔検出を実現する方法を紹介します。まず、Golang の画像処理ライブラリを通じてサムネイルを生成し、そのサムネイルをローカル ディスクに保存します。次に、Golang の顔検出ライブラリを使用して、生成されたサムネイルから顔を検出し、検出結果を返す方法を紹介します。

  1. 画像サムネイルの生成:
    まず、Golang の画像処理ライブラリを使用してサムネイルを生成する必要があります。これを実現するには、「github.com/nfnt/resize」などのサードパーティ ライブラリを使用できます。サムネイルを生成する方法を示すサンプル コードを次に示します。
package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "log"
    "os"

    "github.com/nfnt/resize"
)

func main() {
    inFile, err := os.Open("input.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer inFile.Close()

    // Decode the image
    srcImg, _, err := image.Decode(inFile)
    if err != nil {
        log.Fatal(err)
    }

    // Resize the image
    thumbnail := resize.Resize(200, 0, srcImg, resize.Lanczos3)

    // Create a new file for the thumbnail
    outFile, err := os.Create("thumbnail.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer outFile.Close()

    // Encode the thumbnail to JPEG format
    err = jpeg.Encode(outFile, thumbnail, &jpeg.Options{jpeg.DefaultQuality})
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Thumbnail generated successfully!")
}

このコードは、まず「input.jpg」という名前の画像ファイルを開き、それをデコードします。次に、サイズ変更ライブラリを使用して画像を特定のサイズ (この例では幅 200 ピクセル、高さは自動的に計算されます) に拡大縮小します。その後、生成されたサムネイルを「thumbnail.jpg」という名前のファイルに保存します。最後に、サムネイルの生成が成功したことを示すプロンプト メッセージが出力されます。

  1. 顔検出:
    次に、Golang の顔検出ライブラリを使用して、生成されたサムネイルから顔を検出する方法を紹介します。画像ぼかし処理にはサードパーティ ライブラリ「github.com/esimov/stackblur-go」を使用し、顔検出には別のサードパーティ ライブラリ「github.com/Kagami/go-face」を使用できます。以下に、サムネイル内の顔を検出する方法を示すサンプル コードを示します。
package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "log"
    "os"

    "github.com/esimov/stackblur-go"
    "github.com/Kagami/go-face"
)

func main() {
    // Load the face detection model
    model, err := face.NewRecognizer("models")
    if err != nil {
        log.Fatal(err)
    }
    defer model.Close()

    // Open the thumbnail image file
    inFile, err := os.Open("thumbnail.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer inFile.Close()

    // Decode the thumbnail image
    srcImg, _, err := image.Decode(inFile)
    if err != nil {
        log.Fatal(err)
    }

    // Blur the image for better face detection results
    stackblur.Process(srcImg, uint32(srcImg.Bounds().Dx()), uint32(srcImg.Bounds().Dy()), 20)

    // Convert the image to grayscale
    grayImg, err := face.ConvertImageToGray(srcImg)
    if err != nil {
        log.Fatal(err)
    }

    // Detect faces in the image
    faces, err := model.Recognize(grayImg, 1.5, 3)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Detected %d face(s) in the thumbnail
", len(faces))

    // Draw rectangles around the detected faces
    for _, f := range faces {
        x, y, w, h := f.Rectangle()
        faceImg := face.Crop(grayImg, face.Rect(x, y, x+w, y+h))
        outFile, err := os.Create("face.jpg")
        if err != nil {
            log.Fatal(err)
        }
        defer outFile.Close()

        // Encode the face image to JPEG format
        err = jpeg.Encode(outFile, faceImg, &jpeg.Options{jpeg.DefaultQuality})
        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("Face detected at coordinates (%d,%d,%d,%d)
", x, y, w, h)
    }
}

このコードは、最初に顔検出モデルをロードし、「thumbnail.jpg」という名前の画像ファイルを開きます。次に、サムネイルをぼかしてグレースケール変換し、顔検出結果の精度を向上させます。次に、顔検出ライブラリを使用してサムネイル内の顔を検出し、検出された顔の数を出力します。最後に、検出された顔は長方形のボックスの形でマークされ、「face.jpg」という名前のファイルに保存されます。

概要:
この記事では、Golang を使用して画像のサムネイル生成と顔検出を実現する方法を紹介します。サードパーティ ライブラリのサポートにより、これらの関数を Golang で簡単に実装できます。これらの技術を使用すると、画像を処理し、サムネイルの生成や顔の検出など、画像から有用な情報を抽出できます。この記事があなたのお役に立てれば幸いです、読んでいただきありがとうございます!

以上がGolang は画像サムネイル生成と顔検出メソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。