Skip to content

Instantly share code, notes, and snippets.

@tzununbekov
Created May 24, 2018 13:28
Show Gist options
  • Save tzununbekov/8c9573f75ea5a35d0c3c15b192adbc7e to your computer and use it in GitHub Desktop.
Save tzununbekov/8c9573f75ea5a35d0c3c15b192adbc7e to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"gocv.io/x/gocv"
"gocv.io/x/gocv/contrib"
)
func saveFile(file *multipart.FileHeader) error {
src, err := file.Open()
if err != nil {
return err
}
defer src.Close()
dst, err := os.Create("/tmp/" + file.Filename)
if err != nil {
return err
}
defer dst.Close()
if _, err = io.Copy(dst, src); err != nil {
return err
}
return nil
}
func detectKeypoints(img gocv.Mat) {
gray := gocv.NewMat()
gocv.CvtColor(img, &gray, gocv.ColorBGRToGray)
sift := contrib.NewSIFT()
fmt.Printf("Detected keypoints: %d\n", len(sift.Detect(gray)))
gray.Close()
sift.Close()
}
func receiveFile(w http.ResponseWriter, r *http.Request) {
_, header, err := r.FormFile("img")
if err != nil {
panic(err)
}
if err = saveFile(header); err != nil {
panic(err)
}
fmt.Printf("Received file: %s\n", "/tmp/"+header.Filename)
img := gocv.IMRead("/tmp/"+header.Filename, gocv.IMReadColor)
defer img.Close()
// To make memory consumption faster
detectKeypoints(img)
detectKeypoints(img)
return
}
func main() {
http.HandleFunc("/upload", receiveFile)
fmt.Println("Starting server")
http.ListenAndServe(":8080", nil)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment