From 0803d182bc44556a18f7171dff9e973e1fecb8a1 Mon Sep 17 00:00:00 2001 From: chenhan Date: Tue, 9 Jul 2024 14:48:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=BE=E7=89=87=E5=A4=84?= =?UTF-8?q?=E7=90=86APIs:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 图像特效 - 黑白图片上色 图像增强 - 图像对比度增强 - 图像无损放大 - 图像清晰度增强 - 图像色彩增强 --- .gitignore | 1 + README.md | 11 ++++ example/image/enhance_01.jpg | Bin 0 -> 81824 bytes go.mod | 5 +- go.sum | 19 ++++++ image/client.go | 70 ++++++++++++++++++++++ image/const.go | 16 +++++ image/effect.go | 7 +++ image/enhance.go | 22 +++++++ image/enhance_test.go | 110 +++++++++++++++++++++++++++++++++++ image/error.go | 22 +++++++ image/model.go | 53 +++++++++++++++++ image/test_helper.go | 22 +++++++ 13 files changed, 357 insertions(+), 1 deletion(-) create mode 100644 example/image/enhance_01.jpg create mode 100644 image/client.go create mode 100644 image/const.go create mode 100644 image/effect.go create mode 100644 image/enhance.go create mode 100644 image/enhance_test.go create mode 100644 image/error.go create mode 100644 image/model.go create mode 100644 image/test_helper.go diff --git a/.gitignore b/.gitignore index a552964..5714632 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ vendor/ glide.lock .idea/ +image/test_result \ No newline at end of file diff --git a/README.md b/README.md index 364d47c..f8dee36 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,17 @@ #### 文本审核 - [ ] 通用类文本反作弊 +### 图像增强与特效 + +#### 图像特效 +- [x] 黑白图片上色 + +#### 图像增强 +- [x] 图像对比度增强 +- [x] 图像无损放大 +- [x] 图像清晰度增强 +- [x] 图像色彩增强 + # LISENCE the project is licensed under the [Apache License 2.0](https://github.com/chenqinghe/baidu-ai-go-sdk/blob/master/LICENSE) diff --git a/example/image/enhance_01.jpg b/example/image/enhance_01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04677a8ab85cb85864cf1d8ba71abfee2be3de79 GIT binary patch literal 81824 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 Qvx{XC)b+q;wZF6f2lcW!hX4Qo literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod index 9ecd97a..e2af284 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module github.com/chenqinghe/baidu-ai-go-sdk go 1.13 -require github.com/imroc/req v0.2.4 +require ( + github.com/imroc/req v0.2.4 + github.com/stretchr/testify v1.9.0 +) diff --git a/go.sum b/go.sum index 497e9af..5941e13 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,21 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/imroc/req v0.2.4 h1:8XbvaQpERLAJV6as/cB186DtH5f0m5zAOtHEaTQ4ac0= github.com/imroc/req v0.2.4/go.mod h1:J9FsaNHDTIVyW/b5r6/Df5qKEEEq2WzZKIgKSajd1AE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/image/client.go b/image/client.go new file mode 100644 index 0000000..6ccea41 --- /dev/null +++ b/image/client.go @@ -0,0 +1,70 @@ +package image + +import ( + "context" + "fmt" + gosdk "github.com/chenqinghe/baidu-ai-go-sdk" + "github.com/imroc/req" + "net/http" +) + +type ImageClient struct { + *gosdk.Client +} + +func NewEnhanceClient(apiKey, secretKey string) *ImageClient { + return &ImageClient{ + Client: gosdk.NewClient(apiKey, secretKey), + } +} + +func (e *ImageClient) requestUrl(url string) (string, error) { + if err := e.Auth(); err != nil { + return "", err + } + + return fmt.Sprintf("%s?access_token=%s", url, e.AccessToken), nil +} + +func (e *ImageClient) posUrlEncode(ctx context.Context, url string, + inputParam *Input, maxSize int) (*EnhanceResponse, error) { + options, err := inputParam.encode(maxSize) + if err != nil { + return nil, err + } + + url, err = e.requestUrl(url) + if err != nil { + return nil, err + } + + header := req.Header{ + "Content-Type": "application/x-www-form-urlencoded", + } + + resp, err := req. + Post(url, req.Param(options), header, ctx) + if err != nil { + return nil, err + } + + if resp.Response().StatusCode != http.StatusOK { + return nil, APIError{ + ErrorCode: 0, + ErrorMsg: resp.String(), + StatusCode: resp.Response().Status, + } + } + + var response generalResponse + err = resp.ToJSON(&response) + if err != nil { + return nil, fmt.Errorf("decode enhance response: %w", err) + } + + if response.success() { + return &response.EnhanceResponse, nil + } + + return nil, response.APIError +} diff --git a/image/const.go b/image/const.go new file mode 100644 index 0000000..11a2f71 --- /dev/null +++ b/image/const.go @@ -0,0 +1,16 @@ +package image + +import "github.com/chenqinghe/baidu-ai-go-sdk/voice" + +const ( + urlContrastEnhance = "https://aip.baidubce.com/rest/2.0/image-process/v1/contrast_enhance" + urlColorEnhance = "https://aip.baidubce.com/rest/2.0/image-process/v1/color_enhance" + urlColorize = "https://aip.baidubce.com/rest/2.0/image-process/v1/colourize" + urlQualityEnhance = "https://aip.baidubce.com/rest/2.0/image-process/v1/image_quality_enhance" + urlDefinitionEnhance = "https://aip.baidubce.com/rest/2.0/image-process/v1/image_definition_enhance" +) + +const ( + image8M = 8 * voice.MB + image4M = 4 * voice.MB +) diff --git a/image/effect.go b/image/effect.go new file mode 100644 index 0000000..bc86a4f --- /dev/null +++ b/image/effect.go @@ -0,0 +1,7 @@ +package image + +import "context" + +func (e *ImageClient) Colourize(ctx context.Context, param *Input) (*EnhanceResponse, error) { + return e.posUrlEncode(ctx, urlColorize, param, image8M) +} diff --git a/image/enhance.go b/image/enhance.go new file mode 100644 index 0000000..b6d6b27 --- /dev/null +++ b/image/enhance.go @@ -0,0 +1,22 @@ +package image + +import ( + "context" +) + +// ContrastEnhance https://ai.baidu.com/ai-doc/IMAGEPROCESS/ek3bclnzn +func (e *ImageClient) ContrastEnhance(ctx context.Context, param *Input) (*EnhanceResponse, error) { + return e.posUrlEncode(ctx, urlContrastEnhance, param, image8M) +} + +func (e *ImageClient) ColorEnhance(ctx context.Context, param *Input) (*EnhanceResponse, error) { + return e.posUrlEncode(ctx, urlColorEnhance, param, image8M) +} + +func (e *ImageClient) QualityEnhance(ctx context.Context, param *Input) (*EnhanceResponse, error) { + return e.posUrlEncode(ctx, urlQualityEnhance, param, image4M) +} + +func (e *ImageClient) DefinitionEnhance(ctx context.Context, param *Input) (*EnhanceResponse, error) { + return e.posUrlEncode(ctx, urlDefinitionEnhance, param, image8M) +} diff --git a/image/enhance_test.go b/image/enhance_test.go new file mode 100644 index 0000000..baa2af4 --- /dev/null +++ b/image/enhance_test.go @@ -0,0 +1,110 @@ +package image + +import ( + "bytes" + "context" + "encoding/base64" + "github.com/stretchr/testify/require" + "io/ioutil" + "os" + "testing" +) + +var ( + client *ImageClient +) + +func preTest() { + if client != nil { + return + } + client = NewEnhanceClient(os.Getenv("BAIDU_API_KEY"), + os.Getenv("BAIDU_SECRET_KEY")) + err := os.MkdirAll("./test_result", os.ModePerm) + if err != nil { + panic(err) + } +} + +func TestAllAPI(t *testing.T) { + preTest() + + t.Run("contrastEnhance", TestContrastEnhance) + + t.Run("color_enhance", func(t *testing.T) { + err := generalCall(client.ColorEnhance, &Input{ + ImageUrl: "https://ai.bdstatic.com/file/75F5ABC751594F55B23AC4168F4A919A", + File: nil, + ImageBase64: "", + }) + require.NoError(t, err) + }) + + t.Run("quality_enhance", func(t *testing.T) { + err := generalCall(client.QualityEnhance, &Input{ + ImageUrl: "https://ai-public-console.cdn.bcebos.com/portal-pc-static/1720085025198/images/technology/imageprocess/image_quality_enhance/1.jpg", + File: nil, + ImageBase64: "", + }) + require.NoError(t, err) + }) + + t.Run("definition_enhance", func(t *testing.T) { + err := generalCall(client.DefinitionEnhance, &Input{ + ImageUrl: "https://ai-public-console.cdn.bcebos.com/portal-pc-static/1720085025198/images/technology/imageprocess/image_definition_enhance/1-1.jpg", + File: nil, + ImageBase64: "", + }) + require.NoError(t, err) + }) + + t.Run("colourize", func(t *testing.T) { + err := generalCall(client.Colourize, &Input{ + ImageUrl: "https://ai-public-console.cdn.bcebos.com/portal-pc-static/1720085025198/images/technology/imageprocess/colourize/1.jpg", + File: nil, + ImageBase64: "", + }) + require.NoError(t, err) + }) +} + +func TestContrastEnhance(t *testing.T) { + preTest() + + err := generalCall(client.ContrastEnhance, &Input{ + ImageUrl: "https://ai-public-console.cdn.bcebos.com/portal-pc-static/1720085025198/images/technology/imageprocess/contrast_enhance/1.jpg", + File: nil, + ImageBase64: "", + }) + require.NoError(t, err) + + binary, err := ioutil.ReadFile("../example/image/enhance_01.jpg") + require.NoError(t, err) + + err = generalCall(client.ContrastEnhance, &Input{ + ImageBase64: base64.StdEncoding.EncodeToString(binary), + }) + require.NoError(t, err) + + err = generalCall(client.ContrastEnhance, &Input{ + File: bytes.NewBuffer(binary), + }) + require.NoError(t, err) + + err = generalCall(client.ContrastEnhance, &Input{ + ImageUrl: "https://www.baidu.com", + }) + require.NotNil(t, err, err) +} + +func generalCall(fn func(ctx context.Context, input *Input) (*EnhanceResponse, error), input *Input) error { + resp, err := fn(context.TODO(), input) + if err != nil { + return err + } + err = decodeToLocal(resp) + if err != nil { + return err + } + return nil +} diff --git a/image/error.go b/image/error.go new file mode 100644 index 0000000..c81fbd2 --- /dev/null +++ b/image/error.go @@ -0,0 +1,22 @@ +package image + +import ( + "errors" + "fmt" +) + +var ( + ErrImageTooLarge = errors.New("image to large") + ErrInvalidImage = errors.New("invalid image") +) + +// APIError https://ai.baidu.com/ai-doc/IMAGEPROCESS/Ek3bclpgv +type APIError struct { + ErrorCode int `json:"error_code"` + ErrorMsg string `json:"error_msg"` + StatusCode string `json:"-"` +} + +func (e APIError) Error() string { + return fmt.Sprintf("%#v", e) +} diff --git a/image/model.go b/image/model.go new file mode 100644 index 0000000..8142b66 --- /dev/null +++ b/image/model.go @@ -0,0 +1,53 @@ +package image + +import ( + "encoding/base64" + "io" +) + +// Input 三选一 +type Input struct { + ImageUrl string `json:"image_url"` + File io.Reader `json:"file"` + ImageBase64 string `json:"image_base_64"` +} + +func (i *Input) encode(maxSize int) (map[string]interface{}, error) { + var invokeParam = make(map[string]interface{}) + switch { + case i.File != nil: + binary, err := io.ReadAll(i.File) + if err != nil { + return nil, err + } + base64Encode := base64.StdEncoding.EncodeToString(binary) + if len(base64Encode) > maxSize { + return nil, ErrImageTooLarge + } + invokeParam["image"] = base64Encode + case i.ImageBase64 != "": + if len(i.ImageBase64) > maxSize { + return nil, ErrImageTooLarge + } + invokeParam["image"] = i.ImageBase64 + case i.ImageUrl != "": + invokeParam["url"] = i.ImageUrl + default: + return nil, ErrInvalidImage + } + return invokeParam, nil +} + +type EnhanceResponse struct { + Image string `json:"image"` + LogID int `json:"log_id"` +} + +type generalResponse struct { + EnhanceResponse + APIError +} + +func (g *generalResponse) success() bool { + return g.ErrorCode == 0 +} diff --git a/image/test_helper.go b/image/test_helper.go new file mode 100644 index 0000000..1e9a345 --- /dev/null +++ b/image/test_helper.go @@ -0,0 +1,22 @@ +package image + +import ( + "encoding/base64" + "fmt" + "io/ioutil" + "os" + "time" +) + +func decodeToLocal(response *EnhanceResponse) error { + binary, err := base64.StdEncoding.DecodeString(response.Image) + if err != nil { + panic(err) + } + + err = ioutil.WriteFile(fmt.Sprintf("./test_result/%d.png", time.Now().UnixMilli()), binary, os.ModePerm) + if err != nil { + panic(err) + } + return nil +}