Slide 16
Slide 16 text
func (app *CVApp) handleImage(ctx context.Context, message *linebot.ImageMessage) (replyMsgs
[]linebot.SendingMessage, err error) {
_, err = app.handleFaceRecognition(ctx, message.ID, func(gcpBuf io.Reader, awsBuf io.Reader) error {
awsFaces, err := aws.FaceDetect(awsBuf)
if err != nil {
return errors.Wrap(err, "aws face detect error")
}
replyMsgs = append(replyMsgs, linebot.NewTextMessage(string(awsFaces)))
gcpFaces, err := gcp.FaceDetect(gcpBuf)
if err != nil {
return errors.Wrap(err, "gcp face detect error")
}
replyMsgs = append(replyMsgs, linebot.NewTextMessage(string(gcpFaces)))
return nil
})
return replyMsgs, err
}
func (app *CVApp) handleFaceRecognition(ctx context.Context, messageID string, callback func(io.Reader,
io.Reader) error) ([]linebot.SendingMessage, error) {
content, err := app.bot.GetMessageContent(messageID).Do()
if err != nil {
return nil, errors.Wrap(err, "get image from line error")
}
defer content.Content.Close()
var gcpBuf, awsBuf bytes.Buffer
w := io.MultiWriter(&gcpBuf, &awsBuf)
if _, err := io.Copy(w, content.Content); err != nil {
return nil, errors.Wrap(err, "multiwriter copy error")
}
return nil, callback(io.Reader(&gcpBuf), io.Reader(&awsBuf))