This repository has been archived by the owner on Nov 2, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathload.go
91 lines (85 loc) · 2.22 KB
/
load.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"io"
"log"
"errors"
"image"
"image/draw"
"strings"
"strconv"
"encoding/csv"
"github.com/disintegration/imaging"
)
func decodeFunc(h []string) (func(rec []string) (draw.Image, error)) {
if h[0] == "ImageId" { return decodePGM }
if h[0] == "left_eye_center_x" {
return func(rec []string) (draw.Image, error) {
src, err := decodePGM(rec)
if err != nil { return nil, err }
b := src.Bounds()
img := image.NewRGBA(b)
draw.Draw(img, b, src, b.Min, draw.Src)
for i := 0; i < len(rec) / 2; i++ {
/* x, err := strconv.ParseFloat(rec[2*i], 64)
if err != nil {
log.Print(err)
continue
}
y, err := strconv.ParseFloat(rec[2*i + 1], 64)
if err != nil {
log.Print(err)
continue
}
img.Set(int(x + 0.5), int(y + 0.5), color.RGBA{0xff, 0, 0, 0xff})*/
}
// overlayPoints(
i := imaging.Resize(img, 500, 0, imaging.Lanczos)
return i, nil
}
}
return nil
}
func loadInput(in io.Reader, out chan draw.Image) {
defer close(out)
r := csv.NewReader(in)
r.TrimLeadingSpace = true
h, err := r.Read()
if err != nil {
log.Print(err)
return
}
dec := decodeFunc(h)
if dec == nil {
log.Print(errors.New("Invalid input format"))
return
}
for {
rec, err := r.Read()
if err != nil {
if err == io.EOF { break }
log.Print(err)
return
}
img, err := dec(rec)
if err != nil {
log.Print(err)
return
}
out <- img
}
}
func decodePGM(rec []string) (draw.Image, error) {
f := strings.Fields(rec[len(rec) - 1])
img := image.NewGray(image.Rect(0, 0, 96, 96))
for i, v := range f {
n, err := strconv.Atoi(v)
img.Pix[i] = uint8(n)
if err != nil {
return nil, err
}
}
return img, nil
}
func overlayPoints(x []float64, y []float64, img draw.Image) {
return
}