get rid of opencv for encoding

This commit is contained in:
Cedric Verstraeten
2023-01-17 16:51:59 +01:00
parent 99ce644e5d
commit e375c107ef
4 changed files with 17 additions and 16 deletions

1
.gitignore vendored
View File

@@ -9,4 +9,5 @@ machinery/data/cloud
machinery/data/recordings
machinery/data/snapshots
machinery/test*
machinery/init-dev.sh
deployments/docker/private-docker-compose.yaml

View File

@@ -19,15 +19,13 @@ import (
mqtt "github.com/eclipse/paho.mqtt.golang"
av "github.com/kerberos-io/joy4/av"
"github.com/kerberos-io/joy4/cgo/ffmpeg"
"gocv.io/x/gocv"
"net/http"
"net/url"
"runtime"
"runtime/debug"
"strconv"
"time"
"github.com/kerberos-io/agent/machinery/src/capture"
"github.com/kerberos-io/agent/machinery/src/computervision"
"github.com/kerberos-io/agent/machinery/src/log"
"github.com/kerberos-io/agent/machinery/src/models"
@@ -285,15 +283,12 @@ func HandleLiveStreamSD(livestreamCursor *pubsub.QueueCursor, configuration *mod
}
func sendImage(topic string, mqttClient mqtt.Client, pkt av.Packet, decoder *ffmpeg.VideoDecoder, decoderMutex *sync.Mutex) {
mat := computervision.GetRGBImage(pkt, decoder, decoderMutex)
buffer, err := gocv.IMEncode(gocv.JPEGFileExt, mat)
mat.Close()
img, err := capture.DecodeImage(pkt, decoder, decoderMutex)
if err == nil {
encoded := base64.StdEncoding.EncodeToString(buffer.GetBytes())
bytes, _ := computervision.ToBytes(img.Image)
encoded := base64.StdEncoding.EncodeToString(bytes)
mqttClient.Publish(topic, 0, false, encoded)
}
runtime.GC()
debug.FreeOSMemory()
}
func HandleLiveStreamHD(livestreamCursor *pubsub.QueueCursor, configuration *models.Configuration, communication *models.Communication, mqttClient mqtt.Client, codecs []av.CodecData, decoder *ffmpeg.VideoDecoder, decoderMutex *sync.Mutex) {

View File

@@ -1,7 +1,9 @@
package computervision
import (
"bytes"
"image"
"image/jpeg"
"io/ioutil"
"os"
"runtime"
@@ -85,6 +87,12 @@ func ToGray(rgb gocv.Mat) (gocv.Mat, error) {
return gray, nil
}
func ToBytes(img image.YCbCr) ([]byte, error) {
buffer := new(bytes.Buffer)
err := jpeg.Encode(buffer, &img, &jpeg.Options{Quality: 100})
return buffer.Bytes(), err
}
func ToRGB8(img image.YCbCr) (gocv.Mat, error) {
bounds := img.Bounds()
x := bounds.Dx()

View File

@@ -9,10 +9,10 @@ import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"github.com/kerberos-io/agent/machinery/src/capture"
"github.com/kerberos-io/agent/machinery/src/computervision"
"github.com/kerberos-io/agent/machinery/src/log"
"github.com/kerberos-io/agent/machinery/src/models"
"gocv.io/x/gocv"
)
type Message struct {
@@ -132,8 +132,6 @@ func ForwardSDStream(ctx context.Context, clientID string, connection *Connectio
logreader:
for {
var mat gocv.Mat
var encodedImage string
if cursor != nil && decoder != nil {
pkt, err := cursor.ReadPacket()
@@ -141,11 +139,10 @@ logreader:
if !pkt.IsKeyFrame {
continue
}
mat = computervision.GetRGBImage(pkt, decoder, decoderMutex)
buffer, err := gocv.IMEncode(gocv.JPEGFileExt, mat)
mat.Close()
img, err := capture.DecodeImage(pkt, decoder, decoderMutex)
if err == nil {
encodedImage = base64.StdEncoding.EncodeToString(buffer.GetBytes())
bytes, _ := computervision.ToBytes(img.Image)
encodedImage = base64.StdEncoding.EncodeToString(bytes)
}
} else {
log.Log.Error("ForwardSDStream:" + err.Error())