>  기사  >  백엔드 개발  >  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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.