Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang melaksanakan penjanaan imej kecil imej dan kaedah pengesanan muka

Golang melaksanakan penjanaan imej kecil imej dan kaedah pengesanan muka

王林
王林asal
2023-08-18 15:17:041344semak imbas

Golang melaksanakan penjanaan imej kecil imej dan kaedah pengesanan muka

Kaedah Golang untuk melaksanakan penjanaan lakaran kenit imej dan pengesanan muka

Abstrak:
Artikel ini memperkenalkan cara menggunakan Golang untuk melaksanakan penjanaan lakaran kecil imej dan pengesanan muka. Pertama, kami akan menjana lakaran kenit melalui pustaka pemprosesan imej Golang dan menyimpan lakaran kenit ke cakera setempat. Kemudian, kami akan memperkenalkan cara menggunakan pustaka pengesanan muka Golang untuk mengesan wajah dalam lakaran kecil yang dijana dan mengembalikan hasil pengesanan.

  1. Penjanaan imej kecil imej:
    Pertama, kita perlu menggunakan perpustakaan pemprosesan imej Golang untuk menjana imej kecil. Kita boleh menggunakan perpustakaan pihak ketiga seperti "github.com/nfnt/resize" untuk mencapai ini. Berikut ialah contoh kod yang menunjukkan cara menjana lakaran kecil:
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!")
}

Kod ini mula-mula membuka fail imej bernama "input.jpg" dan menyahkodnya. Kemudian, gunakan perpustakaan ubah saiz untuk menskalakan imej kepada saiz tertentu (lebar 200 piksel dalam contoh ini, ketinggian dikira secara automatik). Selepas itu, simpan lakaran kecil yang dijana pada fail bernama "thumbnail.jpg". Akhir sekali, mesej gesaan yang menunjukkan penjanaan lakaran kecil berjaya dikeluarkan.

  1. Pengesanan Muka:
    Seterusnya, kami akan memperkenalkan cara menggunakan perpustakaan pengesanan muka Golang untuk mengesan wajah dalam lakaran kecil yang dihasilkan. Kami boleh menggunakan pustaka pihak ketiga "github.com/esimov/stackblur-go" untuk pemprosesan kabur imej, dan kemudian menggunakan pustaka pihak ketiga "github.com/Kagami/go-face" yang lain untuk pengesanan muka. Berikut ialah contoh kod yang menunjukkan cara untuk mengesan wajah dalam lakaran kenit:
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)
    }
}

Kod ini mula-mula memuatkan model pengesanan muka dan membuka fail imej bernama "thumbnail.jpg". Kemudian, lakaran kecil dikaburkan dan skala kelabu ditukar untuk meningkatkan ketepatan hasil pengesanan muka. Seterusnya, gunakan pustaka pengesanan wajah untuk mengesan wajah dalam lakaran kecil dan mengeluarkan bilangan wajah yang dikesan. Akhir sekali, muka yang dikesan ditandakan dalam bentuk kotak segi empat tepat dan disimpan ke fail bernama "face.jpg".

Ringkasan:
Artikel ini memperkenalkan cara menggunakan Golang untuk mencapai penjanaan imej kecil imej dan pengesanan muka. Melalui sokongan perpustakaan pihak ketiga, kami boleh melaksanakan fungsi ini dengan mudah di Golang. Menggunakan teknik ini, kami boleh memproses imej dan mengekstrak maklumat berguna daripadanya, seperti menjana imej kecil dan mengesan wajah. Saya harap artikel ini dapat membantu anda, terima kasih kerana membaca!

Atas ialah kandungan terperinci Golang melaksanakan penjanaan imej kecil imej dan kaedah pengesanan muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn