initial commit
This commit is contained in:
commit
c67729332c
26 changed files with 1612 additions and 0 deletions
252
examples/main.go
Normal file
252
examples/main.go
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
//"bytes"
|
||||
//"encoding/hex"
|
||||
"fmt"
|
||||
"image"
|
||||
"os"
|
||||
//"image/jpeg"
|
||||
//"net/http"
|
||||
"git.giftfish.de/ston1th/webcam"
|
||||
"time"
|
||||
)
|
||||
|
||||
var frame []byte
|
||||
var img image.Image
|
||||
|
||||
func main() {
|
||||
cam, err := webcam.Open("/dev/video0", time.Second*5)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
defer cam.Close()
|
||||
|
||||
formats := cam.GetPixelFormats()
|
||||
println("Available formats: ")
|
||||
for k, value := range formats {
|
||||
fmt.Fprintln(os.Stderr, k, value)
|
||||
}
|
||||
|
||||
//choice := readChoice(fmt.Sprintf("Choose format [1-%d]: ", len(formats)))
|
||||
//format := formats[1]
|
||||
format := uint32(1196444237) // MJPEG
|
||||
//format := PixelFormat(1448695129) // YUV
|
||||
|
||||
fmt.Fprintf(os.Stderr, "Supported frame sizes for format %s\n", formats[format])
|
||||
fs := cam.GetFrameSizes(format)
|
||||
|
||||
for _, f := range fs {
|
||||
fmt.Fprintln(os.Stderr, f)
|
||||
}
|
||||
//choice = readChoice(fmt.Sprintf("Choose format [1-%d]: ", len(frames)))
|
||||
s := fs[5]
|
||||
f, w, h, err := cam.SetImageFormat(format, s.MaxWidth, s.MaxHeight)
|
||||
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "Resulting image format: %s (%dx%d)\n", formats[f], w, h)
|
||||
}
|
||||
|
||||
fmt.Fprintf(os.Stderr, "Press Enter to start streaming\n")
|
||||
fmt.Scanf("\n")
|
||||
err = cam.StartStreaming()
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
for {
|
||||
err = cam.WaitForFrame()
|
||||
switch err.(type) {
|
||||
case nil:
|
||||
case webcam.TimeoutErr:
|
||||
continue
|
||||
default:
|
||||
panic(err.Error())
|
||||
}
|
||||
frm, err := cam.ReadFrame()
|
||||
if err == nil {
|
||||
//print(".")
|
||||
os.Stdout.Write(frm)
|
||||
os.Stdout.Sync()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
buf := bytes.NewBuffer(frm)
|
||||
img, err = jpeg.Decode(buf)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
panic(http.ListenAndServe(":8090", nil))
|
||||
}
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
err := jpeg.Encode(w, img, nil)
|
||||
println(err)
|
||||
}
|
||||
|
||||
/*
|
||||
imgchan := make(chan *image.Image)
|
||||
pr, pw := io.Pipe()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
frm, err := cam.ReadFrame()
|
||||
if err == nil {
|
||||
pw.Write(frm)
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
img, err := mjpeg.Decode(pr)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}()
|
||||
|
||||
dec <- imgchan
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
http.HandleFunc("/frame", handler2)
|
||||
panic(http.ListenAndServe(":8090", nil))
|
||||
}
|
||||
|
||||
func handler2(w http.ResponseWriter, r *http.Request) {
|
||||
_, err := w.Write(frame)
|
||||
println(err)
|
||||
}
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
err := jpeg.Encode(w, *dec, nil)
|
||||
println(err)
|
||||
}*/
|
||||
|
||||
/*package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
fmt "fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var frame []byte
|
||||
var dec image.Image
|
||||
|
||||
func main() {
|
||||
cam, err := Open("/dev/video0")
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
defer cam.Close()
|
||||
|
||||
err = cam.StartStreaming()
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
for {
|
||||
frame, err = cam.ReadFrame()
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
dec, err = jpeg.Decode(bytes.NewBuffer(frame))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
panic(http.ListenAndServe(":8090", nil))
|
||||
}
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
err := jpeg.Encode(w, dec, nil)
|
||||
println(err)
|
||||
}*/
|
||||
|
||||
/*import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/jpeg"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
const X = 800
|
||||
const Y = 600
|
||||
|
||||
func div(f1, f2 float64) float64 {
|
||||
return ((f1 - f2) / f1) * 100
|
||||
}
|
||||
|
||||
func check(i1, i2 uint32) bool {
|
||||
if i1 == i2 {
|
||||
return false
|
||||
}
|
||||
if i1 == 0 {
|
||||
return false
|
||||
}
|
||||
if i2 == 0 {
|
||||
return false
|
||||
}
|
||||
f1 := float64(i1)
|
||||
f2 := float64(i2)
|
||||
if div(f1, f2) > 5.00 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func comp(p1, p2 image.Image) image.Image {
|
||||
red := color.RGBA{255, 0, 0, 0}
|
||||
n := image.NewRGBA(p1.Bounds())
|
||||
for i := 0; i < X; i++ {
|
||||
for j := 0; j < Y; j++ {
|
||||
r1, g1, b1, _ := p1.At(i, j).RGBA()
|
||||
r2, g2, b2, _ := p2.At(i, j).RGBA()
|
||||
if check(r1, r2) || check(g1, g2) || check(b1, b2) {
|
||||
n.Set(i, j, red)
|
||||
continue
|
||||
}
|
||||
n.Set(i, j, p1.At(i, j))
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
var img image.Image
|
||||
var test image.Image
|
||||
|
||||
func main() {
|
||||
f1, err := os.Open("pic1.jpeg")
|
||||
fmt.Println(err)
|
||||
f2, err := os.Open("pic2.jpeg")
|
||||
fmt.Println(err)
|
||||
p1, _, err := image.Decode(f1)
|
||||
fmt.Println(err)
|
||||
p2, _, err := image.Decode(f2)
|
||||
fmt.Println(err)
|
||||
img = comp(p1, p2)
|
||||
test = p1
|
||||
http.HandleFunc("/", handler)
|
||||
http.HandleFunc("/test", handler2)
|
||||
panic(http.ListenAndServe(":8090", nil))
|
||||
}
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println(jpeg.Encode(w, img, nil))
|
||||
}
|
||||
func handler2(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println(jpeg.Encode(w, test, nil))
|
||||
}*/
|
||||
Loading…
Add table
Add a link
Reference in a new issue