mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-28 19:47:14 +08:00
refactor: move IOCRService to IImageService
This commit is contained in:
+2
-2
@@ -86,7 +86,7 @@ type DriverExt struct {
|
|||||||
windowSize Size
|
windowSize Size
|
||||||
frame *bytes.Buffer
|
frame *bytes.Buffer
|
||||||
doneMjpegStream chan bool
|
doneMjpegStream chan bool
|
||||||
OCRService IOCRService // used to get texts from image
|
ImageService IImageService // used to extract image data
|
||||||
interruptSignal chan os.Signal
|
interruptSignal chan os.Signal
|
||||||
|
|
||||||
// cache step data
|
// cache step data
|
||||||
@@ -110,7 +110,7 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if dExt.OCRService, err = newVEDEMOCRService(); err != nil {
|
if dExt.ImageService, err = newVEDEMImageService(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+36
-44
@@ -28,6 +28,25 @@ type OCRResult struct {
|
|||||||
Points []PointF `json:"points"`
|
Points []PointF `json:"points"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o OCRResult) ToOCRText() OCRText {
|
||||||
|
rect := image.Rectangle{
|
||||||
|
// ocrResult.Points 顺序:左上 -> 右上 -> 右下 -> 左下
|
||||||
|
Min: image.Point{
|
||||||
|
X: int(o.Points[0].X),
|
||||||
|
Y: int(o.Points[0].Y),
|
||||||
|
},
|
||||||
|
Max: image.Point{
|
||||||
|
X: int(o.Points[2].X),
|
||||||
|
Y: int(o.Points[2].Y),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return OCRText{
|
||||||
|
Text: o.Text,
|
||||||
|
Rect: rect,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type ImageResult struct {
|
type ImageResult struct {
|
||||||
URL string `json:"url"` // image uploaded url
|
URL string `json:"url"` // image uploaded url
|
||||||
OCRResult []OCRResult `json:"ocrResult"` // OCR texts
|
OCRResult []OCRResult `json:"ocrResult"` // OCR texts
|
||||||
@@ -137,15 +156,15 @@ func (t OCRTexts) FindTexts(texts []string, options ...ActionOption) (
|
|||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVEDEMOCRService() (*veDEMOCRService, error) {
|
func newVEDEMImageService() (*veDEMImageService, error) {
|
||||||
if err := checkEnv(); err != nil {
|
if err := checkEnv(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &veDEMOCRService{}, nil
|
return &veDEMImageService{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// veDEMOCRService implements IOCRService interface
|
// veDEMImageService implements IImageService interface
|
||||||
type veDEMOCRService struct{}
|
type veDEMImageService struct{}
|
||||||
|
|
||||||
var actions = []string{
|
var actions = []string{
|
||||||
"ocr", // get ocr texts
|
"ocr", // get ocr texts
|
||||||
@@ -155,7 +174,7 @@ var actions = []string{
|
|||||||
// "close",
|
// "close",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *veDEMOCRService) getImageResult(imageBuf *bytes.Buffer) (
|
func (s *veDEMImageService) GetImage(imageBuf *bytes.Buffer) (
|
||||||
imageResult ImageResult, err error) {
|
imageResult ImageResult, err error) {
|
||||||
|
|
||||||
bodyBuf := &bytes.Buffer{}
|
bodyBuf := &bytes.Buffer{}
|
||||||
@@ -265,40 +284,9 @@ func (s *veDEMOCRService) getImageResult(imageBuf *bytes.Buffer) (
|
|||||||
Msg("request veDEM OCR service failed")
|
Msg("request veDEM OCR service failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
return imageResponse.Result, nil
|
imageResult = imageResponse.Result
|
||||||
}
|
log.Debug().Interface("imageResult", imageResult).Msg("get image data by veDEM")
|
||||||
|
return imageResult, nil
|
||||||
func (s *veDEMOCRService) GetTexts(imageBuf *bytes.Buffer) (
|
|
||||||
ocrTexts OCRTexts, url string, err error) {
|
|
||||||
|
|
||||||
imageResult, err := s.getImageResult(imageBuf)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Msg("getOCRResult failed")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ocrResult := range imageResult.OCRResult {
|
|
||||||
rect := image.Rectangle{
|
|
||||||
// ocrResult.Points 顺序:左上 -> 右上 -> 右下 -> 左下
|
|
||||||
Min: image.Point{
|
|
||||||
X: int(ocrResult.Points[0].X),
|
|
||||||
Y: int(ocrResult.Points[0].Y),
|
|
||||||
},
|
|
||||||
Max: image.Point{
|
|
||||||
X: int(ocrResult.Points[2].X),
|
|
||||||
Y: int(ocrResult.Points[2].Y),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
ocrTexts = append(ocrTexts, OCRText{
|
|
||||||
Text: ocrResult.Text,
|
|
||||||
Rect: rect,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
url = imageResult.URL
|
|
||||||
|
|
||||||
log.Debug().Interface("texts", ocrTexts).Msg("get screen texts by veDEM OCR")
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkEnv() error {
|
func checkEnv() error {
|
||||||
@@ -327,9 +315,9 @@ func getLogID(header http.Header) string {
|
|||||||
return logID[0]
|
return logID[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
type IOCRService interface {
|
type IImageService interface {
|
||||||
// GetTexts returns ocr texts and uploaded image url
|
// GetImage returns image result including ocr texts, uploaded image url, etc
|
||||||
GetTexts(imageBuf *bytes.Buffer) (texts OCRTexts, url string, err error)
|
GetImage(imageBuf *bytes.Buffer) (imageResult ImageResult, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetScreenTextsByOCR takes a screenshot, returns the image path and OCR texts.
|
// GetScreenTextsByOCR takes a screenshot, returns the image path and OCR texts.
|
||||||
@@ -340,13 +328,17 @@ func (dExt *DriverExt) GetScreenTextsByOCR() (imagePath string, ocrTexts OCRText
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageUrl string
|
imageResult, err := dExt.ImageService.GetImage(bufSource)
|
||||||
ocrTexts, imageUrl, err = dExt.OCRService.GetTexts(bufSource)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("GetScreenTextsByOCR failed")
|
log.Error().Err(err).Msg("GetScreenTextsByOCR failed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, ocrResult := range imageResult.OCRResult {
|
||||||
|
ocrTexts = append(ocrTexts, ocrResult.ToOCRText())
|
||||||
|
}
|
||||||
|
|
||||||
|
imageUrl := imageResult.URL
|
||||||
if imageUrl != "" {
|
if imageUrl != "" {
|
||||||
dExt.cacheStepData.screenShotsUrls[imagePath] = imageUrl
|
dExt.cacheStepData.screenShotsUrls[imagePath] = imageUrl
|
||||||
log.Debug().Str("imagePath", imagePath).Str("imageUrl", imageUrl).Msg("log screenshot")
|
log.Debug().Str("imagePath", imagePath).Str("imageUrl", imageUrl).Msg("log screenshot")
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func checkOCR(buff *bytes.Buffer) error {
|
func checkOCR(buff *bytes.Buffer) error {
|
||||||
service, err := newVEDEMOCRService()
|
service, err := newVEDEMImageService()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
imageResult, err := service.getImageResult(buff)
|
imageResult, err := service.GetImage(buff)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user