add options for GetImage method

This commit is contained in:
buyuxiang
2023-08-01 13:58:55 +08:00
parent edcfec46dc
commit 2610f023f5
4 changed files with 30 additions and 43 deletions

View File

@@ -1,6 +1,6 @@
# Release History # Release History
## v4.3.6 (2023-07-31) ## v4.3.6-beta (2023-08-01)
- feat: support to reset driver (or session only) automatically when UIA2 / WDA crashed or WebDriver request failed - feat: support to reset driver (or session only) automatically when UIA2 / WDA crashed or WebDriver request failed
- feat: `tap_cv` action supports ui type detection and tap - feat: `tap_cv` action supports ui type detection and tap

View File

@@ -1 +1 @@
v4.3.5 v4.3.6-beta

View File

@@ -110,7 +110,7 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
return nil, err return nil, err
} }
if dExt.ImageService, err = newVEDEMImageService("ocr", "upload", "liveType"); err != nil { if dExt.ImageService, err = newVEDEMImageService(); err != nil {
return nil, err return nil, err
} }

View File

@@ -160,21 +160,11 @@ func (t OCRTexts) FindTexts(texts []string, options ...ActionOption) (results OC
return results, nil return results, nil
} }
func newVEDEMImageService(actions ...string) (*veDEMImageService, error) { func newVEDEMImageService() (*veDEMImageService, error) {
if err := checkEnv(); err != nil { if err := checkEnv(); err != nil {
return nil, err return nil, err
} }
if len(actions) == 0 { return &veDEMImageService{}, nil
actions = []string{"ocr"}
}
return &veDEMImageService{
actions: actions,
}, nil
}
func (v *veDEMImageService) WithUITypes(uiTypes ...string) *veDEMImageService {
v.uiTypes = uiTypes
return v
} }
// veDEMImageService implements IImageService interface // veDEMImageService implements IImageService interface
@@ -185,19 +175,29 @@ func (v *veDEMImageService) WithUITypes(uiTypes ...string) *veDEMImageService {
// liveType - get live type // liveType - get live type
// popup - get popup windows // popup - get popup windows
// close - get close popup // close - get close popup
type veDEMImageService struct { // ui - get ui position by type(s)
actions []string type veDEMImageService struct{}
uiTypes []string type (
} actionOptions []string
uiTypeOptions []string
)
func (s *veDEMImageService) GetImage(imageBuf *bytes.Buffer) (imageResult ImageResult, err error) { func (s *veDEMImageService) GetImage(imageBuf *bytes.Buffer, options ...interface{}) (imageResult ImageResult, err error) {
bodyBuf := &bytes.Buffer{} bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf) bodyWriter := multipart.NewWriter(bodyBuf)
for _, action := range s.actions { for _, option := range options {
bodyWriter.WriteField("actions", action) switch ov := option.(type) {
} case actionOptions:
for _, uiType := range s.uiTypes { for _, action := range ov {
bodyWriter.WriteField("uiTypes", uiType) bodyWriter.WriteField("actions", action)
}
case uiTypeOptions:
for _, uiType := range ov {
bodyWriter.WriteField("uiTypes", uiType)
}
default:
log.Warn().Interface("option", ov).Msgf("unexpected image service option")
}
} }
bodyWriter.WriteField("ocrCluster", "highPrecision") bodyWriter.WriteField("ocrCluster", "highPrecision")
@@ -338,7 +338,7 @@ func getLogID(header http.Header) string {
type IImageService interface { type IImageService interface {
// GetImage returns image result including ocr texts, uploaded image url, etc // GetImage returns image result including ocr texts, uploaded image url, etc
GetImage(imageBuf *bytes.Buffer) (imageResult ImageResult, err error) GetImage(imageBuf *bytes.Buffer, options ...interface{}) (imageResult ImageResult, err error)
} }
// GetScreenResult takes a screenshot, returns the image recognization result // GetScreenResult takes a screenshot, returns the image recognization result
@@ -346,11 +346,11 @@ func (dExt *DriverExt) GetScreenResult() (screenResult *ScreenResult, err error)
var bufSource *bytes.Buffer var bufSource *bytes.Buffer
var imagePath string var imagePath string
if bufSource, imagePath, err = dExt.takeScreenShot( if bufSource, imagePath, err = dExt.takeScreenShot(
builtin.GenNameWithTimestamp("%d_ocr")); err != nil { builtin.GenNameWithTimestamp("%d_cv")); err != nil {
return return
} }
imageResult, err := dExt.ImageService.GetImage(bufSource) imageResult, err := dExt.ImageService.GetImage(bufSource, actionOptions{"ocr", "upload", "liveType"})
if err != nil { if err != nil {
log.Error().Err(err).Msg("GetImage from ImageService failed") log.Error().Err(err).Msg("GetImage from ImageService failed")
return return
@@ -495,28 +495,15 @@ func (u UIResults) GetUIResult(options ...ActionOption) (UIResult, error) {
return uiResults[idx], nil return uiResults[idx], nil
} }
// newVEDEMUIService return image service for
func newVEDEMUIService(uiTypes []string) (*veDEMImageService, error) {
vedemUIService, err := newVEDEMImageService("ui")
if err != nil {
return nil, err
}
return vedemUIService.WithUITypes(uiTypes...), nil
}
func (dExt *DriverExt) GetUIResultMap(uiTypes []string) (uiResultMap UIResultMap, err error) { func (dExt *DriverExt) GetUIResultMap(uiTypes []string) (uiResultMap UIResultMap, err error) {
var bufSource *bytes.Buffer var bufSource *bytes.Buffer
var imagePath string var imagePath string
if bufSource, imagePath, err = dExt.takeScreenShot( if bufSource, imagePath, err = dExt.takeScreenShot(
builtin.GenNameWithTimestamp("%d_ocr")); err != nil { builtin.GenNameWithTimestamp("%d_cv")); err != nil {
return return
} }
vedemUIService, err := newVEDEMUIService(uiTypes) imageResult, err := dExt.ImageService.GetImage(bufSource, actionOptions{"ui"}, uiTypeOptions(uiTypes))
if err != nil {
return
}
imageResult, err := vedemUIService.GetImage(bufSource)
if err != nil { if err != nil {
log.Error().Err(err).Msg("GetImage from ImageService failed") log.Error().Err(err).Msg("GetImage from ImageService failed")
return return